2009-06-25 3 views
1

私は、別のダイアログ内に配置したいダイアログと、メインダイアログのコントロールの1つを基準にして配置したいダイアログを持っています。SetWindowPos()関数はウィンドウを移動しませんか?

void CspAceDlg::DrawResultsArea() 
{ 
    CWnd* pTabCtl = GetDlgItem(IDC_BUILDTABS); 
    CRect rectTabCtl; // Allocate CRect for control's position. 
    pTabCtl->GetWindowRect(&rectTabCtl); 
    int resX = rectTabCtl.right + 15; 
    int resY = rectTabCtl.top; 
    //RESULTS AREA 
    results.Create(IDD_RESULTSDIALOG, this); 
    results.SetWindowPos(this, resX, resY, /*608, 19, */175, 135, SWP_SHOWWINDOW); 
    results.ShowWindow(SW_SHOW); 
} 

私の問題は私のダイアログリソース(IDD_REULTSDIALOGは)私が去ることはできませんリソースエディタで私のSetWindowPos()(と少しのプロパティ]タブをオーバーライドしているように見えるX POSおよびY順位と呼ばれる性質を有していることですこれらの空白)。これらのプロパティを0、0に設定すると、メインダイアログの左上隅にダイアログが表示されます。私がそれらを数に設定すると、私が推測しているところにある推測とテストが大雑把に行われますが、異なる解像度でアプリケーションを実行すると、ダイアログが別の場所に表示されます。とにかく私が本当にやりたいことは、私のメインダイアログ(この場合は私のタブコントロール)上の別のコントロールに相対的なダイアログを配置することです。私のSetWindowPos()が無視される理由は何ですか?私は別の機能を使用すべきですか?

答えて

6

SetWindowPosのドキュメントによると、あなたがSWP_SHOWWINDOWに渡すと、ウィンドウは移動されません。

SWP_SHOWWINDOWまたはSWP_HIDEWINDOW場合フラグが設定されている場合、ウィンドウは移動またはサイズ変更できません。

+0

うわー、それはとても奇妙な...ありがとう!私はそれがなぜそんなに無視されるのだろうと思っていた。 – Lauren

+1

ええ、一見一見それは変です。しかし、実際に移動することを心配することなく、SetWindowPosを他のフラグのいくつかに使用することができます(Zオーダーを変更したいときなど)。 –

0

これは、主にthis threadのために考えられました。

私のコードは次のように探して出てきた:

void CspAceDlg::DrawResultsArea() 
{ 
    CRect rectTabCtl; // CRect representing tab control's position. 
    POINT pResXY; 
    POINT pResWH; 

    CWnd* pTabCtl = GetDlgItem(IDC_BUILDTABS); 
    pTabCtl->GetWindowRect(&rectTabCtl); 

    pResXY.x = rectTabCtl.right + 15; 
    pResXY.y = rectTabCtl.top; 
    pResWH.x = pResXY.x + 175; 
    pResWH.y = pResXY.y + 135; 
    ScreenToClient(&pResXY); 
    ScreenToClient(&pResWH); 
    //RESULTS AREA 
    results.Create(IDD_RESULTSDIALOG, this); 
    //results.SetWindowPos(this, resX, resY, /*608, 19, */175, 135, SWP_SHOWWINDOW); 
    results.MoveWindow(pResXY.x, pResXY.y, pResWH.x, pResWH.y, TRUE); 
    results.ShowWindow(SW_SHOW); 
} 
関連する問題