2012-01-23 6 views
3

を使用して子ウィンドウから親ウィンドウを移動させる方法このポップアップウィンドウでは、カスタムの移動とサイズ変更、Ctrlキーを押しながらクライアントの任意の場所をクリックして移動し、境界線をサイズ変更します。問題は、今、私はこのウィンドウの内側に子ウインドウを作成しており、ここでは「間違っている」ということです。親ウィンドウにメッセージを送信する方法が見つかりません。 これは私が試したことです。WM_NCHITTEST

私は親ウィンドウ

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; 

のWndProcメソッドでこれらのメッセージを処理し、これは

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; 
} 

doHitTest方法であり、これは私がお子様のウィンドウプロシージャ

にしようとしているものです
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); 

答えて

4

子供のウィンドウプロシージャは01に応答してHTTRANSPARENTを返す必要がありますおよび(MSDNを参照)"the message will be sent to underlying windows in the same thread until one of them returns a code that is not HTTRANSPARENT"

+0

thnx – ColmanJ

関連する問題