Titel des standard Fenstergrundgerüst von VC++ 2010 Express
-
Moin moin,
ich arbeite mich momentan in die Windowsprogrammierung. Bräuchte aber hilfe zu den ein oder anderen Fragen, die sich da auftun ;).
Falls Hilfsbereitschaft bei einigen Forum-user aufkommen sollte, würde ich mich über Antworten freuen.
Momentan grübel ich über den Titel meines Programms. Woher kommt der Wert?
#define MAX_LOADSTRING 100 // Globale Variablen: HINSTANCE hInst; // Aktuelle Instanz TCHAR szTitle[MAX_LOADSTRING]; // Titelleistentext TCHAR szWindowClass[MAX_LOADSTRING]; // Klassenname des Hauptfensters
Da wird schonmal unserer Variable deklariert indem der Titel vorhanden sein sollte mit einem max Wert von 100. Soweit sogut.
// Globale Zeichenfolgen initialisieren LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_STDWND, szWindowClass, MAX_LOADSTRING);
Hier wird der Titel initialisiert - hööö
Wird da der Wert übergeben?Beschreibung von Loadstring
int WINAPI LoadString( __in_opt HINSTANCE hInstance, __in UINT uID, //The identifier of the string to be loaded. __out LPTSTR lpBuffer, //The buffer is to receive the string. __in int nBufferMax );
Bedeutet also unser Wert liegt in IDS_APP_TITLE und wird szTitle übergeben.
Okay, soweit so gut.Doch schau ich in die Resource.h hab ich die Line
#define IDS_APP_TITLE 103
Bedeutet das jetzt, dass der Wert 103 in unsere TCHAR Variable szTitle übergeben wird und der mir daraus meinen Titel macht?
Aber wie?
Wenn ich das Standard Gerüst kompiliere steht im Titel der Name meines Projekts.Zum Schluss ein kleiner hilfe aufruf zu "HACCEL".
Ich habe durch die MSDN versucht schlau aus dem Accelerators zu werden, ohne erfolg.Wozu genau ist dieser Code
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_STDWND)); while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
Das die while-Schleife zum Abruf der "Nachrichten" von Windows ist, ist mir soweit verständlich. Doch wozu die extra Verzweigung?
MFG
Zacky
-
Bedeutet das jetzt, dass der Wert 103 in unsere TCHAR Variable szTitle übergeben wird und der mir daraus meinen Titel macht?
Aber wie?Sher stark vereinfacht ja. Praktisch gesehen hast du noch eine Resourcen-Datei, in der z.B. das Programm-Icon oder das Asussehen der Dialogfenster untergebracht ist. Dort steht auch drin, welcher Text sich hinter der Kennung IDS_APP_TITLE verbirgt.
-
hmmm ...
ich seh folgende Dateien:Projektmappen-Explorer
http://img804.imageshack.us/img804/5787/resourcedatei.jpgSehr kool, es steht in der .rc datei!
Hab sie grade mal mit nem Editor geöffnet und siehe da:///////////////////////////////////////////////////////////////////////////// // // Zeichenfolgentabelle // STRINGTABLE BEGIN IDC_STDWND "STDWND" IDS_APP_TITLE "stdwnd" END #endif /////////////////////////////////////////////////////////////////////////////
Meine Güte, das aber mal alles verschachtelt und versteckt.
Danke für die Antwort.
-
So, da mir durch dieses Resourcenskript einiges klarer geworden ist, hat anscheinend dieses Makro "MAKEINTRESOURCE()" etwas mit der Resourcenübergabe zu tun.
Wodurch der Accelerator ein bisschen verständlicher wird.
Ist schon sehr skuril, dass bei einem Standardfenstergerüst soviele umständliche funktionen für einfache Werteübergabe benutzt wird.
Als ob die Windowsprogrammierung, einem Anfänger nicht schon genug probleme bereiten würde.
Irgendwie fühle ich mich hier schon richtig wohl.
Zacky
-
Du musst aber nicht mit sowas rumfrickeln. Benenne den Dialog im Form Editor und fertig. Oder per CreateWindow...