Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Selbstdefinierte Fensterklasse für Dialog aus RC-Script

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 29.12.2007, 15:56    Titel: Selbstdefinierte Fensterklasse für Dialog aus RC-Script Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.12.2007, 13:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 30.12.2007, 23:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 31.12.2007, 12:06    Titel: Antworten mit Zitat

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. zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 04.01.2008, 16:19    Titel: Antworten mit Zitat

modal:
Thanks zwinkern 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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 04.01.2008, 19:09    Titel: Antworten mit Zitat

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. Daumen rauf!
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 05.01.2008, 00:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz