CSDN的博客编辑器实在是难用……转战博客园

直接把CSDN发的搬过来了

————————————————————————————我是分割线————————————————————————————

  第一次发博客好紧张啊,这里的大神都牛逼哄哄的只有我是装逼的我会不会被打啊

  先上妮可镇帖

  我最近在写一个MFC项目(基于对话框)时发现只要使用了CFileDialog,窗体上的Menu就会变成灰色,但是可以点击,如下图所示。

  忘了说,我的环境是Win8.1 + VS2013,弹出CFileDialog的代码和如下:

CFileDialog openfileDlg(
TRUE, // FALSE - Dlg as SaveFile
NULL,
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("EasyLive! 谱面文件(*.aji)|*.aji||"),
NULL);
if (openfileDlg.DoModal() == IDOK)
{
//....
}

  CFileDialog关闭后,窗体边框和目录变灰,但是可以操作。这个状态对用户体验非常不好。我们想要的是,在CFileDialog以模态窗体弹出时,父窗体变灰,CFileDialog关闭后父窗体外观还原

  大神们肯定一眼就看出来了,这不就是窗体失焦了嘛。是的,将窗体最小化在还原,或者用Alt+Tab都可以让窗体恢复

  按照常规思路,我可以在CFileDialog关闭后手动调用一下this->SetFocus()解决问题

  但是——不要忽略了一个细节:窗体此时是可以操作的。我们知道点击窗体的时候,窗体会自动获得焦点,而现在的情况是点击了窗体后灰色依旧。所以可以预见的是,调用this->SetFocus()是没有效果的(事实证明确实没有效果)

  百度一下还可以看到一种所谓的解决方案,说在创建CFileDialog的时候把父窗体传进去。因为同样无效我就不贴代码了。

  最后在google出的的一个老外的网站上找到了解决方案:把父窗体的基类,CDialogEx改成CDialog,然后,尼玛问题真的就解决了……简单粗暴

  至于为什么会这样,我懒得去刨根问底了。MFC对我来说只是临时性用用,我的重点还是在cocos2dx和U3D。有兴趣的观者可以自行摸索一下,多的就不要再问了,本屌作为逗比,深感没压力,你再问我打屎你

收工!

MFC中在基于对话框的窗体中使用CFileDialog导致菜单栏变灰的解决方案的更多相关文章

  1. MFC 如何在一个窗体中嵌套在另一个窗体中

    其中的一个方法是讲子窗体设置为非模式对话框,具体操作为 :设置子窗体的border属性为none,style为 child. 在父窗体中需要用create来实现,具体例子如下. 在父窗体的OnInit ...

  2. 2、创建MFC应用程序——基于对话框,时间计时器

    使用计时器更新MFC界面时间,频率1s. 文件——新建项目——MFC应用程序,下一步,选择基于对话框,其他默认,完成. 双击窗体(或者鼠标右键)进入类向导,自动创建Ontimer()函数 void C ...

  3. 【MFC】利用单一对话框内的分页技术实现向导功能(转)

    原文转自 http://blog.csdn.net/yongh701/article/details/43793151 所谓的向导功能,在win32的程序中常常见于安装程序或者程序内的设置向导,该向导 ...

  4. VS中基于对话框的MFC利用换肤改变边框颜色及格式

    第一版本: http://ishare.iask.sina.com.cn/f/13836420.html?from=like 2. http://www.cnblogs.com/phinecos/ar ...

  5. 如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

    方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef ...

  6. MFC基于Dialog的工程中使用OSG

    osg的例子有osgviewerMFC,是MDI类型的MFC工程,我一般用基于对话框的MFC较多. 注意观察MFC_OSG.h文件中的cOSG构造函数,参数是一个窗口句柄hWnd,这里的窗口可以不只局 ...

  7. 强行在MFC窗体中渲染Cocos2d-x 3.6

    [前言] 把Cocos2dx渲染到另一个应用程序框架中的方法,在2.x时代有很多大神已经实现了,而3.x的做法网上几乎找不着.这两天抽空强行折腾了一下,不敢独享,贴出来供大家参考. [已知存在的问题] ...

  8. MFC中 创建基于CFormView的文档视图程序

    在MFC中可以创建多种类型的窗口程序,如对话框程序.单文档结构程序(非文档/视图结构).单文档(文档/视图结构)以及多文档视图结构程序等. 在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对 ...

  9. MFC中的模态对话框与非模态对话框

    模态对话框创建: MyDialog mydlg; mydlg.DoModal() 当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行. 模态对话框的关闭顺序: OnCl ...

随机推荐

  1. IE6里面子集尺寸大的会把父亲撑大

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. DWR 整合之Hibernate

    1.让 DWR 和 Hibernate 一起工作的检查列表 1.确保你使用的是最新的 DWR.Hibernate 转换器是新东西,所以你需要下载最新版本 2.确保你的 Hiberante 在没有 DW ...

  3. PAT (Advanced Level) 1059. Prime Factors (25)

    素因子分解. #include<iostream> #include<cstring> #include<cmath> #include<algorithm& ...

  4. POJ 2296 Map Labeler

    二分答案 + 2-SAT验证,判断正方形是否相交写起来有点烦,思路还是挺简单的. #include<cstdio> #include<cstring> #include< ...

  5. PS2键盘 + LCD12864 实验

    本实验是通过LCD12864来显示键盘上被按下的按键,实验比较简单,在LCD12864固定的DDRAM地址上显示,缺点就是不能保存上一次被按的内容,后者会覆盖掉前面,所以屏上仅有一个字符显示.保存上一 ...

  6. JQuery的方便之处——宽高设置、坐标值和滚动条+事件绑定机制

    1.元素的宽高 可以通过css来进行设置,例如:$("元素").css({"宽度":"值","高度":"值&q ...

  7. __bridge,__bridge_transfer和__bridge_retained的使用和区别【转载】

    __bridge,__bridge_transfer和__bridge_retained的使用和区别[转载] Core Foundation 框架Core Foundation框架 (CoreFoun ...

  8. 漂亮的HTML表格 - ebirdfighter的日志 - 网易博客

    一个像素边框的表格: Info Header 1 Info Header 2 Info Header 3 Text 1A Text 1B Text 1C Text 2A Text 2B Text 2C ...

  9. 用Quick Cocos2dx做一个连连看(二)

    今天完成了以下内容: 1 成对生成SpriteItem 2 重排接口制作完成 3 SpriteItem的选择逻辑 主要代码如下: function MainScene:onEnter() local ...

  10. 加载window事件

    $(document).ready()和window.onload的区别 发表于 2012-08-29 由 admin 以浏览器装载文档为例,在页面加载完毕后,浏览器会通过JavaScript为DOM ...