我們知道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綁定到客戶區了,呵呵 ,現在就等你設計窗口了。