C++ WM_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

我有一个自定义的无边框窗口,我想能够调整它的大小。我有一个测试虚拟边框的代码,可以抓取和调整大小。它适用于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;

     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
消息以创建虚拟大小边框,以及一个用于抓取和拖动窗口的区域。好的。您的所有问题似乎都得到了很好的解决。请继续享受您的旅程:)