posts - 58,  comments - 75,  trackbacks - 0
WTL创建对话框。
要用到头文件 atlapp.h

对话框的定义如下
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
    //用户代码
}

CDialogImpl类是WTL中的模式对话框的基类。他利用了奇异自递归模板技术,来获得继承类的实际行为。
有了定义我们要给这个对话框一个窗口资源。很简单,只要代码中定义一个IDD的枚举量就可以了。
枚举量的值为窗口资源的ID。对话框的定义代码演化为如下
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
    enum { IDD=IDD_MAINDLG };//一定要在public域,否则没办法访问,编译时报错
    //用户代码
}

就这样进行编译,编译器会报错,说CMainDialog是个抽象类,不能实例化。
其原因是ProessWindowMessage函数是个抽象地。
我们是不是要手动添加这个函数呢?可以。但对于编写代码来说并不方便。
这里要用到ATL中的消息映射宏了。
BEGIN_MSG_MAP( 类名 )
END_MSG_MAP()
有了这两个宏对后,就自动的添加了ProessWindowMessage函数了,而且添加消息映射的函数也方便。
现在对话框的定义代码演化为如下了
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
    enum { IDD=IDD_MAINDLG };//一定要在public域,否则没办法访问,编译时报错
    
public:
    BEGIN_MSG_MAP( CMainDialog )
    END_MSG_MAP()
    //用户代码
}

有了以上代码,对话框就可以显现在屏幕上了。但是这个对话框没有办法推出,应为没有一个消息映射函数。
接不到推出的消息。
我们有添加两个消息映射,分别对应界面上的OK按钮和Cancel按钮。这两个是button控件,我们用控件的消息映射
COMMAND_ID_HANDLER( ID, Fun )。
添加消息映射后的对话框类定义如下
#include < atlapp.h >
class CMainDialog : public CDialogImpl< CMainDialog >
{
public:
    enum { IDD=IDD_MAINDLG };//一定要在public域,否则没办法访问,编译时报错
   
public:
    BEGIN_MSG_MAP( CMainDialog )
        COMMAND_ID_HANDLER( IDOK, OnOk )
        COMMAND_ID_HANDLER( IDCANCEL, OnCancel )
    END_MSG_MAP()
   
public:
    LRESULT OnOk( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
    {
        EndDialog( wID );//推出对话框
        return 0;
    }

    LRESULT OnCancel( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled )
    {
        EndDialog( wID );//推出对话框
        return 0;
    }
    //用户代码
};

posted on 2007-05-09 11:18 walkspeed 阅读(1319) 评论(0)  编辑 收藏 引用 所属分类: C++语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(4)

随笔分类(64)

随笔档案(58)

文章分类(3)

文章档案(3)

相册

收藏夹(9)

C++零碎

好友

搜索

  •  

积分与排名

  • 积分 - 157891
  • 排名 - 163

最新评论

阅读排行榜

评论排行榜