zoukankan      html  css  js  c++  java
  • MFC中在基于对话框的窗体中使用CFileDialog导致菜单栏变灰的解决方案

    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。有兴趣的观者可以自行摸索一下,多的就不要再问了,本屌作为逗比,深感没压力,你再问我打屎你

    收工!

  • 相关阅读:
    spring中Bean的生命周期
    java之多线程
    struts2配置详解
    值栈
    数据校验和国际化
    2016年9月23日试题整理
    SpringMVC 文件上传下载
    CSS3 新增属性
    SpringMVC数据校验
    java中进程与线程--三种实现方式
  • 原文地址:https://www.cnblogs.com/GuyaWeiren/p/4486851.html
Copyright © 2011-2022 走看看