1

それを埋め、常に100%の幅、高さで、常に親と同じ位置にとどまる別のウィンドウの中にウィンドウを作成する方法はありますか(もしあれば、何か提案してください:))?簡単に言えば、親ウィンドウと同じように動作する (サイズと動き) ウィンドウを作成します。今のところ私はこれを持っています:

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と同じ位置に保持する簡単な方法があるでしょうか?

4

3 に答える 3

1

GetWindowInfo()を使用して、ウィンドウの現在の画面位置を照会できます。これを使用して、相対座標から目的の画面位置を計算できます

于 2012-04-10T14:43:58.123 に答える
0

MapWindowPoints を使用して、四角形をある座標セットから別の座標セットに変換できます。親クライアント スペースからスクリーン スペースに移動するには、次のコマンドを使用します。

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

SetWindowPos よりも MoveWindow を使用する方が簡単な場合もあります。

于 2012-04-10T15:00:23.607 に答える