如何使用WM_NCHITTEST来移动没有边界的父窗口

所以我创build了一个自定义移动和大小的popup式窗口,按住Ctrl并单击客户端中的任何位置以移动并在边框的大小。 问题是,现在我正在这个窗口内创build子窗口,这里是“错误的”。 我无法find如何将消息发送到父窗口。 这是我试过的。

我在父窗口的wndproc中处理这些消息

case WM_NCHITTEST: //determines if the window should be moving, sizing or don't do a thing return DoHitTest(pWnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) ); case WM_NCLBUTTONDOWN: //just set the cursor for visual notice if (GetAsyncKeyState(VK_CONTROL) & 0x8000) SetCursor(LoadCursor(NULL, IDC_SIZEALL)); break; 

这是doHitTest方法

 int WindowGnaq::DoHitTest(WindowBase* pWnd, int x, int y) { if( GetAsyncKeyState( VK_CONTROL ) & 0x8000 ) return HTCAPTION; if( m_bAdjustable && GetAsyncKeyState( VK_MENU ) & 0x8000 ) { short spare = 5; RECT r; pWnd->GetRect(r); r.right -= 1; r.bottom -= 1; if (x < (r.left + spare) && y < (r.top + spare)) return HTTOPLEFT; else if (x < (r.left + spare) && y > (r.bottom - spare)) return HTBOTTOMLEFT; else if (x < (r.left + spare)) return HTLEFT; else if (x > (r.right - spare) && y < (r.top + spare)) return HTTOPRIGHT; else if (x > (r.right - spare) && y > (r.bottom - spare)) return HTBOTTOMRIGHT; else if (x > (r.right - spare)) return HTRIGHT; else if (y < (r.top + spare)) return HTTOP; else if (y > (r.bottom - spare)) return HTBOTTOM; } return HTCLIENT; } 

这就是我正在尝试在孩子们的窗口程序

  case WM_NCHITTEST: //this just moves the mouse to the border i don't have but doesn't make me able to move return SendMessage( m_pParent->GetHandle(), WM_SYSCOMMAND, SC_MOVE, -1); //this doesn't to anything return PostMessage( m_pParent->GetHandle(), msg, wParam, lParam); //this makes the childwindow move instead of the parent return SendMessage( m_pParent->GetHandle(), msg, wParam, lParam); 

孩子的窗口过程应该返回HTTRANSPARENT以响应WM_NCHITTEST ,并且(引用MSDN ) "the message will be sent to underlying windows in the same thread until one of them returns a code that is not HTTRANSPARENT"