Win32編程--(VC7下Dialog-based程序的構建)

生成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()

 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章