【问题标题】:winapi full screen leaves 3 tickleswinapi全屏留下3痒痒
【发布时间】:2021-05-12 20:19:35
【问题描述】:

这是我在这里找到的代码: https://www.codeproject.com/Questions/108400/How-to-Set-Win32-Application-to-Full-Screen-C .我有一个小问题。在第 1 部分中,它查询窗口样式,然后在第 2 部分中,它定义了我们将在第 3 部分中删除的样式。然后在第 4 部分中,在两侧和底部留下三个对接。我该怎么办?

//move to full screen 
//1
DWORD dwStyle = ::GetWindowLong(hwnd, GWL_STYLE);
//2
DWORD dwRemove = WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
//3
DWORD dwNewStyle = dwStyle & ~dwRemove;
::SetWindowLong(hwnd, GWL_STYLE, dwNewStyle);
//4
::SetWindowPos(hwnd, NULL, 0, 0, ::GetDeviceCaps(hdc, HORZRES), ::GetDeviceCaps(hdc, VERTRES),SWP_FRAMECHANGED);

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    Raymond Chen 在他的博客中给出了正确的做法:How do I switch a window between normal and fullscreen?

    这是您可以参考的示例:

    #include <Windows.h>
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    WINDOWPLACEMENT g_wpPrev = { sizeof(g_wpPrev) };
    void setFullWindow(HWND hwnd)
    {
        DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);
        if (dwStyle & WS_OVERLAPPEDWINDOW) {
            MONITORINFO mi = { sizeof(mi) };
            if (GetWindowPlacement(hwnd, &g_wpPrev) &&
                GetMonitorInfo(MonitorFromWindow(hwnd,
                    MONITOR_DEFAULTTOPRIMARY), &mi)) {
                SetWindowLong(hwnd, GWL_STYLE,
                    dwStyle & ~WS_OVERLAPPEDWINDOW);
                SetWindowPos(hwnd, HWND_TOP,
                    mi.rcMonitor.left, mi.rcMonitor.top,
                    mi.rcMonitor.right - mi.rcMonitor.left,
                    mi.rcMonitor.bottom - mi.rcMonitor.top,
                    SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
            }
        }
        else {
            SetWindowLong(hwnd, GWL_STYLE,
                dwStyle | WS_OVERLAPPEDWINDOW);
            SetWindowPlacement(hwnd, &g_wpPrev);
            SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
                SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
                SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
        }
    }
    int WINAPI WinMain(_In_  HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_  LPSTR szCmdLine, _In_  int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT("hello windows");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;
        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
        }
    
        hwnd = CreateWindow(szAppName,
            TEXT("the hello program"),
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            NULL,
            NULL,
            hInstance,
            NULL);
        setFullWindow(hwnd);
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);
        while (GetMessageW(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessageW(&msg);
        }
        return msg.wParam;
    }
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        }
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多