[MFC] Cum "controlez" un control dintr-un dialog comun?

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

[MFC] Cum "controlez" un control dintr-un dialog comun?

Post by Ovidiu Cucu » 16 Jul 2007, 12:30

Problema
Am un dialog comun, sa zicem "File Open" si vreau (doar un exemplu), sa schimb textul unui control tip static.
Pare simplu, nu trebuie decat sa derivez din CFileDialog, sa suprascriu functia OnInitDialog iar acolo apelez GetDlgItem si SetWindowText sau direct SetDlgItemText (ID-ul controlului l-am gasit cu Spy++).
Nu merge. GetDlgItem intoarce NULL iar SetDlgItemText nu schimba absolut nimic.

Rezolvare
De fapt, clasele derivate din CComonDialog (CFileDialog, CFontDialog, CColorDialog, etc) incapsuleaza un child al dialogului comun ce contine controalele. Deci trebuie sa-i gasim mai intai parent-ul.

Exemplu

Code: Select all

class CMyFileDialog : public CFileDialog 
{ 
// ... 
// Overrides 
public: 
   virtual BOOL OnInitDialog(); 
// ... 
};

Code: Select all

#include <DLGS.H> 
// ... 
BOOL CMyFileDialog::OnInitDialog() 
{ 
   CFileDialog::OnInitDialog(); 
   // ... 
   GetParent()->SetDlgItemText(stc3, _T("Ala bala portocala")); 
   // ... 
   return TRUE; 
}
NOTE:
  1. In exemplul de mai sus am folosit ID-ul 'stc3' definit in <DLGS.H>.
  2. Exemplu de mai sus nu este cel mai fericit ales, pentru ca exista o functie CFileDialog::SetControlText care se poate folosi direct. Totusi aceasta nu exista si alte clase derivate din CCommnDialog iar principiul ramane acelasi.
<< Back to MFC index
Last edited by Ovidiu Cucu on 17 Jul 2007, 21:13, edited 1 time in total.



Post Reply