Seltsame ASSERT anweisung in mfc100ud.dll!CWnd::Attach(HWND__ *)



  • BOOL CWnd::Attach(HWND hWndNew)
    {
    	ASSERT(m_hWnd == NULL);     // only attach once, detach on destroy
    

    wird aufgerufen von

    BOOL CWnd::SubclassWindow(HWND hWnd)
    {
    	if (!Attach(hWnd))
    		return FALSE;
    

    welches wiederrum ein hWnd!=NULL bekommt:

    BOOL CWnd::SubclassDlgItem(UINT nID, CWnd* pParent)
    {
    	ASSERT(pParent != NULL);
    	ASSERT(::IsWindow(pParent->m_hWnd));
    
    	// check for normal dialog control first
    	HWND hWndControl = ::GetDlgItem(pParent->m_hWnd, nID);
    	if (hWndControl != NULL)
    		return SubclassWindow(hWndControl);
    

    alles in wincore.cpp und daher nicht änderbar!

    was ist der sinn dahinter?
    welchen fehler hat ein programm das diesen ASSERT mit diesem call-stack auslöst?


  • Mod

    Das ist nicht seltsam. Das ist alleine Dein Bier und Dein Fehler!

    Du hast einem CWnd Objekt bereits ein Fenster zugeweisen. Zweimal ist nicht erlaubt.
    Geh mal im Callstack zurück auf Deinen Code und Du wirst sehen, dass diesem fenster ein m_hWnd bereots zugewiesen ist.


Log in to reply