MFC消息循环(基本不用写代码)

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:55:57
MFC听消息是不是只分:线程消息和窗口消息?它们是怎么区分的?举个例子吧。点击button按钮,按最大化按钮,WM_CLOSE,和快捷键ALT+F2这些分别是什么消息呢?它们是按什么分类的呢?
另:我想自定义一个消息:在一个文本框里输入文字,当输入到$字符的时候就产生事件,相应函数为关闭整个程序。思路是怎么样的呢?(不要编写代码)。$是属于控件的,也即当前窗口的,即(单文档的话):就是VIEW类里面的;如果是基于对话框就是DLG类里面的。那么消息是怎样被系统分发下去并执行的呢?希望关于这一点讲详细点。重点放在消息循环上。
补充一下,关于第二个的方法是不是:先定义一个消息::#define WM_MSG WM_USER +1
然后类的头文件中:afx_msg LRESULT OnDoMsg(WPARAM wParam, LPARAM lParam);申明处理的函数再在类的实现文件中的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间加入ON_MESSAGE(WM_MSG,OnDoMsg)映射函数,并添加相应的函数实现部分呀还有就是当检测有$输入时用:SendMessage(hWnd,WM_MSG,wParam,lParam);
消息在类中是怎么被传递的呢?像sendmessage中的hwnd具体应该怎么写?
RegisterWindowMessage这个函数是做什么的?请高人指点一二。
坦白说:一楼的答案让我莫名其妙, 有点答非所问,不否认他水平是强,可是针对问题要强。

系统会有一个队列,里面存放的是一些系统内核对象或是gdi对象之类的标识,应用程序会按需要往这个队列中添加一个表示自己接受该消息的对象的标识,然后系统遇到消息的时候,会将这些告诉队列的所有对象。这样,你刚才所说的消息会被系统收到,然后发送给队列成员。当然,消息有的发给特定对象,有的发给所有对象。例如系统按一个键,所有的在队列里的对象都可以接收到;如果你按了一个组合键,并且正对特殊对象有特殊功能,那只需要发送给这个特定对象,并且只有它可以接收到。比如你对着word按ctrl+s时只有word起到了作用。
其实很好理解,通过sendmessage和getmessage可以实现你说的功能。当你认为你需要发送某个消息的时候,在那个地方发送给线程id或hwnd消息即可,消息是一个结构体message{……,uint, int*, int*},它包含消息的内容和消息本身带有的参数。(比如按鼠标后会发送鼠标消息标识和其位置)

hwnd是窗口句柄,凡是vc++从cwin派生的类都有 m_hWnd这样一个私有变量,他就是窗口句柄

"那么消息是怎样被系统分发下去并执行的呢?"你这句分明在问,windows消息机制,那当然得回答的深一点了,那想到问出这么高深问题的你,连我那些很简单的话都看不懂。
按你所说,你只要记得, sendmessage 和 getmessage就可以了。具体参数,hwnd说过了,uint msg 类似WM_MSG, 其他为NULL

坦白的说,楼上这位大哥真的说的很清楚了,楼主如果莫名其妙就应该多看看SDK方面的东西了,呵呵,那个HWND就使用m_hWnd了啊