Bildzittert & Backgroundfarbe ändern klappt nicht
-
[quote="CodeFinder"]
3.:
Weiterhin würde ich dir bei WM_COMMAND ein switch der Control IDs empfehlen...das kannst du dann auch ein Switch einbauen...ist übersichtlicher...so:

// ... case WM_COMMAND: switch(LOWORD(wParam)) { case BTN_BUTTON1: // ... break; // usw. } return 0; // weitere Nachrichten...Mir fällt gerade auf...das du die gar nicht festgelegt hast...also das geht entweder direkt bei CreateWindow(Ex):
in LWORD(wParam) steht die ID des jeweiligen Fensters? Kann ich diese Idee beliebig vergeben oder werden die durch windows automatisch hochgezählt?
-
in LWORD(wParam) steht die ID des jeweiligen Fensters? Kann ich diese Idee beliebig vergeben oder werden die durch windows automatisch hochgezählt?
Idee oder ID ?

In LOWORD von wParam steht die ID, ja...aber nur unter WM_COMMAND! Ja du kannst die ID beliebig vergeben, Windows wird dir da nicht reinfuschen^^:
Das hab ich dir doch schon geschrieben:
CodeFinder schrieb:
Mir fällt gerade auf...das du die gar nicht festgelegt hast...also das geht entweder direkt bei CreateWindow(Ex):
hButNeu = CreateWindow(TEXT("button"), TEXT("Neu"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hWnd, (HMENU)NUMMER, ((LPCREATESTRUCT)lParam)->hInstance, NULL); // NUMMER ist eine ganzzahle Konstante = ID des Buttons // z.B.: const int BTN_START = 7000; // C++ // z.B.: #define BTN_START 7000; // C // dann schreibst du statt NUMMER einfach BTN_START (nat. vorher deklarieren)oder nachträglich (hier nicht empfehlenswert):
SetWindowLong(hButton, GWL_ID, NUMMER); // NUMMER ist eine ganzzahle Konstante = ID des Buttons:
-
CodeFinder schrieb:
in LWORD(wParam) steht die ID des jeweiligen Fensters? Kann ich diese Idee beliebig vergeben oder werden die durch windows automatisch hochgezählt?
Idee oder ID ?

In LOWORD von wParam steht die ID, ja...aber nur unter WM_COMMAND! Ja du kannst die ID beliebig vergeben, Windows wird dir da nicht reinfuschen^^:
Das hab ich dir doch schon geschrieben:
CodeFinder schrieb:
Mir fällt gerade auf...das du die gar nicht festgelegt hast...also das geht entweder direkt bei CreateWindow(Ex):
hButNeu = CreateWindow(TEXT("button"), TEXT("Neu"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hWnd, (HMENU)NUMMER, ((LPCREATESTRUCT)lParam)->hInstance, NULL); // NUMMER ist eine ganzzahle Konstante = ID des Buttons // z.B.: const int BTN_START = 7000; // C++ // z.B.: #define BTN_START 7000; // C // dann schreibst du statt NUMMER einfach BTN_START (nat. vorher deklarieren)oder nachträglich (hier nicht empfehlenswert):
SetWindowLong(hButton, GWL_ID, NUMMER); // NUMMER ist eine ganzzahle Konstante = ID des Buttons:
Hm......... bei mir klappts nicht :(, wenn ich jetzt auf den Button klicke passiert nichts mehr.
Noch eine Frage, ich caste ja die ID(ee)
mit (HMENU), was ist den wenn ich jetzt mal ein menu angeben möchte? Wie vergebe ich den dann die ID des Steuerelements.LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC; PAINTSTRUCT ps; HBRUSH hBrush; RECT clientRect; HDC hDCBkBuf; HBITMAP hBM; HRGN hRgn; static HWND hButNeu; static HWND hButAbort; static HWND hWndNeu; static int cxClient; static int cyClient; switch (message) { case WM_CREATE: { hButNeu = CreateWindow(TEXT("button"), TEXT("Neu"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hWnd, (HMENU) 700, ((LPCREATESTRUCT)lParam)->hInstance, NULL); hButAbort = CreateWindow(TEXT("button"), TEXT("Abbrechen"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, hWnd, (HMENU) 2, ((LPCREATESTRUCT)lParam)->hInstance, NULL); return 0; } case WM_COMMAND: { if(LOWORD(wParam) == 700) { if(HIWORD(wParam) == BN_CLICKED) { hWndNeu = CreateWindow(TEXT("SUB"), TEXT("Erfassung der Mitarbeiterdaten"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 320, 240, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU) 3, NULL, NULL); } } return 0;
-
Olaf323 schrieb:
Noch eine Frage, ich caste ja die ID(ee)
mit (HMENU), was ist den wenn ich jetzt mal ein menu angeben möchte? Wie vergebe ich den dann die ID des Steuerelements.Du erzeugst doch ein Child-Fenster, eben einen Button; Die haben keine Menüs!
Dann:
Lass das:
if(HIWORD(wParam) == BN_CLICKED)mal weg...vllt. gehts dann
Olaf323 schrieb:
Hm......... bei mir klappts nicht :(, wenn ich jetzt auf den Button klicke passiert nichts mehr.
Bau da mal ne MessageBox(...) ein, um zu checken, ob dein Klick überhaupt ankommt

case WM_COMMAND: { if(LOWORD(wParam) == 700) { MessageBox(0,"Button-ID: 700",0,0); hWndNeu = CreateWindow(TEXT("SUB"), TEXT("Erfassung der Mitarbeiterdaten"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 320, 240, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU) 3, NULL, NULL); } }
-
Olaf323 schrieb:
Noch eine Frage, ich caste ja die ID(ee)
mit (HMENU), was ist den wenn ich jetzt mal ein menu angeben möchte? Wie vergebe ich den dann die ID des Steuerelements.Wer möchte denn einem BUTTON (falls das überhaupt möglich ist - ich bezweifle es) ein Menü verpassen!?
Greetz, Swordfish
-
Versuch 'mal:
case WM_COMMAND: switch( LOWORD( wParam ) ) { case 700: MessageBox( 0, TEXT( "700" ), TEXT( "ID:" ), MB_OK ); return 0; case 2: MessageBox( 0, TEXT( "700" ), TEXT( "ID:" ), MB_OK ); return 0; } break;Was hältst du eigentlich davon, für deine Buttons Konstante ID's a`la IDC_SONSTWAS zu definieren?
Greetz, Swordfish
-
Swordfish schrieb:
Versuch 'mal:
case WM_COMMAND: switch( LOWORD( wParam ) ) { case 700: MessageBox( 0, TEXT( "700" ), TEXT( "ID:" ), MB_OK ); return 0; case 2: MessageBox( 0, TEXT( "700" ), TEXT( "ID:" ), MB_OK ); return 0; } break;Jo genau das meinte...hatte nur kein Bock das zu tippen
...Swordfish schrieb:
Was hältst du eigentlich davon, für deine Buttons Konstante ID's a`la IDC_SONSTWAS zu definieren?
Greetz, Swordfish
Jo sinnvoll, dann is es übersichtlicher:
#define BTN_SEIZE_WORKER 6000 // das wär C const int BTN_SEIZE_WORKER = 6000; // das wär C++Diese Konstante setzt du dann überall ein, wo sie gebraucht wird

PS: Die Leerzeichen sind nur für die Optik

-
CodeFinder schrieb:
Jo genau das meinte...hatte nur kein Bock das zu tippen
...Fauler Sack!
CodeFinder schrieb:
#define BTN_SEIZE_WORKER 6000 // das wär C const int BTN_SEIZE_WORKER = 6000; // das wär C++[...]
PS: Die Leerzeichen sind nur für die Optik
Tja, Layout ist ALLES!

Greetz, Swordfish
PS @ CodeFinder: Wo bist du eigentl. beheimatet?
-
Danke, funktioniert

-
Swordfish schrieb:
PS @ CodeFinder: Wo bist du eigentl. beheimatet?
NRW, du ?