窗口怎么接收不到鼠标的消息

dianhui 2008-04-29 01:26:54
问题大概是这样的:
我新建了一个单文档应用程序;
然后在资源视图中添加了一个对话框资源。对话框的名字为:IDD_DIALOG1,对话框类型:Child,None;对该对话框新建一个类,类名为:class CMyDlg1 : public CDialog{……}。
然后再在对话框上添加一个Button,并为该Button1添加了事件如下:
void CMyDlg1::OnButton1()
{
// TODO: Add your control notification handler code here
MessageBox("这是对话框窗口一");
}
我的目的是想将对话框浮动在主框架上。于是我做了这样的处理:
在框架类添加变量CMyDlg1 m_mydlg1;
然后再CMainFrame::OnCreate函数内增加如下代码:
m_mydlg1.Create(IDD_DIALOG1,this);
m_mydlg1.ShowWindow(SW_SHOW);
程序运行后,可以看到对话框IDD_DIALOG1浮动在框架上,但是,该浮动的对话框无法响应鼠标的任何事件,比如我点击对话框上的
Button1,可是CMyDlg1::OnButton1()事件根本就无法响应。不知道为什么。又如何解决。
希望高手们指点。
...全文
382 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hehenihao158 2008-05-01
  • 打赏
  • 举报
回复
mark
海忠 2008-04-30
  • 打赏
  • 举报
回复
楼主这样写当然会使子窗口接收不到消息,因为您的CMainFrame::OnCreate中创建的子窗口实际上与CView,ControlBar等属于兄弟关系,而消息全部被在最前面的CView接收去了,所以子窗口就收不到鼠标消息了。
不过你可以通过调整子窗口的Z轴顺序,可以让他接收到鼠标消息。但要注意的是,子窗口同时也被CView覆盖了。
调整代码如下:

m_mydlg1.Create(IDD_DIALOG1,this);
m_mydlg1.ShowWindow(SW_SHOW);
m_mydlg1.SetWindowPos(&CWnd::wndTop,0,0,0,0,SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);



=====================================================
阙海忠 (CTO Skin++ 开发成员 http://www.uipower.com 上海勇进软件有限公司)
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
都是很好的建议! 值得学习
  • 打赏
  • 举报
回复
如果要向这样的窗口发送键盘消息怎么发送呢?
wltg2001 2008-04-29
  • 打赏
  • 举报
回复
上面所说的覆盖不是指视觉上的,而是指消息上的.如果是子窗口的话,消息是发给父窗口的,然后父窗口向子窗口发WM_COMMAND的.
dianhui 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zoulie 的回复:]
你做成子窗口,视图客户区把它给覆盖了 ,屏蔽了消息
[/Quote]
如果是视图窗口把子窗口覆盖,那我怎么还可以看到子窗口浮动在父窗口上啊?
视图窗口覆盖子窗口,MFC这样定义是不是有什么特别意义啊?一般情况下,都应该是子窗口覆盖父窗口的啊,比如我们在对话框上动态创建一个按钮,一般不都是按钮覆盖在对话框上吗?
Eleven 2008-04-29
  • 打赏
  • 举报
回复
up
zoulie 2008-04-29
  • 打赏
  • 举报
回复
你做成子窗口,视图客户区把它给覆盖了 ,屏蔽了消息
快乐鹦鹉 2008-04-29
  • 打赏
  • 举报
回复
别用Child,用Popup就行。做成非模式对话框就可以达到你的效果了

15,979

社区成员

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

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