在ATL中完成窗口C言语教程-C / C++-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝30
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:258回复:0

  在ATL中完成窗口C言语教程

楼主#
更多 发布于:2016-05-30 22:07

一、完成对话框

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;

}

优质IT资源分享社区为你提供此文。

本站有大量优质C、C++教程视频,资料等资源,包含C,C++基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

C、C++教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客