分层窗口控件事件不响应

u010231493 2014-08-13 07:53:34
我创建了一个分层窗口,
	DWORD dwExStyle = WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_LAYERED;
DWORD dwStyle = WS_POPUP | WS_VISIBLE | WS_CLIPCHILDREN;

if (!CWnd::CreateEx(dwExStyle, ALL_CLASSNAME, ALL_EXENAME,
dwStyle, x, y, m_nWndWidth, m_nWndHeight, hWndParent, NULL)) {
return FALSE;
}


然后自己又动态创建了一个控件,重绘不响应我可以理解,可是我鼠标一上去、点击等这些消息都不响应。 只会响应主窗口的消息。对我的控件都不理会。我不明白了,也不知道如何解决。
因为在主窗口上去处理控件的 点击、覆盖消息太耦合了,所以不知道大家有没有其它的方法。。。。。。。。
...全文
133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010231493 2014-08-15
  • 打赏
  • 举报
回复
引用 6 楼 Idle_ 的回复:
原来是UpdateLayeredWindow的窗口啊。 用过这个函数的窗口只有主窗口能够接受消息,Windows把它直接映射到composit缓存中了,对系统来说只有这个窗口是事实存在的,而且它的显示是由底层bmp32支持的,所有子窗口都不存在。
呵呵,原来是这样,又学习了。非常感谢!
阿呆_ 2014-08-15
  • 打赏
  • 举报
回复
另外直到Windows 8 才支持子窗口的WS_EX_LAYERED属性
阿呆_ 2014-08-15
  • 打赏
  • 举报
回复
原来是UpdateLayeredWindow的窗口啊。 用过这个函数的窗口只有主窗口能够接受消息,Windows把它直接映射到composit缓存中了,对系统来说只有这个窗口是事实存在的,而且它的显示是由底层bmp32支持的,所有子窗口都不存在。
Eleven 2014-08-14
  • 打赏
  • 举报
回复

DWORD dwExStyle=GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE | WS_EX_LAYERED);
改为
DWORD dwExStyle=GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE ^ WS_EX_LAYERED);

SetWindowLong(...);
试试~
wangyubuct1 2014-08-14
  • 打赏
  • 举报
回复
终于有一个同胞遇到和我同样的问题了。 你可以新建一个项目做实验,在子窗口和视窗口分别设计好一样的响应函数,比如在子窗口的左键单击响应弹出提示窗口“child”,在视窗口的左键单击响应弹出“view”,可以发现弹出的是view。 这是为什么呢?将子窗口的风格逐个实验,发现是WS_EX_LAYERED风格的问题,去掉这个风格就没有问题了。可能是因为这个透明属性将按键也给透过去了吧。但是这个属性有时候是我们需要的功能,没办法,只能在view中响应了。期待解决办法...
u010231493 2014-08-14
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
将 DWORD dwExStyle=GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE | WS_EX_LAYERED); 改为 DWORD dwExStyle=GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE ^ WS_EX_LAYERED); SetWindowLong(...); 试试~
多谢大老哥回答,但是,事件是响应了,可是我用updatelayertwindow贴的图却全部变黑了。有没有两全其美的方法? 非常感谢!
wangyubuct1 2014-08-14
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
将 DWORD dwExStyle=GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE | WS_EX_LAYERED); 改为 DWORD dwExStyle=GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE ^ WS_EX_LAYERED); SetWindowLong(...); 试试~
太好了,终于有大神来解决这个问题了。 我不太明白,用这个“^”是按位异或的意思吗?这样和“|”运算出来的结果应该一样的吧?我听说窗口风格这些都只有一位不同的。
阿呆_ 2014-08-13
  • 打赏
  • 举报
回复
引用 楼主 u010231493 的回复:
然后自己又动态创建了一个控件,重绘不响应我可以理解,可是我鼠标一上去、点击等这些消息都不响应。 只会响应主窗口的消息。对我的控件都不理会。我不明白了,也不知道如何解决。 因为在主窗口上去处理控件的 点击、覆盖消息太耦合了,所以不知道大家有没有其它的方法。。。。。。。。
你怎么知道控件没有响应? 没有屏幕更新也许响应了你也不知道

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧