簡體   English   中英

無邊框窗口覆蓋任務欄

[英]Borderless Window Covers Taskbar

我有一個定制的無邊框窗口。 最大化時,它會覆蓋任務欄。 這不是我想要的。 我玩過WM_GETMINMAXINFO消息。 但是,我發現 Windows 10 會在底部和右側留下額外的 8 像素間隙。 這是一個全有或全無的命題。 這是我嘗試的第一個代碼:

case WM_GETMINMAXINFO:
     PMINMAXINFO pmm;
     pmm = (PMINMAXINFO)lParam;
     pmm->ptMaxSize.x = GetSystemMetrics(SM_CXSCREEN);
     pmm->ptMaxSize.y = GetSystemMetrics(SM_CYSCREEN);
     return 0;

這樣做的結果我的結果相同,沒有掛鈎WM_GETMINMAXINFO消息。 所以,我從底部敲了兩個像素,這樣我就可以訪問任務欄(處於“自動隱藏”模式):

case WM_GETMINMAXINFO:
     PMINMAXINFO pmm;
     pmm = (PMINMAXINFO)lParam;
     pmm->ptMaxSize.x = GetSystemMetrics(SM_CXSCREEN);
     pmm->ptMaxSize.y = GetSystemMetrics(SM_CYSCREEN)-2;
     return 0;

突然,我底部有一個10像素的間隙,右側有一個新的8 像素間隙! 這似乎是 Windows 10 的事情,因為這在 Win7 中從未發生過。 我也試過SystemParametersInfo ,調用SPI_GETWORKAREA (而不是GetSystemMetrics() )。 這會產生相同的結果。

據我所知,問題WM_GETMINMAXINFO 相反,我需要將命令放入我的代碼中,以將任務欄保持在頂部。 我已經搜索了 Windows 樣式。 但是,我在那里找不到任何幫助。

有誰知道如何解決這個關鍵問題。

好吧,我在一個最不可能的地方找到了答案。 有人試圖用 Python 代碼操縱邊界。 從他們的嘗試中,我能夠為無邊界窗口設計一個 C++ 解決方案。 結果如下:

首先,我用WS_OVERLAPPEDWINDOW | WS_VISIBLE創建了一個窗口WS_OVERLAPPEDWINDOW | WS_VISIBLE WS_OVERLAPPEDWINDOW | WS_VISIBLE樣式,啟用所有 Windows 功能。 然后我使用以下代碼處理WM_NCCALCSIZE消息:

case WM_NCCALCSIZE:
 {
    WINDOWPLACEMENT      wp;
    LPNCCALCSIZE_PARAMS  szr;

    wp.length = sizeof(WINDOWPLACEMENT);
    GetWindowPlacement(hWnd, &wp);
    szr = LPNCCALCSIZE_PARAMS(lParam);
    if (wp.showCmd == SW_SHOWMAXIMIZED)  szr->rgrc[0].bottom -= (WFRAME+2);
    return 0;
 }

在上面的代碼中,我從第一個矩形的底部減去邊框的寬度。 添加了額外的 2 個像素,以暴露自動隱藏的任務欄。 最大化的窗口現在正常運行,允許訪問任務欄。

為了在這個無邊框窗口中創建我的虛擬客戶區,我在WM_CREATEWM_SIZE處理程序中添加了這段代碼:

WINDOWPLACEMENT  wp;
GetWindowRect(hWnd, &rWnd);
GetClientRect(hWnd, &rClient);
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, &wp);
rClient.left += WFRAME;  rClient.right -= WFRAME;    rClient.top += (WFRAME+cyMenu);
if (wp.showCmd == SW_SHOWNORMAL)  rClient.bottom -= WFRAME;
cxClient = rClient.right-rClient.left;
cyClient = rClient.bottom-rClient.top;

元素cyMenu是為我的虛擬菜單欄保留的空間。 它將包含一系列按鈕,模擬菜單和最小/最大/關閉按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM