转摘自: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. NB-IOT的键值对

    1. 关于NB-IOT的软件开发,有一个功能,NB收到数据的时候可以唤醒处于低功耗下的MCU. 2. 2个键值对可以配置这个功能.使用键值对的方式. 3. 遇到的第一个问题,<config> ...

  2. Flask 中文手册 0.10 文档

    Flask 中文手册 0.10 文档 欢迎使用 Flask 欢迎阅读 Flask 文档. 本文档分为几个部分.我推荐您先从 安装 开始,之后再浏览 快速入门 章节. 教程 比快速入门更详细地介绍了如何 ...

  3. Asp.NET Core2.0与 EF的ABP框架入门视频教程

    https://ke.qq.com/course/287301?from=qqchat&ADUIN=1187219916&ADSESSION=1522716499&ADTAG= ...

  4. GraphSAGE 代码解析(三) - aggregators.py

    原创文章-转载请注明出处哦.其他部分内容参见以下链接- GraphSAGE 代码解析(一) - unsupervised_train.py GraphSAGE 代码解析(二) - layers.py ...

  5. Spark实战练习03--Pair RDD

    一.场景 现有某网站的网站日志,内容为用户对网站的请求,包含user ID.IP address.datetime……等等 另有一份文件中包含用户的账户详细信息数据,包含User ID.creatio ...

  6. Python 进阶(一些进阶技巧)

    个人笔记,基本都摘抄自 Python3 官方文档 一. 上下文管理 1. 传统的类方式 Java 使用 try 来自动管理资源,只要实现了 AutoCloseable 接口,就可以部分摆脱手动 col ...

  7. liniux备忘录-磁盘配额与进阶文件系统管理

    知识 磁盘配额Quota 可以限制磁盘的使用容量,可以对用户.群组磁盘的最大使用容量. 磁盘配额Quota的使用限制 只能针对整个文件系统. 核心必须支持Quota. 自行编译的核心需要注意 Quot ...

  8. Android之ViewPager 第二课

    在这里只粘贴部分代码 在第一课中,只有View滑动完毕,才触发动画效果,令滑块移动,在第二课中,将实现滑块与View同步运行. SecondActivity.java package com.andr ...

  9. Mac上利用Aria2加速百度网盘下载

    百度网盘下载东西的速度那叫一个慢,特别是大文件,看着所需时间几个小时以上,让人很不舒服,本文记录自己在mac上利用工具Aria2加速的教程,windows下思路也是一样! 科普(可以不看) 这里顺带科 ...

  10. Maven中如何将源码之外的文件打包及添加本地jar

    <build> <resources> <resource> <directory>src/main/resources</directory&g ...