我希望窗口正确响应所有功能(aerosnap,调整大小,边框颜色,...)。
我能得到的最接近的是使用的组合
MARGINS margins = { 1 };
DwmExtendFrameIntoClientArea(hWnd, &margins);
和
case WM_NCCALCSIZE:
return 0;
但是,窗口不再具有调整大小的手柄,并且边框不采用正确的颜色(当“标题栏上显示重音颜色和窗口边框上的重音颜色”在设置中启用)。您知道要获得所需结果的食谱吗?
我阅读了firefoxsourcecode
并找到了我的答案。
您要做的就是创建一个WS_OVERLAPPEDWINDOW
WM_NCCALCSIZE
否则,当窗户第一次出现时,边界附近有一些叛军像素,这些像素不想用背景颜色绘画。
我发现,一旦窗口大小,这些像素就会正确绘制。因此,要在可见应用程序之前解决它,我在启动时调整了启动窗口的大小:
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)。
最终,我只有一个带有默认边框的窗口,我可以自由绘制客户区域。每个功能似乎都起作用。
恢复: