默认标题栏,同时保持默认边框(Win API和C ++)

问题描述 投票:0回答:1

我希望窗口正确响应所有功能(aerosnap,调整大小,边框颜色,...)。 我能得到的最接近的是使用enter image description here的组合 MARGINS margins = { 1 }; DwmExtendFrameIntoClientArea(hWnd, &margins);

case WM_NCCALCSIZE: return 0;

但是,窗口不再具有调整大小的手柄,并且边框不采用正确的颜色(当“标题栏上显示重音颜色和窗口边框上的重音颜色”在设置中启用)。
您知道要获得所需结果的食谱吗?

我阅读了firefox
sourcecode

并找到了我的答案。

您要做的就是创建一个

WS_OVERLAPPEDWINDOW

窗口,并为每个消息提供客户端区域的rect(读取
c++ user-interface winapi
1个回答
0
投票
)。

WM_NCCALCSIZE 否则,当窗户第一次出现时,边界附近有一些叛军像素,这些像素不想用背景颜色绘画。

左边框出现1像素比底部的像素宽:


我发现,一旦窗口大小,这些像素就会正确绘制。因此,要在可见应用程序之前解决它,我在启动时调整了启动窗口的大小:

case WM_NCCALCSIZE: {
    RECT* clientRect =
        wParam ? &(reinterpret_cast<NCCALCSIZE_PARAMS*>(lParam))->rgrc[0] : (reinterpret_cast<RECT*>(lParam));
    clientRect->top += 0;
    clientRect->left += 7;
    clientRect->right -= 7;
    clientRect->bottom -= 7;
    return 0;
}

注意,您必须在

WM_ACTIVATE

消息中实现调整大小的逻辑以获取箭头光标(读取

doc

)。 最终,我只有一个带有默认边框的窗口,我可以自由绘制客户区域。每个功能似乎都起作用。 Rebel pixel column恢复:

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.