转摘自:http://blog.csdn.net/wirror800/article/details/4002381

将窗体置顶的方法有:

//将窗体置顶的API函数

::SetWindowPos(m_hWndTop,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

//MFC

pDlg->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

说明:

&CWnd::wndTopMost 是当前的最顶层窗口,调用函数,会把m_hWndTop或pDlg 置于&CWnd::wndTopMost上面

自然就变成了最顶层

&CWnd::wndTopMost 是个静态成员变量 不知是本主程序的还是整个Windows系统的? 

 所有对话框创建时,由系统自动更新的一个变量

 

我用(&CWnd::wndTopMost )->GetSafeHwnd(),能取到个有效的句柄,但调用SetWindowPos()却无效。

用::GetForegroundWindow()可以。

 

GetForegroundWindow() 所取到的一定是当前顶层的  但要注意 若你在界面程序里,比如按钮触发后调用他,获取

到的将是你正操作的界面。

如下代码:

void CTestTimerDlg::OnBnClickedButton1()

{

  pdlgFir = new TestTopMostDlg();

  pdlgFir->Create(IDD_DIALOG1,this);

  //dlg.DoModal();

  //此处获得的是TestTopMostDlg句柄

  m_hWndTop = ::GetForegroundWindow();

  //m_hWndTop = (CWnd::wndTopMost).GetSafeHwnd();

  //bRetu = FALSE;

}

void CTestTimerDlg::OnBnClickedButton2()

{

  //此处获得的将是CTestTimerDlg 句柄

  //m_hWndTop = ::GetForegroundWindow();//(&(CWnd::wndTopMost))->GetSafeHwnd();

  pDlg = new CTestSecondDlg();

  pDlg->Create(IDD_DIALOG2,this);

  BOOL bRetu=FALSE;

  //pdlgFir->GetSafeHwnd()

  bRetu = ::SetWindowPos(m_hWndTop,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

}

 

更关键的一点,同一个主程序里的两个子窗口都设置了 Topmost 则相互不起作用,即两个子对话框都可以通过获得焦点

而置顶。但二个子对话框 对于其他程序可以一起置顶。

参数 类型及说明 

  hwnd HWND,欲定位的窗口句柄 

  hWndInsertAfter HWND,置于hwnd前面的窗口句柄。这个参数必须是窗口的句柄或是下面的值之一:    HWND_BOTTOM 将窗口置于其它所有窗口的底部 

  HWND_NOTOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的后面。如果这个窗口非顶部窗口,这个标记对该窗口并不产生影响 

  HWND_TOP 将窗口置于它所有窗口的顶部 

  HWND_TOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的前面。即使这个窗口不是活动窗口,也维持最顶部状态

wFlags:

  UINT,指定窗口状态和位置的标记。这个参数使用下面值的组合: SWP_DRAWFRAME 围绕窗口画一个框 

  SWP_FRAMECHANGED 发送一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有发生改变。如果不指定这个参数,消息WM_NCCALCSIZE只有在窗口大小发生改变时才发送 

  SWP_HIDEWINDOW 隐藏窗口 

  SWP_NOACTIVATE 不激活窗口 

  SWP_NOCOPYBITS 屏蔽客户区域 

  SWP_NOMOVE 保持当前位置(X和Y参数将被忽略) 

  SWP_NOOWNERZORDER 不改变所有窗口的位置和排列顺序 

  SWP_NOREDRAW 窗口不自动重画 

  SWP_NOREPOSITION 与SWP_NOOWNERZORDER标记相同 

  SWP_NOSENDCHANGING 防止这个窗口接受WM_WINDOWPOSCHANGING消息 

  SWP_NOSIZE 保持当前大小(cx和cy会被忽略) 

  SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) 

  SWP_SHOWWINDOW 显示窗口

VC关于置顶窗口的方法小结的更多相关文章

  1. 爱pia戏推出PC客户端,为您自动置顶窗口,方便查找

    爱pia戏推出PC客户端, 可以在无法使用插件的时候,使用PC客户端, 将为您自动置顶窗口,方便查看剧本. 百度网盘下载地址: 链接: http://pan.baidu.com/s/1pLpvn5p ...

  2. PHPCMS实现文章置顶功能的方法

    我个人喜欢把PHPCMS当作博客来用,而作为一个博客,怎能少了文章置顶功能呢?其中用PHPCMS实现置顶功能非常简单,无非是修改下推荐位的名称为置顶,然后在文章列表中推送需要置顶的文章罢了. 不过博客 ...

  3. [置顶] C#扩展方法 扩你所需

    通过前面的学习,了解到:使用扩展方法,可以向现有类型“添加”方法.本文将使用扩展方法来对系统类型,自定义类型及接口进行方法扩展,一睹扩展方法的风采. 1.使用扩展方法来扩展系统类型 String是c# ...

  4. vc中播放mp3文件的方法小结

    一般播放MP3常见的有两种方法,一种是自己解码,另外一种用系统的库,比如MCI,当然如果可以用控件直接用个控件会更方便. 1.      使用mci #include <windows.h> ...

  5. 关于source insight 置顶窗口或者处于前台挡住窗口解决办法

    两个办法,分别如下: 1.重启source insight: 2.按两次F11:

  6. VC++实现窗口置顶

    最近在跟着Visual C++网络编程开发与实战视频教程做HttpSourceViewer这个MFC项目时,可以看我Github上的项目HttpSourceViewer,目前基本实现了所有功能,就是关 ...

  7. WPF实现只打开一个窗口,并且重复打开时已经打开的窗口置顶

    内容来自:https://codereview.stackexchange.com/questions/20871/single-instance-wpf-application 第一步:添加Syst ...

  8. 窗口置顶 - 仿TopWind

    前置学习:低级鼠标hook,获得鼠标状态. 这个在原来获得鼠标状态的基础上,加上一个事件处理即可. TopWind就是一个可以置顶窗口的文件,避免复制粘贴的时候的来回切换(大窗口与小窗口),算是一个实 ...

  9. win8.1系统下,点击一个窗口,【当前活动窗口】该窗口无法置顶

    两个或多个窗口同时显示在桌面的时候,点击下一层的窗口,无法置顶显示,无论怎么点击,还是隐藏在原置顶窗口的后面,只能手动把原置顶窗口最小化后,才能看到.例如,A窗口现在置顶,B窗口在A的后面,露出来一部 ...

随机推荐

  1. Codeforces Round #500 (Div. 2) BC

    CodeForces 1013B And CodeForces 1013C  Photo of The Sky B 可以发现只有一次与操作是有意义的,所以答案只有-1,0,1,2四种情况 #inclu ...

  2. 怎么实现hibernate悲观锁和乐观锁?

    隔离级别的安全控制是整体一个大的方面,而锁机制更加的灵活,它执行的粒度可以很小,可以在一个事务中存在. Hibernate悲观锁是依靠底层数据库的锁机制实现,在查询query.setLockMode( ...

  3. SQL 公用表表达式(CTE)

    1.概念 公用表表达式(Common Table Expression)是SQL SERVER 2005版本之后引入的一个特性.CTE可以看作是一个临时的结果集,可以在接下来的一个SELECT,INS ...

  4. mysql 函数以及操作总结

    1. 拼接 concat(参数1,参数2,.. ,参数)  实现将多个字符串拼接到一起 要批量修改一个字段值   字段值又是复杂的sql 计算得来   通过查询字段值 和 修改的条件fundId(这是 ...

  5. TFTP & commons-net-3.3.jar

    项目需求:上传文件到服务器,TFTP 了解TFTP http://wenku.baidu.com/link?url=MhRVgIySotFMkm5ar6B71zROPMoqC7cd5cSbKJo2kx ...

  6. 「日常训练」「小专题·USACO」 Ski Course Design (1-4)

    题目 以后补 分析 mmp这题把我写蠢哭了 我原来的思路是什么呢? 每轮找min/max,然后两个决策:升min/降max 像这样子dfs找最优,然后花式剪枝 但是一想不对啊,这才1-4,哪有那么复杂 ...

  7. Dijkstra标准模板

    Dijkstra求最短路问题:单元求最短路,从任意点出发求得该点到达其他任意点的距离 Dijkstra其实是一种贪心策略,与出发点(即源点)所连接的点中找到距离最短的点(这个距离是源点到这个点的最短距 ...

  8. LLLYYY的数字思维(模拟题)

    链接:https://ac.nowcoder.com/acm/contest/318/G LLLYYY很喜欢写暴力模拟贪心思维.某一天在机房,他突然抛给了队友ppq一 个问题.问题如下: 有一个函数f ...

  9. Gitlab自动触发Jenkins构建项目

    Gitlab自动触发Jenkins构建项目 一.前提 Gitlab已安装配置好. Jenkins已安装Gitlab plugin. 二.配置jenkins中Job 1.勾选触发器下的gitlab触发器 ...

  10. sql 条件插入

    原普通插入语句: insert into seriestable_upload values(New.SeriesID,0); 加条件后:(当不存在该条数据插入) insert into custom ...