C++ WM_NCHITTEST:调整大小命令不起作用
我有一个自定义的无边框窗口,我想能够调整它的大小。我有一个测试虚拟边框的代码,可以抓取和调整大小。它适用于Windows7。但是,由于某些原因,它不适用于Windows 10。以下是WM\U NCHITTEST中的代码:C++ WM_NCHITTEST:调整大小命令不起作用,c++,windows,winapi,borderless,C++,Windows,Winapi,Borderless,我有一个自定义的无边框窗口,我想能够调整它的大小。我有一个测试虚拟边框的代码,可以抓取和调整大小。它适用于Windows7。但是,由于某些原因,它不适用于Windows 10。以下是WM\U NCHITTEST中的代码: case WM_NCHITTEST: { bool bLeft = 0, bRight = 0, bTop = 0, bBottom = 0; bool bHorz =0, bVert =0; RECT rMenu; GetWind
case WM_NCHITTEST:
{
bool bLeft = 0, bRight = 0, bTop = 0, bBottom = 0;
bool bHorz =0, bVert =0;
RECT rMenu;
GetWindowRect(hWnd, &rWnd);
if (LOWORD(lParam) > rWnd.left && LOWORD(lParam) < rWnd.left+4) bLeft = 1;
if (LOWORD(lParam) > rWnd.right-4 && LOWORD(lParam) < rWnd.right) bRight = 1;
if (HIWORD(lParam) > rWnd.top && HIWORD(lParam) < rWnd.top+4) bTop = 1;
if (HIWORD(lParam) > rWnd.bottom-4 && HIWORD(lParam) < rWnd.bottom) bBottom = 1;
if (bLeft && bTop) return HTTOPLEFT;
if (bRight && bTop) return HTTOPRIGHT;
if (bLeft && bBottom) return HTBOTTOMLEFT;
if (bRight && bBottom) return HTBOTTOMRIGHT;
if (bLeft) return HTLEFT;
if (bRight) return HTRIGHT;
if (bTop) return HTTOP;
if (bBottom) return HTBOTTOM;
GetMenuItemRect(hWnd, hMenu, NUMMI, &rMenu);
if (LOWORD(lParam)>rMenu.right && LOWORD(lParam)<rWnd.right-100) bHorz = 1;
if (HIWORD(lParam)>rWnd.top+WFRAME && HIWORD(lParam)<rWnd.top+WFRAME+cyMenu) bVert = 1;
if (bHorz && bVert) return HTCAPTION;
auto nchResult = DefWindowProc(hWnd, WM_NCHITTEST, wParam, lParam);
return nchResult;
}
case WM\n文档:
{
布尔布尔布尔夫特=0,亮度=0,bTop=0,bBottom=0;
布尔布尔布尔兹=0,布尔布尔特=0;
RECT-rMenu;
GetWindowRect(hWnd和rWnd);
如果(LOWORD(lParam)>rWnd.left&&LOWORD(lParam)rWnd.right-4和低位(LPRAM)rWnd.top&&HIWORD(lParam)rWnd.bottom-4&&HIWORD(lParam) if(LOWORD(lParam)>rMenu.right&&LOWORD(lParam)rWnd.top+WFRAME&&HIWORD(lParam)所有的调整大小命令都不起作用。
它对我有效。请参阅。我的windows版本是windows 10 1903。谢谢你。对我来说,当我禁用WS_THICKFRAME
样式时,问题就出现了。这禁用了所有调整大小边框功能。我必须这样做,因为windows 10在页面顶部留下了一条难看的白色条纹,w这是WM\u NCPAINT
无法涵盖的。如果您更改背景颜色,您就会明白我的意思。幸运的是,我找到了一个更好的自定义窗口起点,我在本文中指出:您需要在无边界窗口中绘制菜单项吗?我注意到,如果删除非客户端区域,则不会出现白色条带。是的,每个需要绘制东西,包括菜单栏。仍然可以使用菜单资源。可以使用按钮模拟菜单栏项(除非有更好的解决方案)。使用GetSubMenu()
和TrackPopupMenu()
以显示下拉菜单。处理WM\u NCHITTEST
消息以创建虚拟大小边框,以及一个用于抓取和拖动窗口的区域。好的。您的所有问题似乎都得到了很好的解决。请继续享受您的旅程:)