[MFC] Cum setez focusul intr-un control din dialog?

Despre MFC, ATL si alte biblioteci C++ de la Microsoft (forum moderat)
Post Reply
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

[MFC] Cum setez focusul intr-un control din dialog?

Post by Ovidiu Cucu » 17 Aug 2011, 09:46

Intrebare
Cum setez prin program focus-ul pe un anumit control, intr-un dialog?

Raspuns
O metoda des folosita este prin apelarea functiei CWnd::SetFocus.

Code: Select all

   GetDlgItem(IDC_EDIT2)->SetFocus();
Totusi, SetFocus nu selecteaza textul intr-un contol edit sau nu pune default pushbutton border la un buton asa cum se intampla atunci cand focus-ul se schimba in urma actiunii unui utilizator.
Se poate realiza acesta prin functii suplimentare sau inlocuind CWnd::SetFocus cu CDialog::GotoDlgCtrl.

Code: Select all

   GotoDlgCtrl(GetDlgItem(IDC_BUTTON2));
Daca se doreste mutarea focusului pe pe urmatorul control sau pe cel precedent in tab order, se poate apela simplu CDialog::NextDlgCtrl, respectiv CDialog::PrevDlgCtrl.

Code: Select all

   NextDlgCtrl();
Note
  1. Daca se schimba focusul in OnInitDialog atunci trebuie intors FALSE.

    Code: Select all

    BOOL CMyDialog::OnInitDialog()
    {
       //...
       GotoDlgCtrl(GetDlgItem(IDC_EDIT2));
       return FALSE; // the focus has been programmatically set
    }
  2. CDialog::GotoDlgCtrl, CDialog::NextDlgCtrl si CDialog::PrevDlgCtrl trimit mesajul WM_NEXTDLGCTL cu SendMessage. In unele cazuri, ar fi de preferat postarea mesajului WM_NEXTDLGCTL (folosind PostMessage in loc de SendMessage).

    Code: Select all

       HWND hWndCtrl = ::GetDlgItem(m_hWnd, IDC_EDIT2);
       PostMessage(WM_NEXTDLGCTL, (WPARAM)hWndCtrl, (LPARAM)TRUE);
Resurse
<< Back to MFC index



Post Reply