免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2078 | 回复: 1
打印 上一主题 下一主题

[C++] MFC对话框重绘 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-12-26 15:49 |只看该作者 |倒序浏览
背景:hook客户端程序clientApp,hook程序为一个对话框程序
目的:在clientApp的唯一eidt控件输入交易码的时候,hook程序弹出该交易的help信息(对话框隐藏并嵌入浏览器控件,Navigate来显示帮助信息)
         还有:对话框启动的时候隐藏在托盘,在defWindowProc实现

现:hook写的是一个键盘钩子dll,对话框程序是调起程序,clientApp是个全屏的
     hook捕获到clientApp输入交易码后,调用Navigate后,通过SendMessage发WM_PAINT消息,在OnPaint调用ShowWindow()和UpdateWindow();

问题:
     程序执行的时候,如果第一次输入交易码,能弹出对话框,显示帮助信息,
但是再次输入交易码后,没弹出对话框,点任务栏显示对话框确实也根据交易码获取了帮助信息,但没弹到前面来

已做:
    一开始是捕获交易码后发WM_NCPAINT,然后在defWindowProc中ShowWindow(),试了SetActiveWindow(),SetForegroundWindow(),只在任务栏变亮,但
是未在clientApp界面上显示(第一次都是成功的,就是第二次不成功显示),点击任务栏显示正确。然后查了资料,说WM_NCPAINT是重绘非客户区,然后我换WM_PAINT,并在OnPaint()
中显示,还是一样的,第一次能弹,第二次不行!!!!
请高手解惑(PS: 第一次用MFC做这个,对话框底层调用流程不是很理解)

(SetWindowPos Top不行,用户操作的时候,当输交易码的时候,帮助信息对话框应该被覆盖了,输完交易码回车的时候弹出)

论坛徽章:
0
2 [报告]
发表于 2016-12-26 15:54 |只看该作者
第二次客户输入交易码时,对话框应该是被clientApp覆盖了,为什么用SetForegroundWindow()无法放到最前面来?
客户输完回车后,应该没重绘对话框,所以我以为发个WM_PAINT消息,是否可以重绘下,然后自然就放到最前面来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP