指定MessageBox所属父窗口(使用AfxGetMainWnd())_c++ messagebox怎么指定不了父窗口-程序员宅基地

技术标签: QT&MFC  C/C++  AfxGetMainWnd  父窗口  MessageBox  

参考:MSDN

通常情况下:我们在CDialog的内部函数中,不需要指定HWND;另外在许多调用的时候,我们可以获取到父窗口的指针。pMainWnd->GetSafeHwnd() 就可以了。


但在一些情况里:例如 回掉函数 中,我们可能无法获取所属的父窗口:

int MessageBox(
  HWND hWnd, 
  LPCTSTR lpText, 
  LPCTSTR lpCaption, 
  UINT uType
); 

 

当hWnd使用NULL的时候:If this parameter is NULL, the message box has no owner window.

该窗口不隶属于某个窗口,导致该探出MessageBox可能会放在别的窗口的后面,可能被遮挡。大多数情况,我们希望MessageBox像模态窗口一样,隶属于父窗口,恒位于调用窗口的前面。

 模态窗口说明:所谓模态对话框,就是指当这个对话框弹出的时候,鼠标不能单击这个对话框之外的区域,这种对话框往往是用户进行了某种操作后才出现的。

 

此时我们可以这样来做:使用AfxGetMainWnd(),获取父窗口

<span style="font-size:14px;">HWND hWnd = AfxGetMainWnd()->GetSafeHwnd();
if (MessageBox(hWnd, _T("是否继续"), _T("提示"), MB_OKCANCEL) == IDOK)</span><pre class="cpp" name="code"><span style="font-size:14px;">{</span><pre class="cpp" name="code"><span style="font-size:14px;"></span><pre class="cpp" name="code"><pre class="cpp" name="code"><span style="font-size:14px;">   ...;</span>
 }




 

AfxGetMainWnd返回值:

If your application is an OLE server, call this function to retrieve a pointer to the active main window of the application instead of directly referring to them_pMainWnd member of the application object.

 
CWnd* AFXAPI AfxGetMainWnd( );

 

If the server has an object that is in-place active inside a container, and this container is active, this function returns a pointer to the frame window object that contains the in-place active document.

If there is no object that is in-place active within a container, or your application is not an OLE server, this function simply returns them_pMainWnd of your application object.

If AfxGetMainWnd is called from the application's primary thread, it returns the application's main window according to the above rules. If the function is called from a secondary thread in the application, the function returns the main window associated with the thread that made the call.


 

 附加:

类似的,我们可以使用另外的一些其它MFC的全局的函数

CWinApp* AFXAPI <strong>AfxGetApp</strong>();                // 获取当前应用
CWnd* AFXAPI <strong>AfxGetMainWnd</strong>();               // 获取主窗口
HINSTANCE AFXAPI <strong>AfxGetInstanceHandle</strong>();    // 获取实例句柄
HINSTANCE AFXAPI <strong>AfxGetResourceHandle</strong>();    // 获取资源句柄
void AFXAPI <strong>AfxSetResourceHandle</strong>(HINSTANCE hInstResource); // 设置资源
LPCTSTR AFXAPI <strong>AfxGetAppName</strong>();             // 获取应用名称


 

 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chunyexiyu/article/details/12782047

智能推荐

可能是国内最好的网关开源项目,支持 Dubbo、SpringCloud,经历多年双11高并发的场景验证...-程序员宅基地

文章浏览阅读628次。点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络..._开源银行网关项目

leetcode----dfs解决岛屿问题(200、1254、1020、695、1905)_给你两个 的二进制矩阵 和 ,它们只包含 (表示水域)和 (表示陆地)。一个 岛屿 是由-程序员宅基地

文章浏览阅读511次。200.岛屿数量(DFS)问题:给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1思路:dfs_给你两个 的二进制矩阵 和 ,它们只包含 (表示水域)和 (表示陆地)。一个 岛屿 是由

数据挖掘-实战记录(一)糖尿病python数据挖掘及其分析_数据挖掘预测疾病发生的一个例子-程序员宅基地

文章浏览阅读1.5w次,点赞22次,收藏320次。数据挖掘-实战记录(一)糖尿病python数据挖掘及其分析_数据挖掘预测疾病发生的一个例子

ubuntu18安装nvidia驱动_ubuntu18 安装 nvidia 驱动-程序员宅基地

文章浏览阅读270次。这里提供一种方法:执行,ubuntu-drivers devices看到recommend那一行,是默认推荐的驱动。执行sudo ubuntu-drivers autoinstall_ubuntu18 安装 nvidia 驱动

JAVA中变量的存放位置_类里面的默认权限的变量会放在哪里-程序员宅基地

文章浏览阅读3.6k次,点赞5次,收藏15次。JAVA中变量的存放位置一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。​ (1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在JAVA虚拟机栈中​ (2)当声明的是引用类型变量时,所声明的变量名(该变_类里面的默认权限的变量会放在哪里

[转]一张图很直观的表明我们需要挖掘用户真正的需求_以10幅图片对比来说明用户想要的需求跟他描述的存在不同,各开发人员理解的又千差-程序员宅基地

文章浏览阅读710次。1、一张图很直观的表明我们需要挖掘用户真正的需求“用户角色”在可用性设计里,是一个很重要的概念,之前很多关于用户的讨论,比如:“不要听用户的”“要不要听用户的”“以用户为中心是有害的”“要关注用户,学会倾听用户”等等,或许都从各自的角度来证明了自己的想法。今天在西贝那里看到这样一张图:从上面这张图我们可以看出:不光开发团队的不同工种的理解差别很大,而且用户的期望和用户的真正需要也不尽相同。2、在设计时候适当运用角色,正好可以弥补设计与用户真正地需求_以10幅图片对比来说明用户想要的需求跟他描述的存在不同,各开发人员理解的又千差

随便推点

华为机试三道编程题(2021-09-15)_科锐 javascript 机试-程序员宅基地

文章浏览阅读2k次,点赞8次,收藏14次。通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【华为】或者【百度】即可获得最实时的笔试题解啦!通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【华为】或者【百度】即可获得最实时的笔试题解啦!通知:最新的秋招笔试编程题题目、思路以及参考代码已经全部整理好放在【TechGuide】了,私信公众号回复【华为】或者【百度】即可获得最实时的笔试题解啦!通知:最新的秋招笔试编程题题目._科锐 javascript 机试

Clion中文乱码问题_clion下载插件位置是中文怎么办-程序员宅基地

文章浏览阅读685次,点赞9次,收藏6次。本人是做java的,所以习惯了用JetBrains系列,包括连orcale都用的他们系列的,所以我写C也是用的Clion,不是用的VS或者CS code,或者codeblocks当我运行C程序的时候,我发现了中文乱码!上网搜了一下,都是说改GBK啊,UTF-8啊,真的,我都试了,没用,所以我就问了一下客服(讲真的,我都觉得我比较飘,这问题还问人家客服)客服给了我一个办法:1、按住快捷键 shift+ctrl+alt+/2、选择registry3、取消第一项勾选的run.process_clion下载插件位置是中文怎么办

服务消费者 Consumer_consumercsdn-程序员宅基地

文章浏览阅读234次。接上篇1消费者服务1.1 项目搭建添加依赖 :(版本在父依赖)<dependencies> <!-- web 启动类 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> _consumercsdn

Vue2.0 走马灯(非swiper实例)_vue2 走马灯默认开始图片-程序员宅基地

文章浏览阅读874次。例子https://www.swiper.com.cn/demo/web/index.html(下拉到最后一个)Vue中安装main.js中引用不需要页面中使用样式及html太长了,先不放了,例子里面可以下载,如果有需要我这边实例的可以评论说下。。<template> <ul class="principal-swiper"> <li v..._vue2 走马灯默认开始图片

Jenkins集成Selenium无法启动浏览器,问题解决-程序员宅基地

文章浏览阅读2k次。原因:因为jenkins是用windows installer 安装成 windows的服务了,那么jenkins是一个后台服务,所以跑selium cases 的时候不显示浏览器前提条件:Jenkins 安装路径非系统盘目录(也就是 C盘);否则一下解决办法无法使用。 只能进行卸载重新配置Jenkins!!!解决办法:Step 1. (控制面板) -&gt; (管理工具) -&g...

keydown、input、keyup-程序员宅基地

文章浏览阅读1.4k次。我们常常需要通过监听输入框的keydown、input、keyup、change、blur事件来操作输入内容,所以他们的差异就不得不了解。先来看一个实验案例:<body> <input id='user' type="text" /></body><script> var user = document.getElementById('...