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. (转)mahout中k-means例子的运行

           首先简单说明下,mahout下处理的文件必须是SequenceFile格式的,所以需要把txtfile转换成sequenceFile.SequenceFile是hadoop中的一个类,允 ...

  2. FZU Problem 2214 Knapsack problem(背包+思维转换)

    转化思维,把价值当成背包容量,选择最小的花费,从上到下枚举,找到当这个最小的花费. #include<iostream> #include<cstring> #include& ...

  3. jQuery实现瀑布流(pc、移动通用)

    使用 jQuery 的 Masonry 插件来实现这种页面形式 1,分别下载 jQuery 与 Masonry ,然后把他们都加载到页面中使用. 加载代码: <script src=" ...

  4. 把中文版NetBeans改成英文版

    不管你从官网下的是英文版还是中文版,安装之后操作界面都是中文的.这是因为NetBeans会根据你的操作系统自动设置界面语言,并且没有提供更改的功能.解决的方法也很简单,下面介绍我用过的两种方法: 方法 ...

  5. git 与 github基本使用

    这里只对git 与 github的基本使用介绍,对于简单的步骤不做详细的说明,可以在网上搜索 一.git与github的安装与链接 1.git 安装:百度搜索"git",下载安装即 ...

  6. 多机并行计算框架 和CoolHash数据库(可用于多机机器学习)

    http://my.oschina.net/fourinone/blog/289122 http://www.oschina.net/p/fourinone

  7. Python+Selenuim测试网站,只能打开Firefox浏览器却不能打开网页的解决方法

    最开始我使用的Selenium版本为2.48,Firefox版本为37,自动化打开网站的时候,可以正常打开. 后来由于Firefox的自检测更新,版本更新为47,导致版本不兼容,自动化打开网站浏览器时 ...

  8. CodeForces 620B Grandfather Dovlet’s calculator

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<stack> #inclu ...

  9. ReactiveNative学习之Diff算法

    React 源码剖析系列 - 不可思议的 react diff深入浅出React(四):虚拟DOM Diff算法解析React diff 算法总结链接引用的文章React出于性能的考虑,为了避免频繁操 ...

  10. 控制流之for

    for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目.我们会在后面的章节中更加详细地学习序列.使用for语句~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...