Namen eines Button auslesen
-
Ich erstelle mit dem gleichen HWND einige Button.
Ich würde gerne wissen wie ich jetzt den Namen eines bestimmten Buttons auslesse.B.s.
HWND but for(int a = 0;a<5;a++){ sprintf(variable,"%s%i",variable2,a); but = CreateWindow( "button", variable/*das möchte ich gerne wissen*/, WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 10, a*17+20, 100, 15, hWnd, (HMENU)2, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); }thx für Antwort
-
entweder
::GetDlgItemText(hWnd, IDC_BUTTON);
oder
::GetWindowText(but);so oder so solltest du allerdings eine eindeutige ID vergeben, sonst kannst du schlecht messages abfangen und musst mit nem bloeden vergleich arbeiten
"2" ist eine sehr schlechte idee
-
Ich kann zwar den Namen auslessen, aber immer nur den selben(der erst, der erstellt wurde). Ich möchte aber den Namen des Buttens auslesen den ich auch angecklickt(ausgewählt) habe.
-
Das Handle vom "angeklickten" Button steht als lParam in der WM_COMMAND des Parent zur Verfügung.

-
Was meinst Du denn mit einem "Namen des Buttons"? Ein Button hat ein Handle (HWND), eine ID (i. d. R. per #define festgelegt) und eine Beschriftung. Wenn Du auf die ID zugreifen willst, bekommst Du nur den Integer-Wert, nicht das #define-Wort.
-
wenn du gleich jeden button eine vernuenftige ID geben wuerdest, haettest du nie irgendwelche probleme
define.h
#define ID_PREVIEW 30001 #define ID_SETTINGS 30002main.cpp
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: switch(LOWORD(wParam)) { case ID_PREVIEW: ::MessageBox(hWnd, ::GetDlgItemText(hwnd, ID_PREVIEW), _T("The Button"), MB_OK); break; case ID_SETTINGS: ::MessageBox(hWnd, ::GetDlgItemText(hwnd, ID_SETTINGS), _T("The Button"), MB_OK); break; } break; } }oder auch
main.cppLRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: int button = LOWORD(wParam); switch(button ) { default: if(button >= ID_PREVIEW && button <= ID_SETTINGS) ::MessageBox(hWnd, ::GetDlgItemText(hwnd, button ), _T("The Button"), MB_OK) break; } break; } }je nach anwendung ist das eine oder das andere besser, ich persoenlich arbeite so wenig wie moeglich mit den HWND's selber
es gibt auch zig moeglichkeiten wie du die message bearbeitest
-
das was oben im Quelletext auskommentiert steht möchte ich ausgegeben bekommen.
-
::MessageBox(hWnd, ::GetDlgItemText(hwnd, button ), _T("The Button"), MB_OK)

Was sol dieser Code bewirken? GetDlgItem Text rtruniert keinen Text-Zeiger! Das wäre höchstens in der MFC so!