Wm_create

Nabi

Erfahrenes Mitglied
Hi , Ich habe ein Test gemacht um die WM_CREATE zu Testen , Ich habe bisher alle
Windows ohne WM_CREATE erzeugt nun wollte ich erfahren wie und was von Vorteile
kann diese Nachricht bringen?

Ein Child window habe ich durch Tastendruck erzeugt z.b VK_RIGHT so:

Code:
case VK_RIGHT:
{
EditWnd = CreateWindowEx (NULL,"BUTTON","",WS_POPUP| WS_DLGFRAME | WS_VISIBLE |BS_PUSHLIKE|BS_VCENTER
,50,50,100,100,hWnd,NULL,hInstance,NULL);
SetWindowText(EditWnd,"START");
      return 0;
   break;
}
Die Funktion SetWindowText schreibt den Text im Window nachdem das Fenster EditWnd erzeugt ist , bisher ist ok.

dann wollte ich wissen ob diese Funktion , ich meine "SetWindowText(EditWnd,"START");" gerufen wird wenn ich ihn in WM_CREATE schreibe , also habe ich
in WM_CREATE so geschrieben:
Code:
case WM_CREATE:
        {

SetWindowText(EditWnd,"START");
        }

Die Funktion befindet sich nun in WM_CREATE und nicht nach EditWnd = Creat..

das Resultat : NICHT funktioniert , die Frage ist Wieso ? ich dachte WM_CREATE
Tut was wenn ein neue Window erzeugt ist ?
 
Zuletzt bearbeitet:
Code unter WM_CREATE wird ausgeführt, bevor die die Create()-Funktion vollständig abgearbeitet wurde. Deine Textänderung wird also von der Create()-Funktion wieder überschrieben. Um an der Stelle was zu ändern, müsstest du die Struktur CREATESTRUCT anpassen, die als Parameter bei der WM_CREATE-Nachricht übergeben wird:
C++:
case WM_CREATE:
    CREATESTRUCT *pCS = (CREATESTRUCT *)lParam;
    pCS->lpszName = "START";
Ansonsten kann man hier Initialisierungen vornehmen, bevor das Fenster angezeigt wird; das müssen nicht unbedingt immer Änderungen der Fenstereigenschaften sein.

Gruß
MCoder
 
Zurück