zoukankan      html  css  js  c++  java
  • 简单实现全屏对话框

    在VC中实现一个占据整个Windows桌面(包括任务栏等)的全屏对话框的其实并不难。两行代码搞定:

    GetWindowLong(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX); // 去掉WS_MAXIMIZEBOX风格

    ShowWindow(hWnd, SW_MAXIMIZE); // 最大化显式窗口

    如果再加上TOPMOST属性,一般的全屏要求也就如此了吧。

    再接着说,如何防止无标题的窗口最大化时遮住任务栏,可在WM_GETMINMAXINFO消息中进行处理: 

    // 防止窗口最大化时会遮住任务栏
    MINMAXINFO *pmmi = (MINMAXINFO*)lParam;
    pmmi->ptMaxSize.y = GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION);

    RECT rc1, rc2;
    ::GetWindowRect (_WndMenuInfo.hWnd, &rc1);
    ::GetClientRect (_WndMenuInfo.hWnd, &rc2);

    int borderWidth = (rc1.bottom - rc1.top) - (rc2.bottom - rc2.top);
    pmmi->ptMaxSize.y += borderWidth;

    那么如何拦截最大化、还原事件呢?光拦截SC_MAXMIZE、SC_RESTORE是不行的,因为双击标题栏、最大化窗口的拖动标题栏时都会触发最大化、还原事件,所以还需拦截这些事件,代码如下:

    LRESULT CTest::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    if (wParam == SC_MAXIMIZE || wParam == 0xF032)
    {
    TRACE(_T("还原"));
    }
    else if (wParam == SC_RESTORE || wParam == 0xF122 || wParam == 0xF012)
    {
    TRACE(_T("最大化"));
    }

    return 0;
    }

    0xF032、0xF122、0xF012这三个值是我通过TRACE (wParam)这个参数得到的。

  • 相关阅读:
    希尔排序
    Java内存区域与内存溢出异常
    插入排序
    选择排序
    冒泡排序
    专利申请笔记
    Python基础指北
    mini web
    linux i/o multiplexing
    Python decorator module
  • 原文地址:https://www.cnblogs.com/ihaoqi/p/3253885.html
Copyright © 2011-2022 走看看