zoukankan      html  css  js  c++  java
  • MFC无边框窗体不响应任务栏点击问题

    为了提升用户体验,需要隐藏主窗体的边框,使用图片绘制新的标题栏。标题栏绘制之后,发现用户点击任务栏上应用程序的图标,应用程序不会随着点击交替隐藏显示。

    分析结果是问题出现窗体风格设置上。
    最初为了省事从别的地方拷贝了以下三行用来隐藏标题栏和菜单
    SetWindowLong(this->m_hWnd, GWL_STYLE, 0);
    SetWindowLong(this->m_hWnd, GWL_EXSTYLE, 0); 
    this->SetMenu(NULL);


    问题肯定出在这三行代码上,查看MSDN,SetWindowLong用来设置窗体风格。

    在调用SetWindowLong之前调用 GetWindowLong(this->m_hWnd, GWL_STYLE) 来获取原有的风格,为0x4CFC000  含以下几项:

    WS_CAPTION | WS_CLIPSIBLINGS | WS_SIZEBOX | WS_SYSMENU | WS_TABSTOP | WS_GROUP

    查看MSDN,看不出这几项跟任务栏点击有啥关系。只能依次尝试。

    最后发现由WS_GROUP 属性决定是否响应任务栏点击事件,SetWindowLong函数为Wiindows API,看不到源码。并不清楚底层是怎么处理的。
    最终代码为:

        LONG  style  = GetWindowLong(this->m_hWnd, GWL_STYLE);
        SetWindowLong(this->m_hWnd, GWL_STYLE, style & (~(WS_CAPTION | WS_SIZEBOX | WS_TABSTOP | WS_SYSMENU)));
    另外两次函数调用可以去掉了。

  • 相关阅读:
    StarUML 破解方法
    String、StringBuilder、StringBuffer对比
    ThreadLocal源码
    编程思想——访问权限控制
    设计模式——调停者模式
    Abp.vNext 权限备注
    Abp 中 模块 加载及类型自动注入 源码学习笔记
    使用 ZipArchive 生成Zip文件备注
    ORACLE 连接SQLSERVER 数据库备忘
    FastReport 自定义数据集
  • 原文地址:https://www.cnblogs.com/ityujian/p/3192505.html
Copyright © 2011-2022 走看看