0

グローバル関数で Setwindowpos() を使用して、1 つのダイアログの位置を変更したいと考えています。だから私は以下のようにコーディングしました

CWnd *pWnd = (CWnd*)pMain->GetDlgItem(IDD_TOOLBAR_DIALOG);//GetActiveFrame ();
pWnd->SetWindowPos(&CWnd::wndBottom,0,80,45,900,SWP_SHOWWINDOW);

pWnd は未定義の値として返されます。だから私はこの方法に従います

CToolTab * tab;
tab = new CToolTab();
if(tab->GetSafeHwnd() == 0)
{
 tab = new CToolTab();
 if( tab->m_hWnd != NULL )
 {
 tab->SetWindowPos(&CWnd::wndBottom,0,80,45,900,SWP_SHOWWINDOW);   }
}

しかし、m_hWnd は 0x0000 を返します。そのため、どちらの場合も SetWindowPos はアサーション エラーを示します。グローバル関数でダイアログのハンドルを取得するにはどうすればよいですか?

4

1 に答える 1

0

さて、私はこれを考えていました-そして、IDD_TOOLBAR_​​DIALOGは、ほぼ確実に、ダイアログ自体のリソースIDであり、ダイアログのコントロールではないことに気付きました。DialogリソースIDを参照してGetDlgItemを呼び出し、それを含むウィンドウを見つけることを期待することはできません(単に機能せず、nullのCWnd *ポインターが返されます)。

pMainが指しているのは何ですか?メインアプリケーションウィンドウ?それはダイアログの親ですか?

コードのどこに移動したいダイアログを作成しますか?その時点で、有効なCWnd派生オブジェクトが必要ですか?1つの解決策は、メンバー変数としてそれを保持し、後で必要に応じてSetWindowPosを呼び出せるようにすることです。

于 2010-02-02T19:38:26.227 に答える