(標題更新) 孩子this問題繼,現在我有一個更清晰的畫面是怎麼回事...在MFC應用程序沒有主窗口中創建多個對話,他們也成爲彼此
我有沒有主窗口的MFC應用程序,它暴露了一個API來創建對話框。當我反覆調用這些方法中的一些時,創建的對話框會彼此相關,而不是所有的對象都被授予桌面......我不知道爲什麼。
但無論如何,即使在創建後,我無法將父母更改回NULL或CWnd :: GetDesktopWindow()...如果我調用SetParent,然後調用GetParent,則沒有任何更改。
因此,除了真正奇怪的問題,爲什麼Windows將每個對話框神奇地養育到最後一個創建的對話框,是否有任何我能夠將這些窗口設置爲桌面的子項?
修訂:我已經找到了原因這一切,但不是解決辦法。
BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
void* lpDialogInit, HINSTANCE hInst)
{
ASSERT(lpDialogTemplate != NULL);
if (pParentWnd == NULL)
pParentWnd = AfxGetMainWnd();
m_lpDialogInit = lpDialogInit;
return CreateDlgIndirect(lpDialogTemplate, pParentWnd, hInst);
}
注:從我的對話框的構造函數中,我們結束了if (pParentWnd == NULL)pParentWnd = AfxGetMainWnd();
從我的對話框構造函數的調用堆棧看起來是這樣的:
- mfc80d.dll! CDialog的:CreateIndirect(常量DLGTEMPLATE * lpDialogTemplate = 0x005931a8,CWnd的* pParentWnd = 00000000,無效* lpDialogInit = 00000000,HINSTANCE__ * HINST = 0x00400000)
- mfc80d.dll!CDialog的:CreateIndirect(void *的hDialogTemplate = 0x005931a8, *的CWnd = pParentWnd 00000000,HINSTANCE__ * HINST = 0x00400000)
- mfc80d.dll!CDialog的:創建(爲const char * lpszTemplateName = 0x0000009d,CWnd的* pParentWnd = 00000000)
- mfc80d.dll!CDialog的:創建(無符號int nIDTemplate = 157,CWnd * pParentWnd = 0x00000000)
- MyApp.exe!CMyDlg :: CMyDlg(CWnd * pParent = 0x00000000)
在調試器中運行,如果我手動將pParentWnd更改回CDialog :: CreateIndirect中的0,一切正常......但我怎樣才能阻止它發生在第一個地方?
對SetParent()的調用是否成功? – 2010-04-28 16:00:41
http://stackoverflow.com/questions/2729371/creating-multiple-mfc-dialogs-through-com-strange-behaviour – 2010-04-28 19:18:16
您可能已經複製了您的原始問題。請不要反覆提問相同的問題,請跟進您的原始線索。 – 2010-04-28 19:19:45