Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » IsDlgButtonChecked() -> was ist "int nIDButton" ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
11.06.2005, 21:50 Uhr
Lensflare



hallo.

die funktion

C++:
UINT IsDlgButtonChecked(HWND hDlg, int nIDButton)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/buttons/buttonreference/buttonfunctions/isdlgbuttonchecked.asp
soll mir den zustand einer checkbox zurückgeben.

Aber ich verstehe nicht, was ich als nIDButton übergeben soll.
Ist es die nummer der checkbox, falls ich mehrere habe?

so habe ich meine checkbox erstellt:

C++:
  static HWND hCheckBox;

  hCheckBox = CreateWindow ( "button",
                                  "Check Box",
                                  BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE,
                                  0, 0, 0, 0,
                                  hWnd, //mein Hauptfenster
                                  NULL,
                                  ((LPCREATESTRUCT) lParam) -> hInstance, /* keine Ahnung, was das ist. hInstance wird als erster parameter an WinMain übergeben. */
                                 NULL);
  MoveWindow(hCheckBox, 160, 10, 300, 26, TRUE);

/* ... */
  if(IsDlgButtonChecked(hCheckBox,1) == BST_CHECKED) //???
  {
    //etwas machen
  }



das mit den nachrichten funktioniert, ich habe erfolgreich abgefragt, ob ich auf die checkbox geklickt habe (jeder klick, egal ob an oder aus).
aber jetzt will ich eben abfragen, ob die box "checked" ist oder nicht.

ich habe für nIDButton (zweiter parameter für IsDlgButtonChecked() ) schon alles mögliche eingesetzt, die if-bedingung wird nie erfüllt

Hoffe, jemand kann mir hierbei helfen.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 11.06.2005 um 21:55 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.06.2005, 22:13 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Wenn du den Dialog samt Steuerelemente im Resourceneditor erstellt hättest, hättest jedes eine ID. Alternativ kann man diese glaube ich auch mit CreateWindow vergeben, das habe ich aber noch nie probiert und auch noch nie gebraucht.

Wenn du wissen willst ob deine Checkbox angehakt ist kannst du BM_GETCHECK an sie senden und den Rückgabewert von SendMessage überprüfen.


PS: HINSTANCE ist eine interne Nummer von Windows mit der es die Anwendung identifiziert.
PPS: Wieso gibst du bei CreateWindow keine Größe und Koordinaten an, sondenr setzt sie danach mit MoveWindow?


Und vor allem wieso gibst du "button" an wenn du eine Checkbox erstellen willst??

Dieser Post wurde am 11.06.2005 um 22:16 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.06.2005, 22:31 Uhr
Lensflare



Danke. Es geht jetzt.

aber wie mache ich das mit den "radio buttons"? Ist das nicht eine gruppe aus buttons, die mit einem CreateWindow() erzeugt werden?


Zitat:
PPS: Wieso gibst du bei CreateWindow keine Größe und Koordinaten an, sondenr setzt sie danach mit MoveWindow?

Ich wollte hier nicht zu viel code posten, der nichts mit dem problem zu tun hat, deswegen hab ich alles überflüssige herausgelöscht.

in wirklichkeit wird bei mir nach der nachricht WM_CREATE die funktion CreateWindow ausgeführt und nach jeder WM_SIZE nachricht die funktion MoveWindow.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.06.2005, 22:33 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du kannst per SetWindowLong und nIndex=GWL_ID die ID des Buttons setzen, der Parameter hDlg muss der von deinem Dialog sein, bzw vom Parent von der Checkbox

Warum du das MoveWindow dann benutzt frag ich mich auch, ich denk mal aber das du die Position evtl erst nach veränderung der Fenstergröße o.ä festlegst (hoff ich zumindest )
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.06.2005, 23:01 Uhr
Lensflare



was muss ich denn für dwNewLong (dritter parameter) einsetzen?
Es kommt mir übringens so vor, als wird die funktion damit zweckentfremdet

und ich versteh immer noch nicht, wozu diese ID der buttons gut sein soll, es sei denn wie gesagt bei den radio buttons.
es macht ja nur sinn, die zu benutzen, wenn es mindestens zwei sind. und die müssen demnach irgendwie miteinander kommunizieren, damit immer nur eins markiert bleibt (ich gehe mal davon aus, dass das automatisch geschieht).
aber was die button IDs damit zu tun haben sollen ist mir ein rätsel (das heisst, falls die was damit zu tun haben )
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 11.06.2005 um 23:03 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.06.2005, 08:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jeder button bekommt eine id, den da drüber arbeiten die meisten autofunktionen, beispiel hast du ja schon genannt, als 3ten Parameter kannst du die neue ID dann einsetzen. Oder du fragst die ID mal mit GetWindowLong ab, evtl reicht das schon.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.06.2005, 17:25 Uhr
Lensflare



habs probiert, aber geht trotzdem nicht:

C++:
  SetWindowLong(hCheckBox,GWL_ID,101);
  //...
  if(IsDlgButtonChecked(hCheckBox,GetWindowLong(hCheckBox,101)) == BST_CHECKED)
  {
    //etwas machen (wird nie ausgeführt)
  }



steht die ID vielleicht für eine gruppe von buttons? So dass alle buttons in der gruppe die selbe ID haben?

könnte ich bitte ein beispielcode bekommen, wie man 3 radiobuttons erstellt, von denen immer nur eins markiert bleibt (dh. die anderen müssen sich automatisch unmarkieren) und wie man abfragt, ob ein bestimmtes botton markiert ist... oder welches von den 3 markiert ist.
ich weiss nicht wie das abgefragt wird.

danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.06.2005, 20:11 Uhr
Lensflare



ich habe jetzt mal 3 Radiobuttons erstellt, in dem ich statt BS_AUTOCHECKBOX die konstante BS_AUTORADIOBUTTON verwendet habe...
und zu meinem Erstaunen: Wenn ich eins markiere, demarkieren sich automaitsch die anderen

Jetzt stellt sich natürlich die frage... wenn das automatisch geht, wie verhindere ich das ganze?
denn es kann ja durchaus sein, dass zwei gruppen aus radio buttons hab. Und so würde dann in einer von beiden gruppen gar kein radio button markiert sein.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.06.2005, 23:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das geht einfach so das die ids erstens aufsteigend sein müssen (das macht der automatisch wenn du keine festlegst) und zweitens das gruppenfeld der 2ten gruppe von den tabs nach dem ersten feld kommen muss, also so:

feld
radio
radio
radio
feld
radio
radio
radio

Wenn man die Elemente in der Reihenfolge erstellt hat man 2 Gruppen mit je 3 Radios ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.06.2005, 15:27 Uhr
Lensflare



was sind felder und tabs?

ist mit "feld" diese graphishe umrandung der buttongruppen gemeint?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: