2017-08-20 4 views

Répondre

1

Comment faire un contrôle de boîte de groupe/statique pour faire la sous-classe ou personnalisé contrôle.

Dérivez une classe de CButton. Gérez la notification NM_CUSTOMDRAW pour faire le dessin personnalisé. Alternativement, on pourrait utiliser le style de fenêtre BS_OWNERDRAW, mais cela est mutuellement exclusif avec BS_GROUPBOX. Lorsque vous utilisez NM_CUSTOMDRAW, les indicateurs de style de fenêtre d'origine peuvent être conservés.

Notez que NM_CUSTOMDRAW est normalement envoyé à la fenêtre parent, mais vous pouvez rediriger ce message à gérer dans la classe de contrôle comme celui-ci:

BEGIN_MESSAGE_MAP(CMyGroupBox, CButton) 
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) 
END_MESSAGE_MAP() 

La définition de OnCustomDraw() ressemblerait à ceci:

void CMyGroupBox::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    auto pnmc = reinterpret_cast<NMCUSTOMDRAW*>(pNMHDR); 
    // Query pnmc members and do the custom drawing as documented on MSDN. 
    // Assign the result to *pResult. 
} 

Comment obtenir tous les contrôles de boîte de groupe/contrôles statiques.

Utilisez EnumChildWindows() pour énumérer toutes les fenêtres enfants. Dans l'appel de rappel GetClassName() pour vérifier si la classe Windows est "bouton" et appelez GetWindowLong(hwnd, GWL_STYLE) pour vérifier si le drapeau BS_GROUPBOX est défini.