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 而你自定义的类的消息映射表需要你自己定义,所以你必须看得见。

HostKvm 黑色星期五香港服务器终身六折 其余机房八折

HostKvm商家我们也不用多介绍,这个服务商来自国内某商家,旗下也有多个品牌的,每次看到推送信息都是几个服务商品牌一起推送的。当然商家还是比较稳定的,商家品牌比较多,这也是国内商家一贯的做法,这样广撒网。这次看到黑五优惠活动发布了,针对其主打的香港云服务器提供终身6折的优惠,其余机房服务器依然是8折,另还有充值50美元赠送5美元的优惠活动,有需要的可以看看。HostKvm是一个创建于2013年的...

Megalayer(月599元)限时8月香港和美国大带宽服务器

第一、香港服务器机房这里我们可以看到有提供四个大带宽方案,是全向带宽和国际带宽,前者适合除了中国大陆地区的全网地区用户可以用,后者国际带宽适合欧美地区业务。如果我们是需要大陆地区速度CN2优化的,那就需要选择常规的优化带宽方案,参考这里。CPU内存硬盘带宽流量价格选择E3-12308GB240GB SSD50M全向带宽不限999元/月方案选择E3-12308GB240GB SSD100M国际带宽不...

HostKvm:夏季优惠,香港云地/韩国vps终身7折,线路好/机器稳/适合做站

hostkvm怎么样?hostkvm是一家国内老牌主机商家,商家主要销售KVM架构的VPS,目前有美国、日本、韩国、中国香港等地的服务,站长目前还持有他家香港CN2线路的套餐,已经用了一年多了,除了前段时间香港被整段攻击以外,一直非常稳定,是做站的不二选择,目前商家针对香港云地和韩国机房的套餐进行7折优惠,其他套餐为8折,商家支持paypal和支付宝付款。点击进入:hostkvm官方网站地址hos...

declare_message_map为你推荐
app兼容测试拿到一个APP后主要的测试项有什么?重庆干部网络学院重庆信息技术职业学院一物一码一码归一码的上句是什么?科来网络分析系统科来网络分析系统 6.0 专家版 (演示)的功能网关和路由器的区别网关和路由器的区别和联系在deviceid如何查看自己安卓手机的Android Device IDspawning为什么编译和运行vc++ 时会出现Error spawning c1.exe 的错误smartuploadjspsmartupload如何使用?相似图片搜索怎么找手机上的一张相似图片?mediasRES代表什么意思
美国vps评测 pw域名 cpanel 英语简历模板word 警告本网站 长沙服务器 福建天翼加速 php空间推荐 双十一秒杀 免费phpmysql空间 免费私人服务器 海外空间 中国域名 hostease 月付空间 godaddy域名 建站行业 德国代理ip g6950 国内免备案空间 更多