2010-11-30 9 views
0

auf this Website unter dem „Edit Control“ title gibt es ein paar Zeilen Code wie folgt ..win32 Ressourcendatei Hilfe

case WM_CREATE: 
    hwndEdit = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 
       50, 50, 150, 20, hwnd, (HMENU) ID_EDIT, 
       NULL, NULL); 

    hwndButton = CreateWindow(
     TEXT("button"), TEXT("Set Title"),  
     WS_VISIBLE | WS_CHILD, 
     50, 100, 80, 25,   
     hwnd, (HMENU) ID_BUTTON, NULL, NULL);  

    break; 

Ich weiß, dass diese Methode zum Erstellen von Buttons und solche sind im laufenden Betrieb gemacht, aber ich habe mich gefragt, wie Sie es tun würden, ohne es so zu tun, stattdessen mit einer Ressource-Datei ?. In den Forgers Win32 tutorial zeigt, wie man ein Menü mit einer Ressource-Datei zu machen, und wie ein Dialogfeld usw. zu beschreiben, aber ich kann nicht scheinen, um Steuerelemente auf das Hauptfenster über eine Ressource-Datei ??.

zum Beispiel habe ich die folgende RC-Datei

#include "resource.h" 
ID_MENU MENU 
BEGIN 
    POPUP "&File" 
    BEGIN 
     MENUITEM "E&xit", ID_FILE_EXIT 
    END 
    POPUP "&About" 
    BEGIN 
     MENUITEM "&Information", ID_ABOUT_INFO 
    END 
END 

ID_ABOUT_INFO DIALOG DISCARDABLE 0,0,250,250 
CAPTION "Information" 
BEGIN 
    CTEXT "some text",ID_BLA,15,15,144,33 
END 

//this is all fine but how do I decribe the main window?, instead of the menu and dialog boxes?. 

Wie beschreibe ich das Hauptfenster statt Dinge on the fly zu schaffen ?. Gibt es eine Art Keyword?

Antwort

3

Sie können einen Dialog als Hauptfenster erstellen.

  1. Wenn Sie MFC in Visual Studio verwenden, erstellen Sie mit dem Projektassistenten eine Dialoganwendung.

    (Datei -> Neues Projekt -> Visual C++/MFC -> MFC-Anwendung -> OK -> Anwendungstyp -.> Dialog basiert)

    Die erzeugte Anwendung wird dann das Hauptdialogfeld für Sie erstellen, und Beenden, wenn es schließt.

    Ein einfaches Beispiel eines solchen Tieres, einschließlich Quelle, ist hier:

    http://www.pretentiousname.com/ICFRanger/index.html

  2. Wenn Sie gerade Win32 verwenden, können Sie den Dialog erstellen würde mit CreateDialogParam (oder ähnlich) und dann zeigen Es ist wie jedes andere Fenster und führt eine Nachrichtenschleife aus. (Oder Sie können DoModal verwenden, das eine eigene Meldungsschleife ausführt, aber beachten Sie, dass sich modale Dialoge vor allem beim Schließen etwas unterscheiden müssen.)

    Ein einfaches Beispiel dafür, einschließlich Quelle, ist hier:

    http://www.pretentiousname.com/setpoint_aon/index.html

(das sind die beiden Programme, die ich geschrieben habe, aber sehr einfache, so gibt es nicht viel in die Quere kommen zu verstehen, was sie tun.)

+0

Welcher Projektassistent? – Default

+0

Datei -> Neues Projekt -> Visual C++/MFC -> MFC-Anwendung -> OK -> Anwendungstyp -> Dialog basiert. –

+0

Richtig, das ist also, wenn Sil3nt Microsoft Visual Studio verwendet. Bist du sicher, dass er ist? Weil ich nichts von ihm finden kann, was bedeutet, dass er es tut. – Default

2

TheForger hat sein ganzes Beispiel hinzugefügt Code in einer Zip-Datei le, können Sie download them und überprüfen Sie es aus.

Sie müssen noch das Fenster schaffen, tut TheForger dies auch, aber dann er enthält die Symbole und Menüs in der WNDCLASSEX struct, die an das Fenster übergeben wird, die erstellt werden soll. Dies wird dann aus der Ressourcendatei (.rc-Datei) über die Datei resouce.h gesammelt.

MSDN hat einen Abschnitt über Ressource-Dateien als auch, und wie Sie

Ressourcen sehen können, können aus einem breiten Bereich von Elementen zusammengesetzt sein, Schnittstelle Elemente enthalten, die Informationen zu die Benutzern zur Verfügung stellen (für Beispiel eine Bitmap, Icon, oder Cursor); benutzerdefinierte Ressourcen, die Daten enthalten, die eine Anwendung benötigt; Versionsressourcen, die von Setup-APIs verwendet werden; und Menü und Dialogfeld Ressourcen.

Die Hauptfenster werden nicht erwähnt.

2

Berücksichtigen Sie auf API-Ebene Funktionen wie CreateDialog.

Es ist nicht komplizierter als das.

Obwohl ein Dialog als Hauptfenster einige Probleme hat, vor allem in MFC (die es speziell behandelt).

Beifall & hth.,

+0

+1, Obwohl dies auf einen Dialog beschränken wird. Werden sie nicht anders behandelt als Fenster, die von 'CreateWindow [Ex]' erstellt wurden? – Default

+1

@Default: Wenn Sie dies auf der API-Ebene tun, dann erhalten Sie eine Kopie von Petzolds "Programming Windows". Re unterschiedliche Handhabung hängt davon ab was du meinst. Auf der API-Ebene sind Dialoge einfach eine Art Fenster (Klasse), das * Sie * implementiert haben könnte, und Sie können die Standardfunktionalität beliebig überschreiben. –

+0

cool. Danke für den Tipp. Was ist die neueste Ausgabe? (books.google.com gab mir etwas von 1999) – Default

1

Sie können ein Fenster entwerfen, wie es ein Dialog war und steckte es in Ihrem resource .Dann die Findresource und Loadresource-Funktionen verwenden, um einen Zeiger auf eine DLGTEMPLATE zu erhalten, die die Dialoge enthält alle Layout, das Sie verwenden können, um Ihr eigenes Fenster zu bestimmen und Steuerelemente an den Positionen zu platzieren, die Sie im Dialog definiert haben (es ist jedoch nicht einfach, DLGTEMPLATE zu interpretieren). Vergessen Sie nicht, den Zeiger auf die DLGTEMPLATE freizugeben.

1

Verwenden Sie CreateWindow und die verschiedenen vordefinierten Klassen. Wenn Sie eine Schaltfläche erstellen würden, würden Sie die Klasse "BUTTON" verwenden, um den Stil WS_CHILD | WS_VISIBLE festzulegen und die Fensterprozedur auf NULL zu setzen.