Wie Gruppenfeld/statische Kontrolle machen Unterklasse oder benutzerdefinierte Kontrolle zu tun.
Ableiten einer Klasse von CButton
. Behandeln Sie die NM_CUSTOMDRAW
Benachrichtigung, um die benutzerdefinierte Zeichnung auszuführen. Alternativ könnte man BS_OWNERDRAW
Fensterstil verwenden, aber dies schließt sich gegenseitig mit BS_GROUPBOX
. Wenn Sie NM_CUSTOMDRAW
verwenden, können die ursprünglichen Fensterstil-Flags beibehalten werden.
Beachten Sie, dass NM_CUSTOMDRAW
wird normalerweise an das übergeordnete Fenster gesendet, aber diese Meldung in der Steuerklasse wie das zu handhaben umleiten:
BEGIN_MESSAGE_MAP(CMyGroupBox, CButton)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
END_MESSAGE_MAP()
Die Definition von OnCustomDraw()
würde wie folgt aussehen:
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.
}
So erhalten Sie alle Gruppenfeld/statische Steuerelemente zählen.
Verwenden Sie EnumChildWindows()
, um alle untergeordneten Fenster aufzuzählen. Überprüfen Sie im Callback-Call GetClassName()
, ob die Windows-Klasse "button" ist, und rufen Sie GetWindowLong(hwnd, GWL_STYLE)
auf, um zu überprüfen, ob das Flag BS_GROUPBOX
gesetzt ist.