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.