Desi am mapat notificarea STN_CLICKED (sau BN_CLICKED) in dialogul parinte al unui control static (static text sau picture), programul nu intra in functia handler corespunzatoare atunci cand dau click pe controlul static.
Exemplu
Code: Select all
// ParentDialog.h
// ...
class CParentDialog : public CDialog
{
// ...
afx_msg void OnClickedStaticTest();
// ...
};
Code: Select all
// ParentDialog.cpp
// ...
ON_BN_CLICKED(IDC_STATIC_TEST, OnClickedStaticTest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CParentDialog::OnClickedStaticTest()
{
// <-- the program never enters here.
}
Exemplu
Code: Select all
// CustomStatic.h
class CCustomStatic : public CStatic
{
// ...
afx_msg void OnClicked();
// ...
};
Code: Select all
// CustomStatic.cpp
// ...
ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CCustomStatic::OnClicked()
{
// <-- the program never enters here.
}
Controalele statice (avand clasa fereastra "Static") sunt controale simple destinate sa afiseze un text, un dreptunghi sau o imagine si in mod normal nu primesc input de la utilizator, incluzand mesajele de mouse. In consecinta, acestea nici nu notifica fereastra (dialogul) parinte.
Rezolvare
Daca totusi e nevoie de tratat mesajele de mouse (incluzand notificarea STN_CLICKED), controlul static trebuie sa aiba setat stilul SS_NOTIFY (proprietatea "Notify" in editorul de resurse).
Note
- STN_CLICKED si BN_CLICKED au aceeasi valoare. Desi pentru controlul static este definit STN_CLICKED, in lista de la ClassWizard din VC++6.0 apare BN_CLICKED.
- Pentru a putea mapa notificarile unui control static, trebuie schimbat ID-ul default pe care-l pune editorul de resurse, IDC_STATIC.