[C++ WINAPI] Dialog "unsichtbar" -Hilfe?!

Hallo!

Falls du mit "Falsch" meinst, dass ich das MAKEINTRESOURCE-Macro nicht genutzt habe, liegst du leider falsch. Denn AddEntry ist bei mir keine woanders definierte Integer-ID, sondern einfach eine direkt im RC Script definierte String-ID.
Falls eine String-ID genutzt wird kann diese einfach direkt im Quellcode verwendet werden.
Die Buttons des Dialogs werden ja auch wie mehrfach erwähnt dargestellt. Wenn der Aufruf falsch wäre, dürfte ja eigentlich garnichts vom Dialog angezeigt werden - jedoch scheinen die Steuerelemente ja richtig erkjannt zu werden.

Greetz...
 
Dann mal die Härteprobe:

Starte den Spy++ (ist bei Visual Studio mitinstalliert), starte dein Programm und suche das Fenster. Der Dialog muss ja da sein. Wenn du ihn gefunden hast, sieh dir die Styles und das Rect an. Da müsste dann ja zu sehen sein, was da nicht passt.


Eine völlig andere Möglichkeit wäre noch, dass du irgendwo anders alle möglichen Resource-Handles verbraucht hast (bzw. nicht sauber freigegeben hast) und dann der Dialog so kaputt angezeigt wird. Läuft da noch etwas anderes drumrum?
 
Hallo!
Auf die Idee Spy++ zu nutzen bin ich noch garnicht gekommen. Habe mir jetzt mal sämtliche Styles angesehen. Mit den meisten kann ich garnichts anfangen, die sind ja scheinbar vordefiniert gewesen. Also poste ich sie einmal:
Code:
Window-Styles:

WS_CAPTION
WS_VISIBLE
WS_CLIPSIBLINGS
WS_SYSMENU
WS_THICKFRAME
WS_MINIMIZEBOX
WS_MAXIMIZEBOX
DS_3DLOOK
DS_SETFONT

Extended Styles:

WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
WS_EX_WINDOWEDGE
WS_EX_CONTROLPARENT

Wenn ich den Dialog mit dem Finder-Tool anvisiere, wird der Rahmen auch gezeichnet bzw. der eigentliche Dialogumriss fett umrandet.
Aber als ich den Dialog nach einem Neustart des Programms ein zweites mal anvisieren wollte kam die Meldung "Ungültiger Fensterhandle".

Die einzigen Resourcen die ich nutze, sind einmal mein Menü, welches ich über WNDCLASSEX gleich integriere, und dieser Dialog. Ich muss doch in diesem Fall keine Handles definieren bzw freigeben, oder?

Hoffe die Angaben helfen mir zu helfen,

Greetz...
 
Ich habe jetzt zwar nicht den ganzen Thread gelesen, doch das Problem ist eigentlich denkbar einfach.

Deine Callbackfunktion gibt nämlich nur ein einziges mal einen Wert zurück und zwar dann, wenn die Nachricht WM_INITDIALOG gesendet wird.

Dein zweites "return FALSE" am Ende befindet sich immer noch in der switschanweisung und wird IMMER auf Grund des "break;"s ausgelassen.

Verschiebe dieses return FALSE "eine klammer weiter", dann sollte das funktionieren.

EDIT:
Also ich rede hier von deiner äußeren Switchanweisung, welche die Nachrichten prüft.

Du hast:
Code:
BOOL blabla[...]
{
     switch(msg)
     {
          [...]

          break;

          return FALSE;
     }
}

Richtig wäre:
Code:
BOOL blabla[...]
{
     switch(msg)
     {
          [...]

          break;

     }   
  return FALSE;
}
 
Zuletzt bearbeitet:
*aufstirnklatsch* - so offensichtlich.

Hat der Compiler da nicht gemeckert oder zumindest eine Warnung ausgespuckt? Die Warnungen machen Sinn und sollten grundsätzlich beachtet bzw. bearbeitet werden!
 
Hallo!

Super-vielen Dank für deinen Hinweis. Jetzt funktionierts - ich bin auch ein Dödel. Was die Klammersetzung doch alles bewirkt :) .

Das Problem ist jetzt jedenfalls behoben. Ich danke allen, die sich bemüht haben, mir zu helfen.

Greetz,

RaDaZoNG
 
Zurück