declare_message_map请问afxwin.h中class CDialog : public CWnd{...末尾处的一句DECLARE_MESSAGE_MAP()}形成映射表的代码在哪

declare_message_map  时间:2021-07-05  阅读:()

MFC中,自己写的一般类,如何添加Windows Message Handler函数。

你先用MFC自带的View,Doc这些类添加消息响应函数,看看新增的函数的声明和定义都出现在哪些地方就知道了。

比如我在一个SDI程序的Doc类中增加了AppAbout消息响应函数,然后在类的声明的最后大概是这样子的 protect: //{{AFX_MSG(CSDITestDoc) afx_msg void OnAppAbout(); //注意这句 //}}AFX_MSG DECLARE_MESSAGE_MAP() 在类的定义文件的开头有类似这样的代码: BEGIN_MESSAGE_MAP(CSDITestDoc, CDocument) //{{AFX_MSG_MAP(CSDITestDoc) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) //注意这句 //}}AFX_MSG_MAP END_MESSAGE_MAP() 就是通过这几句宏代码实现了消息响应函数的关联。

你照样子在自己的类里也这么写吧。

setprintpos是什么意思

我想实现如下功能:一个对话框程序中,点击一个按钮,弹出一个包含只包含进度条的对话框CProcessDlg,此对话框没有标题栏,没有任何按钮,当进度到100时自动退出此对话框,代码如下: class CProcessDlg : public CDialog { // Construction public: CProcessDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CProcessDlg) enum { IDD = IDD_DIALOG1 }; CProgressCtrl m_ProgressCtrl; //}}AFX_DATA int m_nMax,m_nStep; // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CProcessDlg) protected: virtual BOOL OnInitDialog(); virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CProcessDlg) afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; BOOL CProcessDlg::OnInitDialog() { m_nMax=100; m_nStep=10; m_ProgressCtrl.SetRange(0,100); m_ProgressCtrl.SetPos(0); m_ProgressCtrl.SetStep(m_nStep); SetTimer(2,1000,NULL); return TRUE; } void CProcessDlg::OnTimer(UINT nIDEvent) { int nPrePos = m_ProgressCtrl.StepIt(); char test[10]; int nPercent=(int)((double)(nPrePos+m_nStep)/m_nMax*100+0.5); wsprintf(test,"%d%%",nPercent); GetDlgItem(IDC_PERCENT)->SetWindowText(test); if (i=100) { EndDialog(0); } CDialog::OnTimer(nIDEvent); } 现在我在CMainDlg::OnButtonProcess()中加入如下代码 CProcessDlg processDlg; processDlg.DoModal(); 但是当我按这个按钮时,弹出对话框,进度条中蓝色带没有出现,显示10%就没变单独把这个对话框类做成主窗口,一切正常,请各位达人指教

C++程序里一个头文件的解释

这段代码的作用是从CDialog派生出一个CBlueDeviceDlg类,就这么回事。

它使用一个对话框模板,如果你有全部文件的话应该能在资源编辑器中看到IDD_Device这个对话框 至于构建函数和析构函数就不用说了吧? 那个DoDataExchange()函数的作用是进行数据交换,比如说对话框上有按钮啦,编辑框啦之类的,你需要把它们关联到一个变量来使用的时候,就需要这个函数 至于那个两个奇怪的宏,是VC为了实现动态创建和消息映射而写的,具体的内容很多,这里也说不清

请问afxwin.h中class CDialog : public CWnd{...末尾处的一句DECLARE_MESSAGE_MAP()}形成映射表的代码在哪

首先,要先明白三个宏分别代表的意思: DECLARE_MESSAGE_MAP();声明该类的消息映射表 BEGIN_MESSAG_MAP和END_MESSAGE_MAP定义该类的消息映射表 而消息映射表里面有几个数据:-messageEntries[]这个static数组记录该类的消息映射关系, messageMap记录该类映射表首地址和基类的映射表地址。

且注意:能拥有消息映射表必须是CCmdTarget的派生类。

而针对你这个问题:CDialog是MFC类库,其提供给用户的只有类声明,因此你看到了它的DECLARE_MESSAGE_MAP();而类成员具体的定义是编译后被封装成了lib,因此你看不到 BEGIN_MESSAG_MAP和END_MESSAGE_MAP 而你自定义的类的消息映射表需要你自己定义,所以你必须看得见。

轻云互联-618钜惠秒杀,香港CN2大宽带KVM架构云服务器月付22元,美国圣何塞精品云月付19元爆款!海量产品好货超值促销进行中!

官方网站:点击访问青云互联活动官网优惠码:终身88折扣优惠码:WN789-2021香港测试IP:154.196.254美国测试IP:243.164.1活动方案:用户购买任意全区域云服务器月付以上享受免费更换IP服务;限美国区域云服务器凡是购买均可以提交工单定制天机防火墙高防御保护端口以及保护模式;香港区域购买季度、半年付、年付周期均可免费申请额外1IP;使用优惠码购买后续费周期终身同活动价,价格不...

ThomasHost(月付5美元)美国/法国/英国/加拿大KVM,支持Windows

ThomasHost域名注册自2012年,部落最早分享始于2016年,还算成立了有几年了,商家提供基于KVM架构的VPS,数据中心包括美国、法国、英国、加拿大和爱尔兰等6个地区机房,VPS主机套餐最低2GB内存起步,支持Windows或者Linux操作系统,1Gbps端口不限制流量。最近商家提供了一个5折优惠码,优惠后最低套餐月付5美元起。下面列出部分套餐配置信息。CPU:1core内存:2GB硬...

TNAHosting($5/月)4核/12GB/500GB/15TB/芝加哥机房

TNAHosting是一家成立于2012年的国外主机商,提供VPS主机及独立服务器租用等业务,其中VPS主机基于OpenVZ和KVM架构,数据中心在美国芝加哥机房。目前,商家在LET推出芝加哥机房大硬盘高配VPS套餐,再次刷新了价格底线,基于OpenVZ架构,12GB内存,500GB大硬盘,支持月付仅5美元起。下面列出这款VPS主机配置信息。CPU:4 cores内存:12GB硬盘:500GB月流...

declare_message_map为你推荐
ipv6无网络访问权限WIN7本地连接,IPV4和IPV6无网络访问权限怎么解决fclose为什么fclose之后remove还是不成功vipjrvipjr英语怎么样?靠谱吗?vipjrvipjr怎么样?有真实体验的来说一下smartuploadSmartUpload组建实现文件上传下载,我要把文件保存到项目中的某个文件夹中,该如何实现?最好有程序参考ruby语言Ruby是一种什么样的语言,主要用来做什么,现在有一家公司让我从java转ruby,我很犹豫?问卷星登陆请问问卷星怎么设置答题时间?相似图片搜索如何输入图片并且搜出最相似的图片?51信用卡论坛51信用卡贷了1200 现在还不上怎么办51信用卡论坛刚才发现51信用卡管家可以查个人征信了,就查了下信用卡信用记录。这是截图,大家帮我看看我的这个逾期
域名停靠 汉邦高科域名注册 Dedicated wavecom z.com 谷歌香港 NetSpeeder 网站挂马检测工具 数字域名 双拼域名 秒杀预告 国外代理服务器软件 多线空间 太原联通测速 工信部网站备案查询 百度云空间 杭州电信 亿库 海康流媒体服务器 万根云主机 更多