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   30002
    

    main.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.cpp

    LRESULT 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.


  • Mod

    ::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!


Anmelden zum Antworten