0

我想在全局函数中使用 Setwindowpos() 来更改一个对话框的位置。所以我编码如下

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 并期望找到包含它的窗口(它根本不起作用,您将返回一个空的 CWnd* 指针)。

pMain 指向什么?主应用程序窗口?那是对话框的父母吗?

您在代码中的哪个位置创建要移动的对话框?那时你必须有一个有效的 CWnd 派生对象吗?一种解决方案是将其保留为成员变量,以允许您稍后在必要时对其调用 SetWindowPos。

于 2010-02-02T19:38:26.227 回答