社区
界面
帖子详情
MFC焦点问题
xuwei__5720
2010-12-14 04:31:47
我在用MFC编写的一个主对话框的左边添加了一个树控件,然后点击树的各个叶子能够在右边的静态框里边新建一个对应的子对话框,现在要求的是在点了树之后按tab键焦点能够转移到子对话框的控件上,或者说在店里树之后按定义在子对话框里边的热键能够起作用,现在的情况是只能在主对话框里边的各个控件之间来回切换,热键的话,必须要在子对话框的控件上点一下之后才能起作用,请问该怎么解决啊???在线等~~谢谢各位了~~
...全文
336
22
打赏
收藏
MFC焦点问题
我在用MFC编写的一个主对话框的左边添加了一个树控件,然后点击树的各个叶子能够在右边的静态框里边新建一个对应的子对话框,现在要求的是在点了树之后按tab键焦点能够转移到子对话框的控件上,或者说在店里树之后按定义在子对话框里边的热键能够起作用,现在的情况是只能在主对话框里边的各个控件之间来回切换,热键的话,必须要在子对话框的控件上点一下之后才能起作用,请问该怎么解决啊???在线等~~谢谢各位了~~
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xuwei__5720
2010-12-16
打赏
举报
回复
[Quote=引用 21 楼 xianglitian 的回复:]
引用 12 楼 jpduck 的回复:
引用 11 楼 xianglitian 的回复:
消息没有运行说明消息参数设置有误或者消息映射连接的不对
你好好检查一下
我在CTreeCtrl 鼠标点击事件处理函数中写了
::PostMessage(GetDlgItem(IDD_CHILD)->GetSafeHwnd(),WM_MY_MESSAGE,0,0);
在子对话框的消息处理函数中写……
[/Quote]
问题已经解决了,谢谢
向立天
2010-12-16
打赏
举报
回复
[Quote=引用 12 楼 jpduck 的回复:]
引用 11 楼 xianglitian 的回复:
消息没有运行说明消息参数设置有误或者消息映射连接的不对
你好好检查一下
我在CTreeCtrl 鼠标点击事件处理函数中写了
::PostMessage(GetDlgItem(IDD_CHILD)->GetSafeHwnd(),WM_MY_MESSAGE,0,0);
在子对话框的消息处理函数中写了
::SetFocus(IDC_RAD……
[/Quote]
::SetFocus(IDC_RADIO1);
-----------------------------------
你这句话明显有问题
IDC_RADIO1是ID并不是句柄啊
不好意思先前没仔细看这里
这个位置直接写SetFocus()
试试
向立天
2010-12-15
打赏
举报
回复
问题1:IDD_CHILD是控件?如果是子窗口的话你应该直接有指针不用GetDlgItem获取吧
问题2:你的消息映射连接了么
xuwei__5720
2010-12-15
打赏
举报
回复
还有一点,就是GetDlgItem(...)->GetSafeHwnd() 换成GetDlgItem(...)->m_hWnd,就会产生中断,有谁能解释一下这两个的区别和功能吗?
xuwei__5720
2010-12-15
打赏
举报
回复
[Quote=引用 11 楼 xianglitian 的回复:]
消息没有运行说明消息参数设置有误或者消息映射连接的不对
你好好检查一下
[/Quote]
我在CTreeCtrl 鼠标点击事件处理函数中写了
::PostMessage(GetDlgItem(IDD_CHILD)->GetSafeHwnd(),WM_MY_MESSAGE,0,0);
在子对话框的消息处理函数中写了
::SetFocus(IDC_RADIO1);
在子对话框里边有三个单选框按钮,并在按钮上加了&N,&P,&R用来实现热键
不知道那里出了问题了
向立天
2010-12-15
打赏
举报
回复
消息没有运行说明消息参数设置有误或者消息映射连接的不对
你好好检查一下
xuwei__5720
2010-12-15
打赏
举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
CTreeCtrl NM_RCLICK事件处理函数中PostMessage一个自定义消息到右边的窗口中,然后在消息的处理函数中SetFocus()来设置控件获取输入焦点
[/Quote]
我根据你说的那么做了,可是焦点还是没有落到右边的子对话框里啊。。。
我在主对话框里添加了一个鼠标单击消息,在消息里边自定义一个PostMessage到子对话框,在子对话框里边的消息处理函数SetFocus(),然后在SetFocus()这一行加了一个断点,运行,点击树,没有执行到这,我再在PostMessage那加了一个断点,运行,点击树,程序就能在这停下来,说明已经执行了PostMessage这个函数,为什么在消息接收里边的程序就没有运行呢???还有,我发现,在树里边第一次点击的时候并没有并没有产生鼠标点击的消息,也就是并没有跑到鼠标单击的那个消息里边去
花爺
2010-12-15
打赏
举报
回复
9楼正解
xuwei__5720
2010-12-15
打赏
举报
回复
[Quote=引用 17 楼 xianglitian 的回复:]
你说的那个指针是不是create这个dialog的时候的那个指针?其他的我好像不记得有什么指针了
-------------------
对就是它
[/Quote]
消息是能够发送成功了,就是焦点问题还是没有解决
xuwei__5720
2010-12-15
打赏
举报
回复
[Quote=引用 17 楼 xianglitian 的回复:]
你说的那个指针是不是create这个dialog的时候的那个指针?其他的我好像不记得有什么指针了
-------------------
对就是它
[/Quote]
在SendMessag的时候第一个参数是HWND类型的,并不是CChild*(子对话框的类)类型的啊,是不是进行强制类型转换啊??
向立天
2010-12-15
打赏
举报
回复
你说的那个指针是不是create这个dialog的时候的那个指针?其他的我好像不记得有什么指针了
-------------------
对就是它
xuwei__5720
2010-12-15
打赏
举报
回复
[Quote=引用 14 楼 xianglitian 的回复:]
问题1:IDD_CHILD是控件?如果是子窗口的话你应该直接有指针不用GetDlgItem获取吧
问题2:你的消息映射连接了么
[/Quote]
IDD_CHILD 是子对话框的ID
你说的那个指针是不是create这个dialog的时候的那个指针?其他的我好像不记得有什么指针了(新手,不要鄙视哈)
消息映射我已经连接了啊,同样的方法,我从子对话框发给父对话框的消息都能接收到的
bragi523
2010-12-14
打赏
举报
回复
直接SetFocus()最简单,只需把窗口句柄传过来
xuwei__5720
2010-12-14
打赏
举报
回复
[Quote=引用 6 楼 vc1000 的回复:]
PostMessage()是将消息放入消息队列后立即返回,不等待消息执行。
sendmessage()不将消息放入消息队列,而是直接发送到指定的窗口,执行完成后才返回。
个人认为 他们在一般情况下用起来没多大区别。
获取子对话框句柄GetDlgItem(这对话框ID)->GetSafeHwnd()
[/Quote]
嗯,谢谢~可是我的焦点还是没有跑过去啊
vc1000
2010-12-14
打赏
举报
回复
这对话框ID
-子对话框ID
vc1000
2010-12-14
打赏
举报
回复
PostMessage()是将消息放入消息队列后立即返回,不等待消息执行。
sendmessage()不将消息放入消息队列,而是直接发送到指定的窗口,执行完成后才返回。
个人认为 他们在一般情况下用起来没多大区别。
获取子对话框句柄GetDlgItem(这对话框ID)->GetSafeHwnd()
xuwei__5720
2010-12-14
打赏
举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
引用 2 楼 jpduck 的回复:
引用 1 楼 visualeleven 的回复:
CTreeCtrl NM_RCLICK事件处理函数中PostMessage一个自定义消息到右边的窗口中,然后在消息的处理函数中SetFocus()来设置控件获取输入焦点
请问一下为什么要用PostMessage,用sendmessage可以吗?
还有要获得子对话框的句柄该用什么函数啊?
我……
[/Quote]
我先去试试看吧~~先谢谢了,待会回来
zzw820626
2010-12-14
打赏
举报
回复
1.sendmessage也可以
2.子对话框对象的m_hWnd成员
Eleven
2010-12-14
打赏
举报
回复
[Quote=引用 2 楼 jpduck 的回复:]
引用 1 楼 visualeleven 的回复:
CTreeCtrl NM_RCLICK事件处理函数中PostMessage一个自定义消息到右边的窗口中,然后在消息的处理函数中SetFocus()来设置控件获取输入焦点
请问一下为什么要用PostMessage,用sendmessage可以吗?
还有要获得子对话框的句柄该用什么函数啊?
我是新人,麻烦讲解一下~谢谢~~
[/Quote]
你可以PostMessage自定义消息到右边的子对话框的父窗口就可以了,然后你的父窗口和你的子对话框窗口之间通信就应该很容易了吧
xuwei__5720
2010-12-14
打赏
举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
CTreeCtrl NM_RCLICK事件处理函数中PostMessage一个自定义消息到右边的窗口中,然后在消息的处理函数中SetFocus()来设置控件获取输入焦点
[/Quote]
请问一下为什么要用PostMessage,用sendmessage可以吗?
还有要获得子对话框的句柄该用什么函数啊?
我是新人,麻烦讲解一下~谢谢~~
加载更多回复(1)
MFC
写的windows网络热点共享源代码
利用
MFC
编写的建立windows网络热点共享的源码。
MFC
_工具栏_带热点效应
工具栏带热点效应 学习
MFC
的时候写的例子程序
MFC
桌面右下角弹窗不抢当前窗口
焦点
同时不抢父窗口
焦点
配套博客地址:http://blog.csdn.net/panshiqu/article/details/9626073 现在需要写的功能我简单说一下,类似腾讯QQ右下角弹出的新闻框那种,有两点细节我特别强调一下,仅有父窗口时不能抢父窗口
焦点
,父窗口不在而运行的其他程序的
焦点
也不能抢
MFC
界面控件美化
MFC
控件的美化 包括,Button、List、Radio、Combox...等
MFC
Edit控件之enter回车捕捉
MFC
Edit控件之enter回车捕捉:http://blog.csdn.net/cracent/article/details/50986365
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章