Probleme beim erstellen von Buttons
-
// // // #include <windows.h> /* Callback Deklarieren */ LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); /* Klassen Name */ char szClassName[ ] = "WindowsApp"; /* Ähnlich int Main() bei Konsole */ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; /* Handle zum Fenster */ MSG messages; /* Nachrichten an das Fenster */ WNDCLASSEX wincl; /* Daten Struktur für Die Fensterklasse */ int button; /* Fenster struktur */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* Hier wird das Callback angegeben */ wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof(WNDCLASSEX); wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* Kein Menü */ wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH); /* Registriert die Klasse */ if(!RegisterClassEx(&wincl)) return 0; /* Fenster erstellen */ hwnd = CreateWindowEx( 0, szClassName, /* Klassenname */ "Mein Fenster", /* TitelText */ WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, /* Breite */ 375, /* Höhe */ HWND_DESKTOP, /* Child Fenster vom Desktop */ NULL, /* Keine Menu */ hThisInstance, NULL ); button = CreateWindowEx( 0, "Button", "Button", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hwnd, <<<<<<<<<<<<< HIER IST DER FEHLER NULL, 0, NULL ); /* Fenster wird angezeigt*/ ShowWindow(hwnd, nFunsterStil); /* Hauptschleife */ while(GetMessage(&messages, NULL, 0, 0)) { /* Virtual Key in Nachricht umwandeln */ TranslateMessage(&messages); /* Nachricht an Callback senden */ DispatchMessage(&messages); } return messages.wParam; } /* Callback, aufgerufen von DispatchMessage */ LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); /* Beenden */ break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }So ich bin neu bei C++ und Winapi.. habe jetz mal ein Fenster erstellt und wollte ein Button draufmachen..dabei kommt dieser Error: *65 main.cpp
assignment to `int' from `HWND__ ' lacks a cast (Hab ihn im Code makiert)Was mach ich hier jetz falsch?
Bittö helft mir *flenn*P.S.: Benutze Dev-C++
-
probiers mal mit:
button = CreateWindow( "button", "Button (was auf dem button steht)", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hWnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);das [...]->hInstance ist wichtig!!!
CreateWindowEx kannst du in deinem fall auch gegen CreateWindow austauschen und den 1. Parameter weglassen.
-
ItsNotYou schrieb:
probiers mal mit:
button = CreateWindow( "button", "Button (was auf dem button steht)", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hWnd, NULL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);das [...]->hInstance ist wichtig!!!
CreateWindowEx kannst du in deinem fall auch gegen CreateWindow austauschen und den 1. Parameter weglassen.Jo jetz sagt er mir, dass lParam undekliniert is, wie muss ich den den deklinieren und wo? LPARAM lParam oder wie?
Danke
-
ich würde buttons in der WindowProcedure einsetzen...
Guck mal unter http://www.win-api.de/tutorials.php?tutid=15.
-
ItsNotYou schrieb:
ich würde buttons in der WindowProcedure einsetzen...
Guck mal unter http://www.win-api.de/tutorials.php?tutid=15.
Jo jetz klappts, aber was passiert hier: ((LPCREATESTRUCT) lParam) -> hInstance?
-
leo1991 schrieb:
was passiert hier: ((LPCREATESTRUCT) lParam) -> hInstance?
Da holst du dir das Instanz-Handle deiner Anwendung ( = hThisInstance aus WinMain) .
Du könntest auch in WinMain hThisInstance in eine globale Variable kopieren, aber die sparst du dir eben über ((LPCREATESTRUCT)lParam)->hInstance
-
flenders schrieb:
leo1991 schrieb:
was passiert hier: ((LPCREATESTRUCT) lParam) -> hInstance?
Da holst du dir das Instanz-Handle deiner Anwendung ( = hThisInstance aus WinMain) .
Du könntest auch in WinMain hThisInstance in eine globale Variable kopieren, aber die sparst du dir eben über ((LPCREATESTRUCT)lParam)->hInstance
Hm und was macht -> dabei?
-
lParam ist ein Pointer. Da du weißt, dass er auf ein CREATESTRUCT zeigt castest du dorthin. Da es aber ein Pointer ist brauchst du den -> Operator (und nicht den .) um auf die einzelnen Member der Struktur zuzugreifen

-
flenders schrieb:
lParam ist ein Pointer. Da du weißt, dass er auf ein CREATESTRUCT zeigt castest du dorthin. Da es aber ein Pointer ist brauchst du den -> Operator (und nicht den .) um auf die einzelnen Member der Struktur zuzugreifen

Achso ^^
Wusste nich dass das in C++ so geht
Doch wie könnte ich dass mit Buttons in Proceduren fassen?
-
leo1991 schrieb:
Wusste nich dass das in C++ so geht

Struct und Pointer gibt es doch auch in C, oder bin ich gerade völlig daneben

leo1991 schrieb:
Doch wie könnte ich dass mit Buttons in Proceduren fassen?
Was genau meinst du damit?
-
flenders schrieb:
leo1991 schrieb:
Wusste nich dass das in C++ so geht

Struct und Pointer gibt es doch auch in C, oder bin ich gerade völlig daneben

Bin von (Pure) Basic auf C++ umgestiegen, da ging das mit Structuren und Pointern andersleo1991 schrieb:
Doch wie könnte ich dass mit Buttons in Proceduren fassen?
Was genau meinst du damit?
Naja so in der Art CreateButton..aber ich glaub ich hab da schon ne idee..
-
Ich hätte gedacht der Compiler hätte das angemeckert:
button = CreateWindowEx(...
weil du button mit "int button;" definiert hast und nicht mit "HWND button;"...