[Fensterklassen] Fenster wird nicht erzeugt.

Surma

Erfahrenes Mitglied
Es geht weiter mit meinem Editor, der Pluginfaehig ist (Siehe hier)

Ich erzeuge wie folgt waehrend der Laufzeit eine Fensterklasse:
Code:
PROCEDURE TPlugin.CreateWndClass ;
VAR
  wc : TWndClass ;
BEGIN
  IF NOT GetClassInfo (hInstance, pchar('PluginClass'), wc) THEN BEGIN
    wc.style := CS_HREDRAW OR CS_VREDRAW ;
    wc.lpfnWndProc := @TPlugin.WndProc ;
    wc.cbClsExtra := 0 ;
    wc.cbWndExtra := 0 ;
    wc.hInstance := hInstance ;
    wc.hIcon := LoadIcon(0, IDI_APPLICATION) ;
    wc.hCursor := LoadCursor(0, IDC_ARROW) ;
    wc.hbrBackground := COLOR_WINDOW ;
    wc.lpszMenuName := NIL ;
    wc.lpszClassName := 'PluginClass' ;
    IF RegisterClass (wc) = 0 THEN MessageBox (hParent, 'Plugin-Fensterklasse konnte nicht erzeugt werden.', 'Programmers Editor', 0) ;
  END ;
END ;

DIese FUnktion wird definitiv aufgerufen und gibt keine Fehlermeldung aus (stuerzt auch nicht ab, o. ae. :-) )

Nun moechte ich mein Fenster fuer das Plugin erzeugen:
Code:
PluginWnd := CreateWindow ('PluginClass', 'PluginWnd', WS_OVERLAPPEDWINDOW OR WS_VISIBLE, 0, 0, 300, 300, hParent, 0, 0, NIL) ;
            IF PluginWnd = 0 THEN MessageBox (0, 'Fehler', 'asd', 0) ;
            SetWindowLong (PluginWnd, GWL_WndProc, Cardinal(GetProcAddress (PluginFile, 'WndProc'))) ;

Kann mir jemand sagen, warum das Fenster weder visuell noch in Bits und Bytes erzeugt wird?

MfG
Crock
 
Wird das Fenster tatsächlich nicht erzeugt? Welchen Wert gibt CreateWindow() zurück? Das ist entscheidend. Es ist ein großer Unterschied, ob das Fenster nicht erzeugt wird oder nur nicht angezeigt wird.

Dass das Fenster nicht angezeigt wird, halte ich bei deinem Code für recht verständlich, da ich dort keinen Aufruf von ShowWindow() und UpdateWindow() sehe.

Gawayn
 
ShowWIndow und UpdateWindow muss nur fuer das Hauptfenster benutzt werden.
Ausserdem:
Benutze ich die Fensterklasse meines Hauptfensters, so wird das Fenster problemlos angezeigt.
Nur dann gibt es Nachrichtenprobleme, da die Nachricht WM_CREATE dann an meine Hauptnachrichtenschleife kommt, und allen moeglich quatsch nochmal auf das Pluginfenster anwendet.

GetLastError gibt 0 (ERROR_SUCCESS) zurueck.
Das Fensterhandle ist = 0 (also gibt CreateWindow 0 zurueck). Fenster wird also nicht erzeugt. (weder visuell noch im Speicher)
Deswegen bin ich ja am verzweifeln.
 
Zuletzt bearbeitet:
Zurück