zoukankan      html  css  js  c++  java
  • MFC窗口去边框、置顶、全屏、激活

    静态移除长提边框非常easy,直接设置“Border”属性为"none"就可以

    "Maximize Box", “Minimize Box” 设置是否显示 最大化/最小化button。

    “System Menu” 设置 是否显示 关闭button;


    1. 代码中动态移除窗口边框的方法

    DWORD dwStyle = GetStyle(); //等价于GetWindowLong(m_hWnd, GWL_STYLE);
    DWORD dwNewStyle = WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
    dwNewStyle &= ~dwStyle;
    SetWindowLong(m_hWnd, GWL_STYLE, dwNewStyle);
    或者

    LONG nStyle = GetWindowLong(m_hWnd, GWL_STYLE);
    LONG newStyle = nStyle & (~(WS_CAPTION | WS_BORDER | WS_THICKFRAME));  //移除属性 WS_EX_CLIENTEDGE
    SetWindowLong(m_hWnd, GWL_STYLE, newStyle);
    ::SetWindowPos(m_hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);  //SWP_FRAMECHANGED确保马上生效

    2. 设置窗口为最底层窗口的方法

    SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
    或者
    ::SetWindowPos(GetSafeHwnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

    3. 设置窗口为最顶层窗口的办法

    SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
    或者
    ::SetWindowPos(GetSafeHwnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
    

    备注(1): 

    wndBottom和 wndTopMost为基类CWnd的静态成员,定义例如以下:

    static AFX_DATA const CWnd wndTop;       // SetWindowPos's pWndInsertAfter
    static AFX_DATA const CWnd wndBottom;    // SetWindowPos's pWndInsertAfter
    static AFX_DATA const CWnd wndTopMost;   // SetWindowPos pWndInsertAfter
    static AFX_DATA const CWnd wndNoTopMost; // SetWindowPos pWndInsertAfter

    备注(2):

    SWP_DRAWFRAME       环绕窗体画一个框 
    SWP_FRAMECHANGED    发送一条WM_NCCALCSIZE消息进入窗体,即使窗体的大小没有发生改变.假设不指定这个參数,消息WM_NCCALCSIZE仅仅有在窗体大小发生改变时才发送 
    SWP_HIDEWINDOW      隐藏窗体 
    SWP_SHOWWINDOW      显示窗体 
    SWP_NOREDRAW        窗体不自己主动重画 
    <span style="color:#ff0000;">SWP_NOACTIVATE      不激活窗体(避免抢焦点)</span>
    SWP_NOCOPYBITS      屏蔽客户区域 
    <span style="color:#ff0000;">SWP_NOMOVE          保持当前位置(X和Y參数将被忽略)
    SWP_NOSIZE          保持当前大小(cx和cy參数会被忽略)  </span>
    <span style="color:#ff0000;">SWP_NOZORDER        保持窗体在列表的当前位置(hWndInsertAfter參数将被忽略) 
    SWP_NOOWNERZORDER   不改变全部窗体的位置和排列顺序 </span>
    SWP_NOREPOSITION    与SWP_NOOWNERZORDER标记同样 
    SWP_NOSENDCHANGING  防止这个窗体接受WM_WINDOWPOSCHANGING消息 

    4. 设置窗口全屏显示

    int cxScreen,cyScreen; 
    cxScreen=GetSystemMetrics(SM_CXSCREEN);
    cyScreen=GetSystemMetrics(SM_CYSCREEN);
    SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);







  • 相关阅读:
    Reversion windows 2008 R2 STD to Datacenter
    NetAPP常用操作
    firefox解决flash崩溃
    物理和虚拟兼容性RDM的区别
    网络嗅探器Wireshark
    子网掩码在线计算换算及算法
    Debian中文字体安装
    快算24点,POJ(3983)
    第九十八周,搜索24点
    两次DFS,POJ(1481)
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6903107.html
Copyright © 2011-2022 走看看