生成Dialog-based程序 1.使用win32 Wizzard生成模版 2.生成Resource File(.rc) Win32程序不支持VC7.0 Resource Editor编辑出来的对话框(Dialog)。 他的ResourceType为 DIALOGEX。修改的方法是将其改为 DIALOG,其他部分也作相应修改。最好变为vc6的格式。 相关文章见: http://support.microsoft.com/default.aspx?scid=kb;en-us;138971 资源文件结构 见MSDN的 ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcefileformats.htm ResourceID ResourceType Left,Top,Width,Height STYLE CAPTION FONT BEGIN //list of Controls created in the dialog END 3.将CreateWindow改为CreateDialog()创建非模态对话框 4.修改消息处理回调函数: >>消息处理函数返回值为BOOL(可不变) >>如果窗口过程处理某消息,返回TRUE;不处理某消息,返回FALSE; >>CreateDialog()后,会发出WM_INITDIALOG,添加 >>增加窗体关闭选项: 1> WM_COMMAND ... case IDCANCEL: { EndDialog(hWnd,wmId);//仅关闭窗口 PostMessage(hWnd,WM_DESTROY,0,0);//退出程序 return TRUE; } >>非模态对话框的消息要经过程序的消息队列,这和模态对话框不同。要将这些消息传给对话框过程要更改消息循环。(可不变) if(hDlgWnd==0||!IsDialogMessage(hDlgWnd,&msg)){ if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } 2>去掉default的DefWindowProc这一项,使X按钮可用 //default: // return DefWindowProc(hWnd, message, wParam, lParam); 5.所有dialog空件所发都是WM_COMMAND消息,LOWORD(wParam)得到ID号 6.几个函数: 建立模态对话框:DialogBox() vs 建立非模态对话框:CreateDialog() 结束对话框: EndDialog() 得到控件:GetDlgItem() 设置控件字符:SetWindowText() 得到控件字符:GetWindowText() 发送阻塞消息: SendMessage() 发送非阻塞消息: PostMessage() 
|