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)));
    另外两次函数调用可以去掉了。

  • 相关阅读:
    .net 网站登录
    .net controller 跳转到 controller
    c# 访问Mysql
    C#去除字符串的最后一个字符
    try catch
    MySqlDataReader
    转:十六进制颜色与RGB颜色对照表
    js:Razor视图下服务器代码给Javascript变量赋值
    .netMVC:Web页面向后台提交数据的方式和选择
    jquery方法
  • 原文地址:https://www.cnblogs.com/ityujian/p/3192505.html
Copyright © 2011-2022 走看看