Autocheckbox von anfang an aktiviert?
-
hWndParent und ID_CHILD sind nur Platzhalter diese musst du natürlich durch
deine eignen variablennamen ersetzen.
-
und mit was müsste ich dann beispielsweise hWndParent ersetzen? Mein hauptfenster hab ich folgendermaßen geschrieben:
hwnd = CreateWindow ( szAppName, // Hauptfenster szAppName, // Titel WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU // Stil | WS_THICKFRAME | WS_MINIMIZEBOX, 100, // X-Position 100, // Y-Position 700, // Breite 510, // Höhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm ID) NULL); // zusätzliche Parameterund in dem befindet sich der button...
-
Tu uns und dir einen Gefallen: Ackere ein C/C++ Tutorial durch!
-
du hast doch eine wndproc in etwa so
// erster parameter ist das fensterhandle von hauptfenster LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static HWND hwndBtn; // fensterhandle des buttons switch(msg) { case WM_CREATE: { hwndBtn = CreateWindow( "BUTTON", "OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 100, 100, 100, hwnd, (HMENU)105, // ID des Buttons ((LPCREATESTRUCT)lParam)->hInstance, NULL); } break; case WM_COMMAND: // usw usw usw usw uswnimm es mir nicht böse aber vorsatz für das neue jahr sollte sein ein paar winapi tutorials durchzuackern.
[edit]
ich war zu langsam.
@hepi
zwei menschen ein gedanke
-
ich hab hier ein winapi tutorial (windows programmierung von petzold) und mit dem arbeite ich auch, blos leider steht da auch net alles drin...
ich hab ich mit der id des buttons kein problem... das wüsstet ihr auch wenn ihr meine vorherigen beiträge durchgelesen hättet! (Wer lesen kann, ist klar im Vorteil)
vielleicht steh ich grad a weng aufm schlauch (weiß auch net) aber wenn ich den fensterhandle meines buttons ( = hwndButton das wüsstet ihr auch wenn ihr meine vorherigen beiträge gelesen hättet) einsetze, also so:
SendMessage(GetDlgItem(hwndButton, (HMENU) 5), BM_SETCHECK, BST_CHECKED, 0);dann funktioniert das nicht wegen folgender fehlermeldung:
error C2664: 'GetDlgItem' : Konvertierung des Parameters 2 von 'struct HMENU__ *' in 'int' nicht moeglich
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformatso: ich weiß dass ich mich noch net so gut auskenne und ich bin euch ja auch sehr dankbar dass ihr mir helft, aber bevor ihr mir irgendwelche guten vorsätze vorschreibt, solltet ihr vielleicht mal lesen was überhaupt mein problem ist!!! (is nicht böse gemeint blos find ichs a weng unfair dass ihr mich gleich so anmacht)
mein Button sieht folgendermaßen aus:
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static RECT rect; static int cxChar, cyChar; HDC hdc; PAINTSTRUCT ps; switch (msg) { case WM_CREATE: cxChar = LOWORD (GetDialogBaseUnits ()); cyChar = HIWORD (GetDialogBaseUnits ()); HWND hChild, hwndButton; hwndButton = CreateWindow ( "button", "Welle A", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, cxChar, cyChar * 2, 10 * cxChar, 7 * cyChar / 4, hwnd, (HMENU) 5, ((LPCREATESTRUCT) lParam)->hInstance, NULL); SendMessage(hwndButton, BM_SETCHECK, BST_CHECKED, 0); // etc.so und ich will erreichen, dass der button, falls er mal vom Benutzer als ungesetzt markiert wird, wieder als gesetzt markiert wird, sobald auf einen weiteren button geklickt wird: dass hab ich folgendermaßen gemacht:
[cpp]case WM_COMMAND:
switch (LOWORD(wParam))
{
case (HMENU) 11: // Button Reset wird gedrücktButtonPressed_WelleA = true; // alle Wellenzentren werden aktiviert
ButtonPressed_WelleB = true;
ButtonPressed_WelleC = true;
ButtonPressed_WelleD = true;
ButtonPressed_WelleE = true;
ButtonPressed_WelleF = true;
a1 = 66, b1 = 133, c1 = 66; // Wellenzentren in ihren ursprünglichen Zustand
a2 = 50, b2 = 50, c2 = 100;
d1 = 133, e1 = 66, f1 = 133;
d2 = 100, e2 = 150, f2 = 150;
SendMessage(GetDlgItem(hwndButton, (HMENU) 5), BM_SETCHECK, BST_CHECKED, 0); // das funktioniert leider nicht, siehe oben in meinem beitrag die Fehlermeldung
InvalidateRect(hwnd, NULL, TRUE); // das vorherige Fenster wird gelöscht
break;}
break;
[/cpp]edit: falls jetzt jemand denkt, dass es daran liegt dass ich hwnd anstatt dem üblichen hWnd geschrieben hab... ich hab einheitlich hwnd geschrieben, also dürfte das nicht das problem sein.... (sorry wegen dem häufigen edit)
Sirstefen
-
Sirstefen schrieb:
ich hab ich mit der id des buttons kein problem... das wüsstet ihr auch wenn ihr meine vorherigen beiträge durchgelesen hättet! (Wer lesen kann, ist klar im Vorteil)
hab alles gelesen, wollt nur nochmal hinschreiben
Sirstefen schrieb:
so: ich weiß dass ich mich noch net so gut auskenne und ich bin euch ja auch sehr dankbar dass ihr mir helft, aber bevor ihr mir irgendwelche guten vorsätze vorschreibt, solltet ihr vielleicht mal lesen was überhaupt mein problem ist!!! (is nicht böse gemeint blos find ichs a weng unfair dass ihr mich gleich so anmacht)
war keine vorschrift sondern ein rat. blöd angemacht hat dich meiner meinung auch keiner. wir versuchen nur zu helfen.
Sirstefen schrieb:
vielleicht steh ich grad a weng aufm schlauch (weiß auch net) aber wenn ich den fensterhandle meines buttons ( = hwndButton das wüsstet ihr auch wenn ihr meine vorherigen beiträge gelesen hättet) einsetze, also so:
SendMessage(GetDlgItem(hwndButton, (HMENU) 5), BM_SETCHECK, BST_CHECKED, 0);es ist schon richtig das hwndButton ist bzw. war den wenn du den scope verlässt wird diese wieder zerstört.
bei GetDlgItem musst das handle der hauptfensters angeben.
so
[cpp]
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static RECT rect;
static int cxChar, cyChar;
static HWND hChild, hwndButton; // somit hast du gültige handles
HDC hdc;
PAINTSTRUCT ps;switch (msg)
{
case WM_CREATE:
cxChar = LOWORD (GetDialogBaseUnits ());
cyChar = HIWORD (GetDialogBaseUnits ());hwndButton = CreateWindow ( "button", "Welle A",
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
cxChar,
cyChar * 2,
10 * cxChar,
7 * cyChar / 4,
hwnd,
(HMENU) 5,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);SendMessage(hwndButton, BM_SETCHECK, BST_CHECKED, 0);
// etc.
[/cpp]case WM_COMMAND: switch (LOWORD(wParam)) { case (HMENU) 11: ButtonPressed_WelleA = true; ButtonPressed_WelleB = true; ButtonPressed_WelleC = true; ButtonPressed_WelleD = true; ButtonPressed_WelleE = true; ButtonPressed_WelleF = true; a1 = 66, b1 = 133, c1 = 66; // Wellenzentren in ihren ursprünglichen Zustand a2 = 50, b2 = 50, c2 = 100; d1 = 133, e1 = 66, f1 = 133; d2 = 100, e2 = 150, f2 = 150; SendMessage(hwndButton, BM_SETCHECK, BST_CHECKED, 0); InvalidateRect(hwnd, NULL, TRUE); // das vorherige Fenster wird gelöscht break; } break;
-
hmm selbst wenn ich "static" eingeben ändert sich leider nix... die fehlermeldung kommt immer noch...
-
miller_m schrieb:
SendMessage(hwndButton, BM_SETCHECK, BST_CHECKED, 0);siehe vorheriger post
-
ja dann kompiliert er... aber dann funktionierts im programm nicht, weil dann wieder das problem ist, dass ich nicht nur einen button hab, der "resettet" also wieder gesetzt werden soll, sondern eben sechs, die alle so ausschaun wie der eine, sich aber anhand der id und des namens (nicht "Welle A", sondern "Welle B")
-
ok das problem hat sich gelöst... du hast mich auf ne idee gebracht...
ich hab alle buttons mit
"hwndButton = ..." deklariert, des war mein problem
etz hab ich sie alle anders deklariert
mit z.b. "hwndButtonA = ..." "hwndButtonB = ..." und etz gehts, weil das programm sie unterscheiden kann
vielen dank und sorry wenn ich vorhin ein wenig gereizt reagiert habe
Sirstefen