 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 29.12.2007, 15:56 Titel: Selbstdefinierte Fensterklasse für Dialog aus RC-Script |
|
|
Im FBEdit-Ressourcen-Editor kann einem Dialog eine Klasse zugewiesen werden. (Eintrag "Class" in der Property-Tabelle).
Hier habe ich den Wert "fooBar" eingegeben; entsprechend sieht auch das RC-File aus:
Code: | IDD_DLG1 DIALOGEX 6,6,194,106
CAPTION "IDD_DLG"
FONT 8,"MS Sans Serif",0,0
CLASS "foobar"
STYLE 0x10CF0000
BEGIN
END |
Noch vor dem Aufruf von DialogBoxParam erstelle ich im FB-Code eine Klasse:
Code: | Dim As WNDCLASS wcls
With wcls
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = @ProcMain
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = hInst
.hIcon = LoadIcon( NULL, IDI_APPLICATION )
.hCursor = LoadCursor( NULL, IDC_ARROW )
.hbrBackground = GetStockObject( WHITE_BRUSH )
.lpszMenuName = NULL
.lpszClassName = @"foobar"
end with
If( RegisterClass( @wcls ) = FALSE ) Then
MessageBox( NULL, "Failed to register wcls", "Error", MB_ICONERROR )
End If |
Der Rückgabewert von DialogBoxParam ist -1, ein Fehler ist aufgetreten, der Dialog wird nicht initialisiert:
Code: | DialogBoxParam ( _
hInst, _
Cast( LPCSTR, IDD_Dlg), _
NULL, _
@ProcMain, _
NULL _
) |
Fehler beim Aufruf an sich sind ausgeschlossen, da der Dialog normal angezeigt wird, wenn ich das Feld "Class" frei lasse.
Auf dem Dialog befinden sich (derzeit) keine Controlls.
Der Grund meiner Anstrengungen ist eigentlich, dem Hintergrund des Dialogfensters eine bestimmte Farbe zu geben; aber über SetClassLong habe ich bis jetzt den WHITE_BRUSH nicht installieren können.
Danke im Voraus!
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 30.12.2007, 13:44 Titel: |
|
|
Das ist eine ziemlich confuse Fragestellung. Was hat Deine wcls mit der Dialogbox zu tun? Wird das wcls-Fenster richtig angezeigt?
Dialoge ruft man gewöhnlich mit "DailogBox" (modal) oder "CreateDialog" (nicht modal) auf. Macht allerdings keinen Sinn, wenn der Dialog keine Controls enthält.
Vielleicht solltest Du mal den ganzen Code posten, anstatt nur Bruchstücke. Die Kristallkugel-Methode funktioniert nicht immer. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 30.12.2007, 23:37 Titel: |
|
|
Ok... der gesamte Code wird per Edit nachgereicht, bin gerade ein wenig zwischen den Stühlen...
Anyway, die Frage ein wenig komprimierter ausgedrückt:
Ich habe in einer Resourcen-Datei einen Dialog erststellt.
In einem BAS-Code wurde die wcls definiert.
Ich möchte nun, dass sich der Dialog aus der rc verhält, wie ein Fenster der Klasse wcls.
By the way:
Ich kenne die Begriffe modal/nicht modal in diesem Zusammenhang nicht; könntest du mir die beiden bitte erklären? Danke.
... waiting for Edit....
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 31.12.2007, 12:06 Titel: |
|
|
Verstehe ich das richtig- Du willst ein Programm ohne Hauptfenster, nur dialogbasiert? Oder willst Du einen Dialog, der die Funktionen des Haupfensters übernimmt?
Im ersten Fall such mal auf http://www.winapi.net/index.php?inhalt=s8
Im zweiten Fall kannst Du u. U. als Dialogfunktion deine ProcMain (Fensterfunktion des Hauptfensters) einsetzen. Weiß aber nicht, ob das Sinn macht. Denn der Dialog müßte aus dem Hauptfenster erstmal aufgerufen werden und würde sich beim initialisieren dann immer wieder selbst rekursiv aufrufen, bis zum Erbrechen- meinte: bis zum Stapelüberlauf.
Modal/ nicht modal: Sollte man eigentlich wissen, wenn man mit Dialogen herumhantiert.
Ein modaler Dialog blockiert das Hauptprogramm, bis der Dialog beendet wird (einfachstes Beispiel: Die MessageBox). Ein nicht-modaler (oder auch "modusloser") Dialog kann nebenher weiterlaufen, während das Hauptprogramm bedient wird. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 04.01.2008, 16:19 Titel: |
|
|
modal:
Thanks Ja, ich dachte mir schon fast, dass das eigentlich ne Grundvokabel sein muss.
Anyway:
Ja, ich benutze die erste Variante; das Programm soll rein dialogbasiert sein. Der von dir gepostete Code stellt dabei die C/C++-Variante dessen dar, was bei mir als BAS-Code schon steht.
Leider geht aus diesem Beispiel der Aufbau des RC-Files nicht hervor; ich weiß immer noch nicht, wie ich festlegen kann, dass sich der Dialog verhalten soll, wie von einer bestimmten Klasse, die ich im BAS-Code erst definiere.
Anyway, ich wollte die Klasse sowiso nur dazu festlegen, um meinem Dialog einen bestimmten Brush für den Hintergrund zuzuweisen. Um das umzusetzen habe ich auf der von dir geposteten Seite einen viel praktischeren Weg gefunden (siehe http://www.winapi.net/index.php?inhalt=s13 ).
Danke für die Url!
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 04.01.2008, 19:09 Titel: |
|
|
Zitat: | Leider geht aus diesem Beispiel der Aufbau des RC-Files nicht hervor; |
Doch: Normalerweise, wenn der Dialog weitere Steuerelemente enthält, werden diese unter WM_INITDIALOG initialisiert. Da in dem Beispieleinfach nur "Return true" zurückgegeben wird, bleibt es bei einem leeren Dialogfenster.
Hier ein Beispiel, bei dem man vom Code auf die RCs zurückschließen kann (ist natürlich ein bißchen Denkarbeit, aber die RC-Datei steht ja auch drin):
http://pronix.linuxdelta.de/C/win32/win32_5.shtml
Dialogen kannst Du nur vorgegebene Klassen oder "Ownerdraw" zuweisen. Selbst erstellte Fensterklassen müssen im Hauptprogramm unter WinMain implementiert werden. Da aber jeder Dialog eine DialogProc bekommt, kannst Du die natürlich so schreiben, als wäre es ein Klassenfenster.
Es wäre ein bißchen leichter gewesen, wenn Du geschrieben hättest, welches verhalten genau Du Dir wünscht.
Noja, Du hast es ja gefunden.  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 05.01.2008, 00:47 Titel: |
|
|
Ich dachte eigentlich, ich hätte im Start-Thread schon geschrieben, was ich wollte. Nur eben anscheinend zu undeutlich:
Dusky_Joe hat Folgendes geschrieben: | Der Grund meiner Anstrengungen ist eigentlich, dem Hintergrund des Dialogfensters eine bestimmte Farbe zu geben; aber über SetClassLong habe ich bis jetzt den WHITE_BRUSH nicht installieren können. |
Aber lassen wir das einfach - obwohl am Anfang ein bisschen aneinander vorbei geredet wurde, haben wir ja unseren gemeinsamen Nenner gefunden.
Danke für die Hilfe!
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|