1

C++ Windows アプリケーション (ATL lib を使用) でダイアログ ボックスを作成し、それに 3 つのボタンを設定しました。ボタンは通常どおり、ダイアログ ボックスの下部にあります。ダイアログボックスのサイズを変更して、ボタンの位置をその下部に保持したい。言い換えると、ダイアログ ボックスの下マージンと側 (右または左) から一定の (低い) 距離を保つ必要があります。これを実現するために、ダイアログ ボックスのサイズを変更しながら、それに応じてボタンを移動しようとしました。次のコードを使用します (例として [OK] ボタンのみ) が、サイズ変更中にボタンが消えるだけです。ボタンがダイアログ ボックスの下部と右側からの距離を維持するには、コードをどのように変更すればよいですか?

LRESULT RenameFolderDlg::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
RECT r;
GetWindowRect(&r);

CWindow okB(GetDlgItem(IDOK));
RECT okR;
okB.GetWindowRect(&okR);

okB.MoveWindow( r.right - 80 , r.bottom - 40, okR.right - okR.left, okR.bottom -     okR.top, 1);

return 0;
}
4

2 に答える 2

4

私はwinapiを使用しています。その中で、GetWindowRectを使用してコントロールの座標をフェッチし、次にMapWindowPointsを使用してそれらの直角座標を画面にマップします。次に、SetWindowPosを使用して、マップされた直角座標に従ってウィンドウを配置します。

Google で、ATL の MapWindowPointsを見つけました。コードでレギングしているのは mapwindowpoints だと思います。それを使ってみてください。

それがうまくいくことを願っています....

于 2012-07-26T12:40:50.927 に答える
2

それ以外の

GetWindowRect(&r);

あなたが使用するものとします

GetClientRect(&r);

によって返される座標はGetWindowRect画面の左上隅を基準にしていますMoveWindowが、子コントロールに対して呼び出された場合は、親ウィンドウのクライアント領域の左上隅を基準にしていると想定されるためです。

于 2012-07-26T11:40:55.073 に答える