我们知道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绑定到客户区了,呵呵 ,现在就等你设计窗口了。