Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497299
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:54:34

下载本文示例代码
  ATL提供了一些工具类以实现窗口,这样在ATL组件里就可以不依赖MFC而很方便的创建窗口。   一、实现对话框   ATL中有三个模板类可用于创建一个对话框:   (1)CSimpleDialog:创建模式对话框, 可以host Windows Controls template < WORD t_wDlgTemplateID, BOOL t_bCenter = TRUE >class CSimpleDialog : public CDialogImplBase   (2)CDialogImpl:创建模式或非模式对话框, 可以host Windows Controls template < class T, class TBase = CWindow >class ATL_NO_VTABLE CDialogImpl : public CDialogImplBaseT< TBase >   (3)CAxDialogImpl:创建模式或非模式对话框, 可以host Windows Controls和ActiveX Controls template < class T, class TBase = CWindow >class ATL_NO_VTABLE CAxDialogImpl : public CDialogImplBaseT< TBase >   用CSimpleDialog和CDialogImpl不能显示含有ActiveX控件的对话框,只有CAxDialogImpl可以。如果想处理对话框中ActiveX控件的事件,在OnInitDialog()中加入AtlAdviseSinkMap(this, TRUE)。在退出时加入 AtlAdviseSinkMap(this, FALSE)。通过Insert/New ATL Object/miscellaneous/Dialog生成的对话框缺省就是从CAxDialogImpl继承的。   这三个类的使用方法很类似。都是派生出一个新类,并确保有一个IDD的成员指明资源ID。如: class CMyDialog : public CDialogImpl, ...{public:  enum { IDD = IDD_MYDIALOG };    //必须要有IDD这个成员,一般都是enum型   BEGIN_MSG_MAP(CMyDialog)    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)  END_MSG_MAP()   LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)  {   return 1;  }};CMyDialog dlg ;dlg.DoModal() ;   CSimpleDialog的使用可以更简单一些,如下: CSimpleDialog< IDD_MYDIALOG > dlg ;dlg.DoModal() ;   另外CSimpleDialog对IDOK和IDCANCEL有内在的支持,即会自动调用EndDialog,在其定义中包含如下代码: BEGIN_MSG_MAP(thisClass)    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)    COMMAND_RANGE_HANDLER(IDOK, IDNO, OnCloseCmd)END_MSG_MAP() ...... LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/){    ::EndDialog(m_hWnd, wID);    return 0;}   但CDialogImpl和CAxDialogImpl没有内在的支持,所以必须自己加消息处理函数调用EndDialog,比如: COMMAND_ID_HANDLER(IDOK, OnOK)COMMAND_ID_HANDLER(IDCANCEL, OnCancel) 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;} 共2页。 1 2 8 :   ATL提供了一些工具类以实现窗口,这样在ATL组件里就可以不依赖MFC而很方便的创建窗口。   一、实现对话框   ATL中有三个模板类可用于创建一个对话框:   (1)CSimpleDialog:创建模式对话框, 可以host Windows Controls template < WORD t_wDlgTemplateID, BOOL t_bCenter = TRUE >class CSimpleDialog : public CDialogImplBase   (2)CDialogImpl:创建模式或非模式对话框, 可以host Windows Controls template < class T, class TBase = CWindow >class ATL_NO_VTABLE CDialogImpl : public CDialogImplBaseT< TBase >   (3)CAxDialogImpl:创建模式或非模式对话框, 可以host Windows Controls和ActiveX Controls template < class T, class TBase = CWindow >class ATL_NO_VTABLE CAxDialogImpl : public CDialogImplBaseT< TBase >   用CSimpleDialog和CDialogImpl不能显示含有ActiveX控件的对话框,只有CAxDialogImpl可以。如果想处理对话框中ActiveX控件的事件,在OnInitDialog()中加入AtlAdviseSinkMap(this, TRUE)。在退出时加入 AtlAdviseSinkMap(this, FALSE)。通过Insert/New ATL Object/miscellaneous/Dialog生成的对话框缺省就是从CAxDialogImpl继承的。   这三个类的使用方法很类似。都是派生出一个新类,并确保有一个IDD的成员指明资源ID。如: class CMyDialog : public CDialogImpl, ...{public:  enum { IDD = IDD_MYDIALOG };    //必须要有IDD这个成员,一般都是enum型   BEGIN_MSG_MAP(CMyDialog)    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)  END_MSG_MAP()   LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)  {   return 1;  }};CMyDialog dlg ;dlg.DoModal() ;   CSimpleDialog的使用可以更简单一些,如下: CSimpleDialog< IDD_MYDIALOG > dlg ;dlg.DoModal() ;   另外CSimpleDialog对IDOK和IDCANCEL有内在的支持,即会自动调用EndDialog,在其定义中包含如下代码: BEGIN_MSG_MAP(thisClass)    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)    COMMAND_RANGE_HANDLER(IDOK, IDNO, OnCloseCmd)END_MSG_MAP() ...... LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/){    ::EndDialog(m_hWnd, wID);    return 0;}   但CDialogImpl和CAxDialogImpl没有内在的支持,所以必须自己加消息处理函数调用EndDialog,比如: COMMAND_ID_HANDLER(IDOK, OnOK)COMMAND_ID_HANDLER(IDCANCEL, OnCancel) 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;} 共2页。 1 2 8 : 下载本文示例代码


在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口在ATL中实现窗口
阅读(591) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~