2012-04-10 20 views
0

これは、100%の幅と高さで、常に親と同じ位置にとどまっている別のものの中にウィンドウを作成する方法はありますか?いくつかの言葉では、親ウィンドウと同じ(サイズと動き)動作するウィンドウを作成します。今の私はこれを持っている:C++で別ウィンドウ内にウィンドウを作成

hWnd = CreateWindowEx(WS_EX_TOOLWINDOW,L"Class", L"Title",WS_VISIBLE | WS_POPUP, 
         0, 0, 0, 0,hParent, NULL, GetModuleHandle(NULL), NULL); 

と私はCallWndRetProc内部のサイズ変更のためにWM_SIZEまたはWM_WINDOWPOSCHANGINGをチェックしています。

if(msg->message == WM_WINDOWPOSCHANGING && msg->hwnd == hParent){ 
    WINDOWPOS* pos = (WINDOWPOS*)msg->lParam; 
    SetWindowPos(hWnd, 0, pos->x, pos->y, pos->cx, pos->cy, SWP_NOACTIVATE); 
} 

しかし、問題があると、posたがhParentsウィンドウに対する相対座標とSetWindowPosは、画面全体に対する位置を設定します。おそらく、hWndウィンドウをhParentと同じ位置に保持する方が簡単でしょうか?

+0

ここには常に方法があるという希望があります。 –

+1

WS_POPUPの代わりにWS_CHILDスタイルを使用する – Flot2011

+0

両方のウィンドウを作成しましたか? –

答えて

1

あなたは、ウィンドウの現在の画面位置を照会するGetWindowInfo()を使用することができます。これを使用して、相対座標から目的のスクリーン位置を計算することができます。

+0

私は 'GetWindowRect(hWnd、RECT); 'を使ってみましたが、lParamデータを使用する他のトリックはありませんか? EDIT:親ウインドウ(SetWindowPos)を基準にしてウインドウの位置を変更できるウインドウの作成スタイルがありますか? – user1112008

+1

Flot2011がコメントしたように 'WS_CHILD'を試してみることができますが、私はその意味に慣れていません – Attila

0

MapWindowPointを使用して、座標のセットを別の座標に変換できます。画面スペースに親クライアント空間から移動するには、以下を使用します。

MapWindowPoints(hParent, NULL, &rect, 2); 

また、それが簡単にというよりも、SetWindowPos MoveWindow使用することを見つけるかもしれません。

関連する問題