如何设置一个窗口为最顶层窗口!!

shuiher 2005-05-10 07:11:50
背景:
因工作需要我经常需要抓屏,而且只是部分屏幕,具体位置随机。
为了方便,我自己做了一个程序,思路是在一个全局钩子中获取鼠标的两次点击的点
然后在调用程序中抓取这两个点构成的矩形区域,然后按热键保存抓取的图!!
我想在按下热键后弹出一个对话框,
对话框中只有一个edit控件(用于接收用户输入要保存的图片名)
和两个按钮(用于确定是否保存)
其中抓图,保存部分已经实现
问题:
当我按热键的时候我希望那个用于接收用户输入文件名的对话框为最顶层窗口,且是活动的!
在响应热键的函数中我的部分代码是:
FileSaveDlg dlg;
dlg.DoModal();
::BringWindowToTop(dlg.m_hWnd);
为什么不能实现呀

请问各位高手怎么实现!
本人菜鸟,不够专业的地方大家多指点啊!
...全文
2465 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuiher 2005-05-11
  • 打赏
  • 举报
回复
FileSaveDlg dlg;
dlg.DoModal();

::BringWindowToTop(dlg.m_hWnd); // 这时对话框已经不存在了:( 当然没效果了~~
///////////////////////////////////////////////////////////////////////////
zx_sanjin(1.5kg)大哥说的“对话框那个时候已经不存在了”应该是问题的根本原因
shuiher 2005-05-11
  • 打赏
  • 举报
回复
添加在OnInitDialog 上可以实现
谢谢各位老大啊
angelcool 2005-05-11
  • 打赏
  • 举报
回复
MARK
zx_sanjin 2005-05-11
  • 打赏
  • 举报
回复
解决了就结贴吧~:)
zx_sanjin 2005-05-11
  • 打赏
  • 举报
回复
楼上的,你可以试试将两个窗口都设成HWND_TOPMOST,看看效果,然后调整一下创建顺序,如:
CDialog dlg1;
CDialog dlg2;
变成
CDialog dlg2;
CDialog dlg1;

你再看看效果~~
殇迪 2005-05-11
  • 打赏
  • 举报
回复
来晚了^_^
zx_sanjin(1.5kg)说的对
楼主调用BringWindowToTop的时候dlg对象已经销毁了
所以无论是调用BringWindowToTop还是SetWindowPos都是徒劳
qrlvls 2005-05-11
  • 打赏
  • 举报
回复
在 OnInitDialog 中使用
SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);
horisly 2005-05-10
  • 打赏
  • 举报
回复
::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
**********
这个绝对可以。
我添加在 OnInitDialog 上,那么窗体一开始显示就实现这个功能。
也可以添加到菜单项处理函数,根据用户选择是否实现功能。
wshcdr 2005-05-10
  • 打赏
  • 举报
回复
SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);

同意这个
zx_sanjin 2005-05-10
  • 打赏
  • 举报
回复
FileSaveDlg dlg;
dlg.DoModal();

::BringWindowToTop(dlg.m_hWnd); // 这时对话框已经不存在了:( 当然没效果了~~~





kugou123 2005-05-10
  • 打赏
  • 举报
回复
同意用SetWindowPos实现
umbrella1984 2005-05-10
  • 打赏
  • 举报
回复
SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);

我这可以
shuiher 2005-05-10
  • 打赏
  • 举报
回复
楼上的大哥,你说的是SetWindowPos吧??我已经实验过了
::SetWindowPos(dlg.m_hWnd,HWND_TOPMOST,0,0,147,58,SWP_SHOWWINDOW);
不行的!!
rockersz 2005-05-10
  • 打赏
  • 举报
回复
对不起,应该是SetWindowPos(),写错了,呵呵
vcmute 2005-05-10
  • 打赏
  • 举报
回复
SetWindowPos(dlg.m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
jerry 2005-05-10
  • 打赏
  • 举报
回复
在对话框的 OnInitDialog()里:

SetWindowPos(&wndTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);
rockersz 2005-05-10
  • 打赏
  • 举报
回复
为什么不用SetWindowPosition()?看看msdn

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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