2017-08-20 3 views

Antwort

1

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.

Verwandte Themen