Reputation: 456
so I have created this popup window with a custom move and sizing, pressing ctrl and click anywhere in the client to move and alt at the borders to size. The problem is, now i'm creating child windows for inside this window and here it goes "wrong". I can't find how to send the message to the parent window. This is what I've tried.
I handle these messages in the wndproc of the parent window
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;
and this is the doHitTest method
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;
}
and this is what I'm trying in the childs window procedure
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);
Upvotes: 3
Views: 2470
Reputation: 12784
The childrens' window procedures should return HTTRANSPARENT
in response to WM_NCHITTEST
, and (citing MSDN) "the message will be sent to underlying windows in the same thread until one of them returns a code that is not HTTRANSPARENT"
.
Upvotes: 4