Problem mit Button-ID(#define ID_BIN_3 4002)
-
Hi, eine Frage ich möchte eine Klasse programmieren, die Windows Fenster + Steuerelemente erstellt.
Jedoch funktioniert folgendes nicht:HWND ::window ErstelleHauptfenster(HINSTANCE hInst)
Die Fehlermeldung dazu:
Name muss ein Klassen oder Namespace Name seinDanke im Voraus
-
Was soll der gezeigte Code darstellen?
-
theta schrieb:
Was soll der gezeigte Code darstellen?
Funktionsaufruf
//window.h #include<Windows.h> class window{ public: HWND ErstelleHauptfenster(HINSTANCE hInst); void ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInst); private: #define ID_BTN_1 4000 #define ID_BIN_2 4001 HWND h1; HWND h2; };
//window.cpp #include"window.h" HWND ::window ErstelleHauptfenster(HINSTANCE hInst) // Funktionscode
-
Wenn müsste es wohl so heißen:
HWND window::ErstelleHauptfenster(HINSTANCE hInst) { // Funktionscode
-
@C++Developer2000
Das sind grundlegendste Grundlagen.
Du solltest dir angewöhnen dir solche Dinge selbst zu ergoogeln.Ein starkes Google-Fu ist eine der wichtigsten Eigenschaften eines guten Programmierers. Und nebenbei macht es auch keinen guten Eindruck wenn du Fragen, die du dir so einfach selbst beantworten könntest, in einem Forum stellst.
Bzw. vielleicht wäre es auch besser wenn du nicht gleich drauflosprogrammierst, sondern erstmal die Grundlagen in Form eines Buches/Online-Kurses/... durchgehst.
-
Martin Richter schrieb:
Wenn müsste es wohl so heißen:
HWND window::ErstelleHauptfenster(HINSTANCE hInst) { // Funktionscode
Danke für die Antwort ich stand komplett neben mir, hab ne 2. Funktion wo ich es richtig gemacht habe
-
hustbaer schrieb:
@C++Developer2000
Das sind grundlegendste Grundlagen.
Du solltest dir angewöhnen dir solche Dinge selbst zu ergoogeln.Ein starkes Google-Fu ist eine der wichtigsten Eigenschaften eines guten Programmierers. Und nebenbei macht es auch keinen guten Eindruck wenn du Fragen, die du dir so einfach selbst beantworten könntest, in einem Forum stellst. Bzw. vielleicht wäre es auch besser wenn du nicht gleich drauflosprogrammierst, sondern erstmal die Grundlagen in Form eines Buches/Online-Kurses/... durchgehst.
Sry, versuche es nächstes Mal selbst zu lösen
Jetzt weiß ich was ich besser machen muss.
Habe Der C++ Programmierer als Buch
-
Hi, sry wenn ich euch zur Zeit nerve, aber ich krieg es einfach nicht ans Laufen.
Hab auch schon gegoogelt, aber es irgendwie nicht wirklich verstanden, also bitte eure Antwort immer mit Erklärung, hab auch versucht das ergoogelte abzuschreiben, aber ohne Verständnis wird es halt nix.//main.cpp #include<Windows.h> #include"window.h" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow) { HWND hWnd; // Fenster-Handle MSG message; // Nachricht window fenster; window steuerelemente; // Hauptfenster erstellen hWnd = fenster.ErstelleHauptfenster(hInst); // Prüfen, ob alles glatt ging if (hWnd == NULL) return (0); // Alle Steuerelemente erstellen steuerelemente.ErstelleSteuerelemente(hWnd, hInst); // while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } // Programm beenden return (int)(message.wParam); } // WinMain
//window.cpp #include"window.h" HWND window:: ErstelleHauptfenster(HINSTANCE hInst) { HWND hWnd; // Fenster-Handle WNDCLASSEX windowclass; // Nachricht // Der Klassenname des Fensters ist frei wählbar const char szClassName[] = "123"; // Struktur mit gewünschten Eigenschaften füllen // // Größe der Struktur zwischenspeichern windowclass.cbSize = sizeof (WNDCLASSEX); // Fenster soll beim Verschieben neu gezeichnet werdenT windowclass.style = CS_HREDRAW | CS_VREDRAW; // Zeiger auf Callback-Funktion windowclass.lpfnWndProc = WindowProc; // Keine erweiterten Einstellungen windowclass.cbClsExtra = 0; windowclass.cbWndExtra = 0; // Instanz speichern windowclass.hInstance = hInst; // Icons und Cursor festlegen windowclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); windowclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); windowclass.hCursor = LoadCursor(NULL, IDC_ARROW); // Hintergrundfarbe festlegen windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1; // Ein Menü brauchen wir nicht windowclass.lpszMenuName = NULL; // Klassenname angeben windowclass.lpszClassName = szClassName; // Fensterklasse registrieren if (!RegisterClassEx(&windowclass)) return (NULL); // Das Fenster erzeugen hWnd = CreateWindowEx(NULL, szClassName, "übung", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 135, NULL, NULL, hInst, NULL); // Fensterhandle zurückgeben return (hWnd); } // ErstelleHauptfenster void window::ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInst) { // Statischen Text als Child-Fenster erstellen // h1 = CreateWindow("STATIC", "Übung", WS_VISIBLE | WS_CHILD | ES_CENTER, 0, 0, 300, 20, hWnd, (HMENU)ID_BIN_2, hInst, NULL); // "Übernehmen"-Button als Child-Fenster erstellen // h2 = CreateWindow("BUTTON", "Test", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, 20, 50, 95, 40, hWnd, (HMENU)ID_BTN_1, hInst, NULL); } LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { // Messages auswerten switch (message) { // Fenster schließen? (Auch Alt-F4) case WM_DESTROY: { // Nachricht zum Beenden schicken PostQuitMessage(0); return (0); } // Ab hier die Nachrichten unserer Child-Fenster bearbeiten case WM_COMMAND: { switch (wParam) { case ID_BTN_1: { } } break; } break; } // Die Nachricht wurde nicht von uns verarbeitet, also // von Windows verarbeiten lassen return (DefWindowProc(hWnd, message, wParam, lParam)); } // WindowProc
//window.h #include<Windows.h> class window{ public: HWND ErstelleHauptfenster(HINSTANCE hInst); void ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInst); LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); private: #define ID_BTN_1 4000 #define ID_BIN_2 4001 HWND h1; HWND h2; };
Danke für Antworten, Hilfestellungen jeder Art.
-
1. WindowProc darf nicht in der Klassendefinition stehen; Compiler gibt doch Fehlerhinweis, oder ?
2. statt
const char szClassName[] = "123";
besser:
const TCHAR szClassName[] = TEXT("123");
... auch alle anderen Texte mit TEXT() definieren
Code getestet, läuft dann so.
-
merano schrieb:
1. WindowProc darf nicht in der Klassendefinition stehen; Compiler gibt doch Fehlerhinweis, oder ?
Darf schon. Muss aber statisch sein!
-
merano schrieb:
1. WindowProc darf nicht in der Klassendefinition stehen; Compiler gibt doch Fehlerhinweis, oder ?
2. statt
const char szClassName[] = "123";
besser:
const TCHAR szClassName[] = TEXT("123");
... auch alle anderen Texte mit TEXT() definieren
Code getestet, läuft dann so.
Danke funktioniert jetzt
-
Noch eine Frage wenn ich eine dritte Steuerelemente ID erzeuge(#define ID_BIN_3 4002),in der klasse,dann findet er die die nicht in der window.cpp
Woran könnte das liegen
-
C++Developer2000 schrieb:
Noch eine Frage wenn ich eine dritte Steuerelemente ID erzeuge(#define ID_BIN_3 4002),in der klasse,dann findet er die die nicht in der window.cpp
Woran könnte das liegenWarum heissen die IDs eigentlich mal "ID_BTN" und mal "ID_BIN" ?
-
Fehlermeldung.
Wenn Du schon alles in der Klasse haben willst, dann verwende keine #defines. Deren Definition in einem Scope machen keinen Sinn.
Verwende const UINT Werte... oder static const UINT, was auch immer...
-
merano schrieb:
C++Developer2000 schrieb:
Noch eine Frage wenn ich eine dritte Steuerelemente ID erzeuge(#define ID_BIN_3 4002),in der klasse,dann findet er die die nicht in der window.cpp
Woran könnte das liegenWarum heissen die IDs eigentlich mal "ID_BTN" und mal "ID_BIN" ?
Hab drei Sachen gleichzeitig gemacht und dann kommt so was raus
-
Martin Richter schrieb:
Fehlermeldung.
Wenn Du schon alles in der Klasse haben willst, dann verwende keine #defines. Deren Definition in einem Scope machen keinen Sinn.
Verwende const UINT Werte... oder static const UINT, was auch immer...
Ok Danke für den Tipp