三、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程序只建立对话框,其它事情都在对话框程序中完成,这是可能的。