使用DialogBox创建Windows程序
一般的使用SDK编写的WIN32程序(使用WinMain和WindProc进行消息处理),
生成的EXE文件都比较小,但是也会存在不足,即创建的窗口,界面的控件布局比较麻烦。
为此可以使用资源的方法解决窗口布局麻烦的问题,即在资源文件里面建好窗口和菜单,
然后再调用DiaglogBox函数创建Windows窗口,再在DLGPROC里面处理Window消息。
函数声明如下:
int DialogBox(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
HINSTANCE hInstance:为资源句柄
LPCTSTR lpTemplate:指向需要创建的窗口模板的长指针,可用MAKEINTRESOURCE来通过窗口ID获取
HWND hWndParent:父窗口句柄
DLGPROC lpDialogFunc:窗口的消息处理函数
窗口消息处理的回调函数定义如下:
BOOL CALLBACK DialogProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
这里,如果返回为TRUE则表示消息已经处理完了,如果是FALSE,表示还没处理好,系统会根据消息类型,
进行默认的处理。
调用DialogBox的时候,会创建资源里面的窗口,创建完后即进入所创建窗口的消息循环函数里面,
直到调用EndDialog()函数返回的时候,才会返回DialogBox函数。
注意,当使用SHCreateMenuBar的时候,如果创建的菜单是资源文件里面的,必须设置SHMENUBARINFO中
的dwFlags为SHCMBF_HMENU!