三、Windows通用对话框—只呼叫一个函数的Windows程序
到现在为止,我们已经说明了两个程序,让您浏览选择颜色,这两个程序分别是第九章中的COLORS1和本章中的COLORS2。现在是讲解COLORS3的时候了,这个程序只有一个Windows函数呼叫。COLORS3的原始码如程序11-7所示。
COLORS3所呼叫的唯一Windows函数是ChooseColor,这也是通用对话框链接库中的函数,它显示如图11-7所示的对话框。颜色选择类似于COLORS1和COLORS2,但是它与使用者交谈互动能力更强。
程序11-7  COLORS3
        
COLORS3.C
        
/*-------------------------------------------------------------------------
        
  COLORS3.C -- Version using Common Dialog Box
        
                                                (c) Charles Petzold, 1998
        
--------------------------------------------------------------------------*/
        
#include <windows.h>
        
#include <commdlg.h>
        
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
        
                                                         PSTR szCmdLine, int iCmdShow)
        
{
        
           static CHOOSECOLOR    cc ;
        
           static COLORREF                      crCustColors[16] ;
        
           cc.lStructSize                       = sizeof (CHOOSECOLOR) ;
        
           cc.hwndOwner                         = NULL ;
        
           cc.hInstance                         = NULL ;
        
           cc.rgbResult                         = RGB (0x80, 0x80, 0x80) ;
        
           cc.lpCustColors                      = crCustColors ;
        
           cc.Flags                             = CC_RGBINIT | CC_FULLOPEN ;
        
           cc.lCustData                        = 0 ;
        
           cc.lpfnHook                          = NULL ;
        
    cc.lpTemplateName = NULL ;
        
           return ChooseColor (&cc) ;
        
}
	
	ChooseColor函数使用一个CHOOSECOLOR型态的结构和含有16个DWORD的数组来存放常用颜色,使用者将从对话框中选择这些颜色之一。rgbResult字段可以初始化为一个颜色值,如果Flags字段的CC_RGBINIT旗标被设立,则显示该颜色。通常在使用这个函数时,rgbResult将被设定为使用者选择的颜色。
请注意,Color对话框的hwndOwner字段被设定为NULL。在ChooseColor函数呼叫DialogBox以显示对话框时,DialogBox的第三个参数也被设定为NULL。这是完全合法的,其含义是对话框不为另一个窗口所拥有。对话框的标题将显示在工作列中,而对话框就像一个普通的窗口那样执行。
您也可以在自己程序的对话框中使用这种技巧。使Windows程序只建立对话框,其它事情都在对话框程序中完成,这是可能的。
