hur.cn - 华软网

 热门搜索

Win32中,怎么在父窗口处理子窗口的消息响应

  作者:未知    来源:网络    更新时间:2011/5/18
例如,现在有一个父窗口,上面有一个按钮,我该怎样获取子窗口的消息,如单击等事件;怎样将子窗口的消息处理函数与整个应用程序的消息循环联系起来(现在我遇到的问题是:一个父窗口有消息循环和它自己的消息处理函数,还有一个子窗口,也有它自己的消息处理函数;主要的问题是不知道该怎样处理按钮的各种消息)?
---华软 网友回答---
你最好从头学习一下Windows消息机制,在这里只能简单的给你说一下。
消息都是由线程处理的,窗口线程在处理鼠标等界面消息的时候,会根据窗口查找对应的处理函数进行调用,因此即使你的主窗口和子窗口都是同一个线程处理的,发给一个窗口的消息另外一个窗口都收不到的。

解决方法:
1、子窗口的消息就在子窗口的消息处理函数中处理,这样也符合低耦合的原则。例如按钮控件,就是作为子窗口的按钮,处理WM_LBUTTONDOWN、WM_LBUTTONUP,判断是单击,再发给父窗口一个BN_CLICKED的通知消息的。
2、在线程的消息循环函数中,复制一份消息,将目标窗口改为主窗口分发一次,这样主窗口就能收到子窗口区域发生的消息(不推荐)
---华软网友回复---
你不如把问题问题细一点
不同情况的方式是不一样的
可以转发、可以拦截
不知道你想实现什么需求
---华软网友回复---
我描述一下我现在遇到的问题吧:我现在正在做一个音乐播放器的界面,上面有很多按钮的消息需要处理,我将这些按钮写成了一个类,按钮们有自己的独立的消息过程,写在按钮类里面;承载这些按钮的主窗口也有自己独立的消息过程;但是不知道该如何处理这些按钮的消息,例如将鼠标移到其中一个按钮上的时候就改变按钮的颜色或者形状……
---华软网友回复---
谢谢大家了……
---华软网友回复---
针对Windows消息机制,大家有没有什么比较好的书籍,推荐一下……
---华软网友回复---
按钮的话,用MFC的都是继承CButton类进行扩展的。不好细说,但封装出来,对父窗口来说,使用起来消息处理和CButton是一样的
---华软网友回复---
《深入浅出MFC》有讲,不过我没怎么看过就是了。。。
---华软网友回复---
我想用Win32自己写该怎么写呢???
---华软网友回复---
给你一个关于thunk的
http://www.cppblog.com/tx7do/archive/2010/06/27/118810.html
---华软网友回复---
Win32的话,可以看VS带的MSDN Library,Windows User Interface。
---华软网友回复---
引用 3 楼 mawanglin2008 的回复:
我描述一下我现在遇到的问题吧:我现在正在做一个音乐播放器的界面,上面有很多按钮的消息需要处理,我将这些按钮写成了一个类,按钮们有自己的独立的消息过程,写在按钮类里面;承载这些按钮的主窗口也有自己独立的消息过程;但是不知道该如何处理这些按钮的消息,例如将鼠标移到其中一个按钮上的时候就改变按钮的颜色或者形状……

你这不就是自绘控件
看看这个会不会对你有帮助
http://blog.csdn.net/xianglitian/archive/2007/08/06/1728242.aspx
---华软网友回复---
对于你所述,应该是何处理按钮BCN_HOTITEMCHANGE,
void CMy111Dlg::OnBnHotItemChangeCancel(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMBCHOTITEM pHotItem = reinterpret_cast<LPNMBCHOTITEM>(pNMHDR);
if(pHotItem->dwFlags==(HICF_ENTERING|HICF_MOUSE) )
{
OutputDebugString(TEXT("mouse enter\r\n"));
}
if(pHotItem->dwFlags==(HICF_LEAVING|HICF_MOUSE) )
{
OutputDebugString(TEXT("mouse leave\r\n"));
}
}
对于SDK,你可以响应WM_NOTIFY      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。