Cwnd回归未定义的价值

时间:2010-01-28 05:13:04

标签: mfc dialog handle

我想在全局函数中使用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.So在两种情况下SetWindowPos都显示断言错误。 如何在Global函数中获得对话框的句柄?

1 个答案:

答案 0 :(得分:0)

好的,所以我正在思考这个问题 - 然后我发现IDD_TOOLBAR_​​DIALOG几乎肯定是对话框本身的资源ID,而不是对话框的控件。你不能调用引用Dialog资源ID的GetDlgItem,并期望找到包含它的窗口(它根本不起作用,你将得到一个空的CWnd *指针)。

pMain指出的是什么?主要应用窗口?这是Dialog的父级吗?

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

相关问题