Dialogitem soll focus bekommen



  • heiho

    folgendes,
    ich lass hier ein dialog anzeigen wo der benutzer einen namen eingeben soll,
    direkt nach erstellung des dialoges, soll das edit feld den focus haben, sodass der benutzer nicht erst reinklicken muss

    wie kann ich das bewerkstelligen ?

    das habe ich bisher:

    void COwnClass::OnFunc(COwnClass *mainclass)
    {
    	::DialogBox(mainclass->GetInstance(), MAKEINTRESOURCE(IDD_GETNAME), mainclass->GetHandle(), (DLGPROC)GetNameProc);
    }
    
    BOOL CALLBACK GetNameProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_INITDIALOG:
                ::SetFocus(::GetDlgItem(hwndDlg, IDC_NEWNAME));  // das bewirkt nichts
                return TRUE;
            case WM_DESTROY:
            case WM_CLOSE:
                ::EndDialog(hwndDlg,0);
                return TRUE;
    .
    .
    .
    .
    .
    


  • habs eben rausgefunden

    mit

    ::SendMessage(::GetDlgItem(hwndDlg, IDC_NEWNAME), WM_SETFOCUS, reinterpret_cast<WPARAM>(::GetDlgItem(hwndDlg, IDC_NEWNAME)), 0);
    

    ging es

    args, zu frueh gefreut, wenn ich das so mach werden keine tastatureingaben mehr angenommen+

    //nochmal edit

    ich habe das jetzt so geloest das ich die TabStops von den beiden buttons Ok, Cancel weggenommen habe {auf false gesetzt}, ich hatte gelesen das das erste automatisch den focus bekommt, vermutlich hatte das ok die ganze zeit den focus erhalten

    warum SetFocus selber nicht funktionierte, und bei SendMessage alle weiteren eingaben nicht mehr angenommen werden bleibt mir aber weiterhin ein raesel



  • Win32 Programmer's Reference schrieb:

    WM_INITDIALOG

    Return Values

    The dialog box procedure should return TRUE to direct Windows to set the keyboard focus to the control given by hwndFocus. Otherwise, it should return FALSE to prevent Windows from setting the default keyboard focus.



  • Der Return-Wert einer DialogProc sollte aber mittlerweile INT_PTR sein 😉 .


Anmelden zum Antworten