社区
界面
帖子详情
MFC焦点问题
xuwei__5720
2010-12-14 04:31:47
我在用MFC编写的一个主对话框的左边添加了一个树控件,然后点击树的各个叶子能够在右边的静态框里边新建一个对应的子对话框,现在要求的是在点了树之后按tab键焦点能够转移到子对话框的控件上,或者说在店里树之后按定义在子对话框里边的热键能够起作用,现在的情况是只能在主对话框里边的各个控件之间来回切换,热键的话,必须要在子对话框的控件上点一下之后才能起作用,请问该怎么解决啊???在线等~~谢谢各位了~~
...全文
362
22
打赏
收藏
MFC焦点问题
我在用MFC编写的一个主对话框的左边添加了一个树控件,然后点击树的各个叶子能够在右边的静态框里边新建一个对应的子对话框,现在要求的是在点了树之后按tab键焦点能够转移到子对话框的控件上,或者说在店里树之后按定义在子对话框里边的热键能够起作用,现在的情况是只能在主对话框里边的各个控件之间来回切换,热键的话,必须要在子对话框的控件上点一下之后才能起作用,请问该怎么解决啊???在线等~~谢谢各位了~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
窗口创建时 争夺
焦点
的
问题
解决
MFC
窗口创建时 争夺
焦点
的
问题
mfc
非模态对话框Child窗口CEdit控件获取不到
焦点
问题
遇到的
问题
就是创建一个非模态的子窗口。发现子窗口上的edit控件总是不能被激活,开始担心自己工程出
问题
了,于是新建了一个sdi,如图
问题
依然存在,既然如此那就在新工程中找
问题
,先设置对话框style,popup/overlap都能正常使用,再试试模式对话框(有点没必要,因为模式对话框不能是child)依然没
问题
,为了保守起见,还是多托几个控件靠谱,发现只有edit无效,尴尬。那就只能对edit下手
【
mfc
】解决鼠标钩子被占用
焦点
后不响应的
问题
如果需要响应全局的鼠标事件,可以通过添加SetWindowsHookEx(WH_MOUSE_LL, MouseProc, GetModuleHandle(NULL), 0)来实现鼠标钩子,但是这种实现有一个
问题
,如果程序的
焦点
被其他程序窗口占用,那么则不会接收到如WM_LBUTTONDOWN等鼠标消息。
Qt界面包含
MFC
的ActiveX控件,界面
焦点
获取
问题
遇到的
问题
在一个Qt界面上,调用了一个使用
MFC
制作的ActiveX控件,Qt界面上使用QtreeWidget
MFC
是个单文档的控件,都有滚动条。当鼠标单击过ActiveX控件后,滚动鼠标中键滚轮,滚动条响应的是ActiveX控件的滚动条(正确),单击QtreeWidget 的item,滚动鼠标中键滚轮,滚动条响应的依然是ActiveX控件的滚动条(错误)。 简单的解释,这
DuiLib使用
MFC
的时间控件CDateTimeCtrl出现第二个控件无法获取
焦点
的
问题
我在Duilib里用了两个
MFC
的CDateTimeCtrl控件,第一个控件可以随便编辑,第二个鼠标点击根本就获取不到
焦点
,所以无法编辑,这是什么原因啊,搞了好长时间,百思不得其解。。。 控件现实效果和XML表达已经代码实现如下: --------------------------解决
问题
: 需要定义CStatic作为
MFC
控件的父类,所以增加两个CSt...
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章