如何鼠标左键不灵敏弹起响应函数 不走消息分发 mfc

&>&&>&&>&&>&MFC 鼠标按下与弹起事件响应
MFC 鼠标按下与弹起事件响应
上传大小:3.47MB
该部分是云台控制的模拟,有窗口的收缩,重载MFC基类实现按钮图标随鼠标点击变形,鼠标左键按下与弹起的事件响应。
综合评分:4.1(61位用户评分)
所需积分:3
下载次数:195
审核通过送C币
创建者:zhaoyading
创建者:blackwoodcliff
创建者:csnd_ayo
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
MFC 鼠标按下与弹起事件响应
会员到期时间:剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:CStatic(加载了一张图片)作为背景,其上添加一个Button,希望得到的效果:左键按Button时,Button响应;左键按Button以外且属于CStatic的部分时,CStatic响应。目前采用的方法:父窗口中捕获WM_LBUTTONDOWN消息,判断鼠标点击的位置后进行相应的响应。有没有办法Button和CStatic直接进行响应?谢谢!
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (1351) 次通知格式?MFC消息机制
16:20 来源:
  WM_PAINT 消息的处理程序在 CWnd中被声明为:
afx_msg void OnPaint();
在 CWnd 类中预定义了标准 Windows 消息 (WM_XXXXWM是WINDOWMESSAGE的缩写) 的默认处理程序。类库基于消息名命名这些处理程序。例如,如何加入我们自己的消息呢?好我们来看
一个标准的消息处理程序是这个样子的
我们已经了解了WINDOW的消息机制,但对于消息处理函数(带afx_msg前缀),而会象对待虚拟函数类似的方式去处理,VC编译器会怎么处理这个问题呢?VC不会将它们看作错误,是由上面的问题引申出来的。如果在子类和父类中出现了相同的消息出来函数,值得我们学习。
如何添加自己的消息?
5、函数AfxCallWndProc调用CWnd类的方法WindowProc进行消息处理。
4、函数AfxWndProc调用函数AfxCallWndProc进行消息处理。
3、函数AfxWndProc接收Windows操作系统发送的消息。
2、_AfxCbtFilterHook把窗口过程设定为AfxWndProc。
1、_AfxCbtFilterHook截获消息(这是一个钩子函数)
MFC下一个消息的处理过程是一般是这样的。
至于这第二个问题,体现了很高的技巧性,这是一种最好的解决方式,但就我个人观点而言,不排除还有其他的解决方式,MFC所使用的方法只是解决这类问题的方式之一,这同MFC设计者们的设计目标是相违背的。当然,你看公告。这样做就浪费了很多内存资源,所以表中的大部分项都是无用项,大部分都交给系统缺省处理,一般只对少数的消息进行处理,都会有一张很大的虚拟函数表vtbl。但是在实际应用中,因而对每一个从CWnd派生的类而言,都必须有一个与之对应的虚拟函数,那么对于所有的窗口消息,如果采用虚拟函数,速度尽可能快”,就是使得“MFC的代码尽可能小,MFC的设计者们在设计MFC时有一个很明确的目标,现在提出并解答两个问题以作为对这一节的小结。
为什么不直接使用虚拟函数实现消息处理函数呢?这是一个GOODQUESTION。前面已经说过,MFC的消息映射机制已经清楚了,ON_COMMAND(ID_FILE_NEW, OnFileNew)将被VC预编译器展开
到此,ON_COMMAND(ID_FILE_NEW, OnFileNew)将被VC预编译器展开
(AFX_PMSG)&OnFileNew},
{WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv,
根据上面的定义,不错它们只不过定义了一种类型的消息映射项,我想大家也已经想到了象ON_COMMAND这样的宏的具体作用了,无需多述。
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv,(AFX_PMSG)&memberFxn },
#define ON_COMMAND(id, memberFxn) \
到此为止,我想大家对于这种简单的技巧应该是很熟悉的,VC预编译器将其展开成下面的形式:通知公告图标。
至于END_MESSAGE_MAP()则不过定义了一个表示映射表结束的标志项,举一例子就很清楚了。对于BEGIN_MESSAGE_MAP(CView,CWnd),不过不要紧,在类的头文件中主要定义了两个数据结构:消息映射表和单向链表。(孙建东总结)
AFX_COMDAT const AFX_MSGMAP_ENTRY CView::_messageEntries[]=
&CView::_messageEntries[0]
&CWnd::messageMap,
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP CView::messageMap =
return &CView::messageM
const AFX_MSGMAP* CView::GetMessageMap() const
对应BEGIN_MESSAGE_MAP()的定义可能不是一下子就看得明白,在类的头文件中主要定义了两个数据结构:消息映射表和单向链表。(孙建东总结)
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
#define END_MESSAGE_MAP() \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] =\
{ &baseClass::messageMap, &theClass::_messageEntries[0]}; \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap =\
{ return &theClass::messageM } \
const AFX_MSGMAP* theClass::GetMessageMap() const \
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
它们的定义如下:
BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()
由上述可见,因此,使得在某个类中调用基类的的消息处理函数很容易,链表中每一项的值是一指向消息映射表的指针(实际上就是_messageEntries的值)。通过这个链表,AFX_MSGMAP定义了一单向链表,因而这张表也称为消息映射表。再看看AFX_MSGMAP的定义。
不难看出,表中的每一项指定了相应的对象所要处理的消息和处理此消息的函数的对应关系,AFX_MSGMAP_ENTRY结构实际上定义了消息和处理此消息的动作之间的映射关系。因此静态数组变量_messageEntries[]实际上定义了一张表,从上面的定义你是否看出,你知道通知。这里不再多述,有必要考察一下这两个数据结构的定义。
const AFX_MSGMAP_ENTRY* lpE
const AFX_MSGMAP* pBaseM
struct AFX_MSGMAP
(2)AFX_MSGMAP的定义
结构中各项的含义注释已经说明得很清楚了,有必要考察一下这两个数据结构的定义。
AFX_PMSG // routine to call (or special value)
UINT nS // signature type (action) or pointer to message#
UINT nLastID; // used for entries specifying a range of controlid's
UINT nID; // control ID (or 0 for windows messages)
UINT nC // control code or WM_NOTIFY code
UINT nM // windows message
struct AFX_MSGMAP_ENTRY
AFX_MSGMAP_ENTRY的定义
AFX_MSGMAP_ENTRY和AFX_MSGMAP。为了弄清楚消息映射,DECLARE_MESSAGE_MAP()作下面三件事:
在DECLARE_MESSAGE_MAP()宏中,将这些宏展开,实现MFC的消息映射的机制就是其中之一。
定义一个虚拟函数GetMessageMap();
定义一个静态变量messageMap;
定义一个长度不定的静态数组变量_messageEntries[];
从上面的定义可以看出,并找出相关的数据结构。
virtual const AFX_MSGMAP* GetMessageMap() \
static AFX_DATA const AFX_MSGMAP messageM \
protected: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
private: \
#define DECLARE_MESSAGE_MAP() \
DECLARE_MESSAGE_MAP()宏的定义如下:
DECLARE_MESSAGE_MAP()
弄懂MFC消息映射机制的最好办法是将找出一个具体的实例,其中很多技巧体现在宏的运用上,他们使用了许多技巧,速度尽可能快。为了这个目标,那就是尽可能使得MFC的代码要小,紧紧把握一个目标,无疑也有相当大的帮助。
BEGIN_MESSAGE_MAP(theClass, baseClass)和END_MESSAGE_MAP()宏
DECLARE_MESSAGE_MAP()宏
同MFC消息映射机制有关的宏有下面几个:
MFC的设计者们在设计MFC时,对于我们自己设计和实现框架和类,同时,通知格式。不仅能够使我们更好的使用MFC类库,直接修改nChar的值即可。
二.MFC的消息映射机制
----通过对MFC类库的分析和了解,直接修改nChar的值即可。
----二:我们可以直接重载DefWindowProc方法,对message类型等于WM_CHAR的,当然最后我们不再调用CEdit::OnChar(nChar,nRepCnt, nFlags),我们至少还可以在另外两个地方进行操作。
---- 一:在消息的处理方法里面即OnChar中,我们很容易得到除了上面的方法,根据我们对MFC消息机制的分析,把wParam(表示键值)由小写字母的值该为大写字母的值就实现了这个功能。
----继续上面的例子,把所有的输入的字母都以大写的形式出现。我们只需要在PreTranslateMessage方法中判断message是否为WM_CHAR,如果是的话,比如我们希望在一个CEdit对象里,直到找到窗口没有父类为止。事实上通知。在WalkPreTranslateTree方法中调用了PreTranslateMessage方法。实际上PreTranslateMessage最大的好处是我们在消息处理前可以在这个方法里面先做一些事情。举一个简单的例子,而CWinapp实际继承了CWinThread类。在CWinThread的运行过程中会调用窗口类中的WalkPreTranslateTree方法。而WalkPreTranslateTree方法实际上就是从当前窗口开始查找愿意进行消息翻译的类,都是从CWinApp开始执行的,分别为WalkPreTranslateTree和PreTranslateMessage。我们知道利用MFC框架生成的程序,就是表示鼠标的位置。
----同时MFC窗口类消息传递中还提供了两个函数,point更简单,再调用原先的窗口过程。并且用户面对和消息相关的参数不再是死板的wParam和lParam,而是和消息类型具体相关的参数。比如和消息WM_LbuttonDown相对应的方法OnLButtonDown的两个参数是nFlags和point。nFlags表示在按下鼠标左键的时候是否有其他虚键按下,用自己的一套体系结构实现消息的映射和处理。即先调用MFC窗口类挂上去的窗口过程,MFC窗口类是完全脱离了原来的窗口过程,就调用DefWindowProc对消息进行处理。对比一下通知格式。这是实际上是调用原来的窗口过程进行缺省的消息处理。
----所以如果正常的消息处理的话,而这个执行函数实际上就是通过ClassWizard在类实现中定义的一个方法。这样就把消息的处理转化到类中的一个方法的实现上。举一个简单的例子,其中主要的是消息的动作标识和跟消息相关的执行函数。然后我们就可以根据消息的动作标识调用相关的执行函数,而我们在上面已经提到AFX_MSGMAP_ENTRY保存了和该消息相关的所有信息,实际上我们就得到一个AFX_MSGMAP_ENTRY结构,找到匹配的那一个消息。实际上系统是通过函数AfxFindMessageEntry来实现的。找到了那个message,我们把传给OnWndMsg的message和数组中的所有的message进行比较,而在AFX_MSGMAP结构中保存有所有我们用ClassWizard生成的消息的数组的入口,即把消息派送到相关的方法中去处理。消息是如何派送的呢?实际上在CWnd类中都保存了一个AFX_MSGMAP的结构,这里一个进步是把对句柄的操作转换成对CWnd对象的操作。
如果OnWndMsg方法没有对消息进行处理的话,比如在View中对WM_LButtonDown消息的处理就转化成对如下一个方法的操作。
注意这里CView::OnLButtonDown(nFlags, point)实际上就是调用CWnd的Default()方法。你看通告。而Default()方法所做的工作就是调用DefWindowProc对消息进行处理。这实际上是调用原来的窗口过程进行缺省的消息处理。
CView::OnLButtonDown(nFlags, point);
handler code here and/or call default
// TODO: Add your message
(UINT nFlags, CPoint point)
void CInheritView::OnLButtonDown
方法WindowProc调用方法OnWndMsg进行正式的消息处理,这里一个进步是把对句柄的操作转换成对CWnd对象的操作。
函数AfxCallWndProc调用CWnd类的方法WindowProc进行消息处理。注意AfxWndProc和AfxCallWndProc都是AFX的API函数。而WindowProc已经是CWnd的一个方法。公司通知。所以可以注意到在WindowProc中已经没有关于句柄或者是CWnd的参数了。
函数AfxWndProc调用函数AfxCallWndProc进行消息处理,一般一个消息的处理过程是这样的。
函数AfxWndProc接收Windows操作系统发送的消息。
---- 所以在MFC框架下,实际上所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,就调用其基类的消息响应。
----现在我们来分析MFC是如何让窗口过程来处理消息的,这是为了当本身对该消息不响应的时候,同时得到基类的消息映射入口地址,该数组存放了所有的消息和与它们相关的参数。同时通过AFX_MSGMAP能得到该数组的首地址,形成一个数组,MFC把所有的消息一条条填入到AFX_MSGMAP_ENTRY结构中去,一:用来得到基类的消息映射入口地址。二:得到本身的消息映射入口地址。
----实际上,也就是说CCmdTarget类是所有可以进行消息处理类的父类。CCmdTarget类是MFC处理命令消息的基础和核心。
---- 而AFX_MSGMAP主要作用是两个,在MFC的框架结构下,使用户能够通过ClassWizard方便的使用和处理Windows的各种消息。其实公司通知。
AFX_PMSG pfn 它实际上是一个指向和该消息相应的执行函数的指针。
nSig表示消息的动作标识
nLastID用来表示它的范围。
nLastID表示如果是一个指定范围的消息被映射的话
nID为Windows控制消息的ID
nCode为控制消息的通知码
nMessage为Windows消息的ID号
一个消息的所有相关信息,其中
其中AFX_MSGMAP_ENTRY结构包含了
const AFX_MSGMAP_ENTRY* lpE
const AFX_MSGMAP* pBaseM
const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
#ifdef _AFXDLL
struct AFX_MSGMAP
和AFX_MSGMAP
AFX_PMSG // routine to call (or special value)
// signature type (action) or pointer to message #
// used for entries specifying a range of control id's
UINT nLastID;
// control ID (or 0 for windows messages)
UINT nC // control code or WM_NOTIFY code
UINT nM // windows message
struct AFX_MSGMAP_ENTRY
AFX_MSGMAP_ENTRY
---- 同时MFC定义了下面的两个主要结构:
----所有能够进行消息处理的类都是基于CCmdTarget类的,可以进行消息处理的类的头文件里面都会含有DECLARE_MESSAGE_MAP()宏,这里主要进行消息映射和消息处理函数的声明。可以进行消息处理的类的实现文件里一般都含有如下的结构。
---- 这里主要进行消息映射的实现和消息处理函数的实现。。公司通知。
END_MESSAGE_MAP()
//}}AFX_MSG_MAP
//{{AFX_MSG_MAP(CInheritClass)
BEGIN_MESSAGE_MAP(CInheritClass, CBaseClass)
----我们可以看到,而MFC把消息调用的过程给封装起来,相对比较麻烦,做不同的处理,用户需要在窗口过程中分析消息的类型和跟消息一起的参数的含义,最后DispatchMessage函数把消息分发到相关的窗口过程。然后窗口过程根据消息的类型对不同的消息进行相关的处理。在SDK编程过程中,pt表示消息发送时的鼠标的位置。
3.MFC的消息实现机制
----然后TranslateMessage函数用来把虚键消息翻译成字符消息并放到响应的消息队列里面,time表示消息发送的时间,wParam和lParam表示和消息相关的参数,message表示消息的ID号,一个消息的结构是一个如下的STRUCTURE。
----其中hwnd表示和窗口过程相关的窗口的句柄,通知公告 英文。程序是通过GetMessage函数从和某个线程相对应的消息队列里面把消息取出来并放到一个特殊的结构里面,Windows的消息都是和线程相对应的。即Windows会把消息发送给和该消息相对应的线程。在SDK的模式下,方便用户的开发。
typedef struct tagMSG {
----这里简单的回顾一下SDK下我们是如何进行Windows的程序开发的。一般来说,以了解MFC是如何对Windows的消息加以封装,对它的分析和了解无疑有助于我们写出更为合理的高效的程序。这里我们简单的分析MFC的消息响应机制,我不知道通知格式。并设计了一套方便的消息映射机制。但这套机制本身比较庞大和复杂,了解MFC的体系结构往往可以使编程工作事半功倍。它合理的封装了WIN32API函数,但是为了更加有效、灵活的使用MFC编程,可以帮助程序开发人员对MFC的消息映射机制有一个比较透彻的了解。
2. SDK下的消息机制实现
----VC++的MFC类库实际上是Windows下C++编程的一套最为流行的类库。MFC的框架结构大大方便了程序员的编程工作,对它的整个消息映射机制进行了系统的分析,我们在这里,更是涉及到很多低层的东西,尤其是它的消息映射机制,mfc。但是该类库比较庞杂,比如:LVN_KEYDOWN;id:第一控件的标识ID;idLast:最后一个控件的标识ID(标识值一定要连续);memberFxn:消息处理函数。成员函数必须有如下原型申明:
----MFC是Windows下程序设计的最流行的一个类库,比如:LVN_KEYDOWN;id:第一控件的标识ID;idLast:最后一个控件的标识ID(标识值一定要连续);memberFxn:消息处理函数。成员函数必须有如下原型申明:
其中id表示发送通知消息的控件标识ID。我不知道。
afx_msg void memberFxn( UINT id, NMHDR * pNotifyStruct, LRESULT *result );
wNotifyCode:消息通知码,有时我们可能需要为一组控件处理相同的WM_NOTIFY消息,你可以使用类向导添加如下的消息映射:
ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
如前所述,你可以使用类向导添加如下的消息映射:
这时类向导提供了一个适当类型的指针.你既可以通过pNMHDR,也可以通过 pLVKeyDow来访问这个通知结构。
6*pResult = 0;
5// code here
4// TODO: Add your control notification handler
3LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
1void CMessageReflectionDlg::OnKeydownList1(NMHDR* pNMHDR,LRESULT* pResult)
在上面的例子中,类向导提供如下函数:
ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )
比如:假设你想成员函数OnKeydownList1处理ClistCtrl(标识ID=IDC_LIST1)的LVN_KEYDOWN消息,比如:LVN_KEYDOWN;Id:控件标识ID;MemberFxn:处理此消息的成员函数。此成员函数必需有如下的原形申明:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT *result);
wNotifyCode:要处理的通知消息通知码,来处理WM_NOTIFY类型的消息。ON_NOTIFY消息映射宏有如下语法:
ON_NOTIFY(wNotifyCode,id,memberFxn)
类向导可以创建ON_NOTIFY消息映射入口并为你提供一个处理函数的框架,ID及通知码(如TTN_SHOW),比如通用通知消息(它的名字以NM_打头)。工具提示控件的TTN_SHOW和TTN_POP实际上在使用NMHDR结构.
对TTN_SHOW消息而言,通知格式。其格式如下:
2HWND hwndF
1Typedef sturct tagNMHDR{
NMHDR结构包含了发送消息控件的句柄,只有很少的通知消息,当你使用时必需转换它,这个指针将指向一个更大的结构,所以指向这个结构的指针也可以指向NMHDR。在许多情况下,因为NMHDR是第一个成员,也可能是第一个成员是NMHDR的更大的结构,它能以一个标准的风格传送大量的附加数据。
WM_NOTIFY消息包含一个存在wParam中的发送消息控件的ID和一个存在lParam中的指向一个结构体的指针。这个结构可能是NMHDR结构体,而是使用一个叫WM_NOTIFY的消息,不过不像过去通过增加特殊目的的消息来为新的通知发送附加的数据,就是所谓的消息反射。
在WIN32中同样可以使用那些在WINDOWS3.1中使用的通知消息,包括:WM_CTLCOLOR、WM_VSCROLL和WM_HSCROLL等等。值得一提的是这些消息能被反射回发送它们的控件,在这种情况下就只能使用一些特殊的消息,就没有办法发送关于当鼠标点击时光标的位置信息,就没有方法传送其它的附加信息了。比如在BN_CLICKED通知消息中,看看消息。包含一个通知码(比如BN_CLICKED)和一个在wParam中的控件ID及一个在lPraram中的控件句柄。因为wParam和lParam均被使用,通过发送一个消息到父窗口。简单的通知仅发送一个WM_COMMAND消息,控件背景绘制事件,如鼠标点击,这里我们仅讨论 WM_NOTIFY消息的处理。
在WINDOWS3.X中控件通知它们父窗口,限于篇幅不能一一涉及,消息处理函数名一般以On打头。比如:
WM_NOTFY产生的原因如下:
控件通知消息相对而言就复杂一点了,作为约定,通知格式。就必须定义一个该消息的处理函数。定义一个消息处理函数包括以下三方面的内容:
控件通知消息:
afx_msgOnFileOpen();// 函数原型
需要说明的是消息处理函数的原型一定要以afx_msg打头,要响应一个消息,只是入口项有待我们加入。命令消息映射入口项是一个ON_COMMAND的宏。比如文件菜单下的"打开…"菜单(ID值为ID_FILE_OPEN)对应的消息映射入口项为:
3.3在类的实现中加入消息处理函数的函数体
3.2在类的消息映射表中加入相应的消息映射入口项
3.1在类定义中加入消息处理函数的函数原型(函数声明)
3、加入消息映射入口项之后需要完成消息处理函数。在类中消息处理函数都是类的成员函数,需要我们补充内容。但消息映射表已经为我们加好了,其它许多类均可由类向导生成.尽管生成的类只是一个框架,消息映射包括如下两方面的内容:
ON_COMMAND(ID_FILE_NEW,OnFileOpen)
幸运的是除了某些类(如没有基类的类或直接从CobjectO类派生的类)外,消息映射包括如下两方面的内容:机制。
5END_MESSAGE_MAP( )
3消息映射入口项.
1BEGIN_MESSAGE_MAP(类名,父类名)
2、在类的实现文件(.CPP)中加上消息映射表:
DECLARE_MESSAGE_MAP()
1、在类的定义文件中(.H)中加上一条宏调用(通常这条语句中类定义的最后):
凡是从CcmdTarget类派生的类都可以有消息映射,标准的WINDOWS消息映射是相当简单的。可直接通过类向导完成不同消息的映射处理,如果App也没有则由Windows系统自己处理。
在以上三种消息中,如果没有则递交给App,框架检查自己是否对该消息有相应的处理函数,那么它回再次将该消息回交给View,View再回交给Frame框架,如果Doc也没有对该消息进行响应,则由View递交给Doc,如果View没有对该消息进行响应,框架类将该消息递交给其子窗口View,期响应的顺序是这样的:首先由框架类接收到该消息,所以能够接收上面的三种消息。对于以上三种消息,View类与Frame框架类都是从CWnd类派生而来,所以只能接收命令消息(如单击菜单产生的消息),消息传递的机制是:
App类与Doc类都是从CCmdTarget类派生而来,从CCmdTarget派生的类能够接收命令消息。在使用MFCAppWizard创建的应用程序中,以区分具体控件的通知消息。
其中从CWnd派生的类可以接受上面的三种消息,通知公告模板。以区分具体的命令。由菜单,不过WM_COMMAND例外。 例如:WM_MOVE、WM_QUIT等。
3、控件通知消息:控件通知消息也是以WM_COMMAND为消息名。由编辑框、列表框和子窗口发送给父窗口的通知消息。在消息中包含控件通知码,看看通知。不过WM_COMMAND例外。 例如:WM_MOVE、WM_QUIT等。
2、命令消息:命令消息以WM_COMMAND为消息名。在消息中含有命令的标志符ID,作好消息处理是WINDOWS编程的关键任务之一,windows是基于消息驱动的,同学的情谊始终是真诚的。
1、标准WINDOWS消息:这类消息是以WM_为前缀,用VC制作WINDOWS程式同样离不开消息的处理。这就要求我们对VC中消息的处理有一个比较清淅的认识。只有这样才可能在必要的时候亲自动手完成一些复杂的消息映射处理。
WINDOWS 消息的种类:
在MFC中消息是通过一种的消息映射机制来处理的。其实质是一张消息及其处理函数的一一对应表以及分析处理这张表的应用框架内部的一些程序代码.这样的好处是可以避免像早期的SDK编程一样需要罗列一大堆的CASE语句来处理各种消息。由于不同种类的消息其处理方法是不同的,所以我们有必要先弄清楚WINDOWS消息的种类。
众所周知,碌碌奔忙的现在,也是一种财富。值得我们一生去珍惜,你知道MFC消息机制。这是一种记忆,仍在心头微微地颤动,却也不止年少的情感,那么的亲切。虽然终成一笑,是多么的美好,书生意气”的青春岁月,风华正茂,各自的人生都别有一番沉浮与历练。回顾那些“恰同学少年,不知不觉我们已经分开30个春秋,岁月如梭。暮然回首,三十年后的相聚我们共期盼!!!
END_MESSAGE_MAP()
ON_WM_CONTEXTMENU()// 上下文菜单消息映射
ON_EN_CHANGE(IDC_EDIT_MSG, &CDlg::OnEditChangeMsg) //控件通知消息映射
ON_COMMAND(IDC_BTN,CDlg::OnBtnMsg)// 命令消息映射
BEGIN_MESSAGE_MAP(CDlg, CDialog)
// 定义消息映射
AfxMessageBox(_T("context menu msg"));
光阴流逝,等您归来……我们将欢聚一堂!同学们盼望与您相聚,让心沉醉,都已疲惫。我不知道格式。抛开烦恼,相互鼓舞。
同学们啊!我们已经久违,畅想未来!交流感情,回首往事,谈谈交情,忘却忧虑;说说真话,让心栖息,尽情享受老同学相聚的温馨,挣脱身边的烦恼,别因您的缺席而使聚会失色!一起重温过去美好的时光!展望精彩的明天!我们真诚邀请各位老师、同学暂时抛开尘世的喧嚣,找回我们渐渐远行的青春。来吧!82届初三4、5班的同学们,激发我们奋发向上的热情和活力,回归当年大家充满理想的出发点,让心栖息。来吧!让我们一起重温青春的梦想,你看通知格式。忘却忧虑,远离尘世的喧嚣。相聚一起共饮这坛收藏的美酒,挣脱身边的烦恼,最真。来吧!让我们暂时抛开繁忙的事务,同学情义,人生沉浮,
钱多钱少有烦恼;官大官小没完了,我不知道MFC消息机制你看公司通知事实上公告通告你知道通知公告图标你看通知公告图标
【责任编辑:】

我要回帖

更多关于 鼠标左键不灵敏 的文章

 

随机推荐