將Dialog與客戶區綁定

 我們知道WTL工程的主框架CMainFrame有三個重要的成員:
        HWND m_hWndToolBar; //工具欄
        HWND m_hWndStatusBar;//狀態欄
        HWND m_hWndClient;//窗口區
客戶區就是我們的工作區了,如果我們想讓一個窗體Dialog作爲客戶區怎麼辦呢?開始的時候我遇到了很多問題,例如窗體不能添加,窗體看不見,工具條無效了等等。。。。 最後我終於發現啦:

 1.首先我們得自定義一個Dialog,加入ID爲IDD_Test並在上面加上我們美麗而可愛的各種控件.
 2.設置Dialog屬性:
     
      Style:這個就必須設置爲child了,要不窗體就不能作爲客戶區了。

      Border:最好設置爲None,這樣要好看點吧  呵呵,
      transparent:TRUE
      Visible:TRUE
3.修改視圖類class CMainView
      該類就是我們需要顯示的類了,當然對窗體做的各種操作,消息映射等都是在本類中定義。如下:

      class CMainView : public CDialogImpl<CMainView>, //繼承CDialogImpl
                         public CDialogResize <CMainView>//如果需要窗體可以改變大小
{
public:
 enum { IDD = IDD_Test };              //綁定Dialog資源ID

 BOOL PreTranslateMessage(MSG* pMsg)  
 {
  return CWindow::IsDialogMessage(pMsg);
 }
 BEGIN_MSG_MAP(CMainView)
 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)//初始化映射
 CHAIN_MSG_MAP (CDialogResize <CMainView>)
 END_MSG_MAP()

 

再添加布局調整映射表:
BEGIN_DLGRESIZE_MAP(CMainDlg)
DLGRESIZE_CONTROL(IDC_EDIT1,DLSZ_SIZE_X|DLSZ_SIZE_Y)   //DLGRESIZE_CONTROL(控件ID,調整標誌)
END_DLGRESIZE_MAP()

 

 

 

 LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)//初始化窗口

{

     //其他初始化

      DlgResize_Init (FALSE); //調整控件
      return 0;

}
 
};

4.在CMainFrame的OnCreate函數中創建Dialog
     LRESULT CMainFrame::OnCreate(......
      ............

      m_hWndClient = m_view.Create(m_hWnd);//初始化客戶區成員,m_hWnd就是父類
   
      .........
}


   這樣就將一個Dialog綁定到客戶區了,呵呵 ,現在就等你設計窗口了。
    

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