Von Konsolenanwendung auf Dialog zugreifen



  • Guten Morgen Community,

    habe folgendes Problem. Habe eine Konsolenanwendung, welche einen Dialog öffnet.
    In dem Dialog wird nun ein Button vom User gedrückt, der bei einem Static Text im Dialog die Schriftgröße etc. ändert.
    Den Messagehandler des Dialogs habe ich in mein Konsolendokument eingebaut.
    Nun ist bei der Übergabe das Handle des Dialogs aber immer NULL.

    Hier ist mein Code:

    Öffnen des Dialogs in Konsolenanwendung.cpp
    ---------------------------------------------

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>Fehler Funktion</summary>
    void FehlerAnzeige()
    {
    	/// <remarks>Folgende Funktionen werden ausgefuehrt:<list type="bullet">
    	/// <item><description>
    	/// Variablen und Objekte anlegen</description></item>
    	CString strTmp="";
        HWND hwnd = NULL; 
    	CError Error;
    
    	/// <item><description>
    	/// Werte uebergeben</description></item>
    	for(int i=0; i!=51; i++) 
    	{ 
    		Error.FehlerArray[i].iSchwelle = FehlerArray[i].iSchwelle;
    	}
    
    	/// <item><description>
    	/// Dialog oeffnen</description></item>
    	hwnd = CreateDialog(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG_ERROR), NULL, (DLGPROC) DialogProc); 
    	ShowWindow(hwnd, SW_SHOW); 
    
    	/// <item><description>
    	/// Fenster verschieben</description></item>
    	MoveWindow(hwnd,200,200,548,540,1);
    
    	/// </list>
    	/// <returns>Rueckgabewert Typ: void, Bedeutung: Keine Bedeutung</returns>
    	/// </remarks>
    }
    

    Message Handler für Dialog in Konsolenanwendung.cpp
    ----------------------------------------------------

    BOOL CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) 
    { 
    	CError* Error;
    	Error = new CError();
    
     switch (uMsg) 
     { 
     case WM_INITDIALOG: 
    	EnableWindow(hwnd, TRUE); 
    	return true;
      break; 
    
      case WM_COMMAND: 
    	switch (LOWORD(wParam)) 
    	  { 
    	  case IDOK: 
    	   { 
    		EndDialog(hwnd, wParam); 
    		PostQuitMessage(0); 
    		return true; 
    	   } 
    	   break; 
    	  case IDCANCEL: 
    	   { 
    		EndDialog(hwnd, wParam); 
    		PostQuitMessage(0); 
    		return true; 
    	   } 
    	   break; 
    	    case ID_VERZEICHNIS: 
    	   { 
    		    LOGFONT lF;
    			CFont m_Font7;
    			lF.lfCharSet	 = DEFAULT_CHARSET;
    			lF.lfHeight      = 60;			// Zeichenhöhe
    			lF.lfWidth       = 0;			// Zeichenbreite
    			lF.lfWeight      = FW_BOLD;		// Normal / Fett
    			lF.lfItalic      = FALSE;		// Normal / Kursiv
    			lF.lfUnderline   = FALSE;		// Normal / Unterstrichen
    			lF.lfStrikeOut   = FALSE;		// Normal / Durchgestrichen
    			lF.lfEscapement  = 0;			// Schreibrichtung i  1/10 Grad gegen Uhrzeigersinn
    			lF.lfOrientation = 0;			// Orientierung einzelner Zeichen bezüglich Schreibrichtung
    			lF.lfCharSet	 = ANSI_CHARSET;
    
    			m_Font7.DeleteObject();
    			m_Font7.CreateFontIndirect(&lF);
    
    			Error->m_ctlUeberschrift.SetFont(&m_Font7, FALSE);
    			Error->m_ctlUeberschrift.UpdateWindow();
    
    		return true; 
    	   } 
    	   break; 
    	 } 
       break;
     } 
     return false; 
    }
    

    In Zeile 48 + 49 in der Messagehandler Funktion passiert der Fehler, da der Zeiger "Error" NULL ist.

    Kann mir jemand sagen was ich falsch mache ?

    Vielen Dank,
    Gruß pmb


  • Mod

    Was bitte ist error?

    Wieso wird das Ding jedesmal erzeugt wenn es eine Nachricht gibt, wenn es ein Window sein sollte ist das ja absolut Banane.

    Was sucht ein Dialog in einer Konsolenanwendung?
    Eine Messageloop kannst Du leichter haben indem Du einen modalen Dialog startest.


Log in to reply