2010-01-28 95 views
0

我想在全局函數中使用Setwindowpos()來更改一個對話框的位置。 所以我編碼像下面Cwnd返回未定義的值

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顯示斷言錯誤。 如何獲取全局函數中對話框的句柄?

+1

在調用這個全局函數之前,對話框對象是否已經構造好了?即你是否在OnInitDialog()之前或之後調用它? – Naveen 2010-01-28 05:30:10

+0

其實即時通訊使用該對話框中的WPF控件。對於該對話框中的一個按鈕,我減少了這個dailog的寬度。實際上,該按鈕是WPF按鈕。但我通過放置普通的MFC按鈕進行檢查。但在這種情況下,它也不會工作 – Anu 2010-01-28 05:36:54

+0

你實際上沒有回答@ naveen的問題。是pMain有效還是爲空?也許更多的代碼會幫助我們幫助你。 – Ruddy 2010-01-29 13:02:49

回答

0

好吧,我在想這個 - 然後它發生在我身上,IDD_TOOLBAR_​​DIALOG幾乎肯定是對話框本身的資源ID,而不是對話框上的控件。你不能調用引用Dialog資源ID的GetDlgItem,並期望找到包含它的窗口(它根本行不通,你將得到一個空的CWnd *指針)。

pMain指向什麼?主應用程序窗口?那是對話框的父母嗎?

在代碼中,您創建了想要移動的對話框?那時你必須有一個有效的CWnd派生的對象嗎?一種解決方案是將其作爲成員變量,以便在稍後需要時調用SetWindowPos。