一般子窗口通知父窗口处理的消息,主要有NOTIFY消息,COMMAND消息,以及DRAWITEM,CTLCOLOR消息.让父窗口来处理.
如果你想写一个比较独立的控件的话,你会想把一些CTLCOLOR消息的处理封装在子控件内,不需要调用方做过多的设置.
这样话,MFC提供了一套消息映射到机制,主要是把父窗口的消息映射到子窗口.这样,像CTLCOLOR消息,就可以在子窗口中进行设置.
原理很简单,就是在处理对应消息的时候,多了一次让子窗口处理的过程.
消息映射到宏主要有
ON_CONTROL_REFLECT( wNotifyCode , memberFxn ) |
afx_msg void memberFxn ( ); |
ON_NOTIFY_REFLECT( wNotifyCode , memberFxn ) |
afx_msg void memberFxn ( NMHDR * pNotifyStruct , LRESULT* result ); |
ON_UPDATE_COMMAND_UI_REFLECT( memberFxn ) |
afx_msg void memberFxn ( CCmdUI* pCmdUI ); |
ON_WM_CTLCOLOR_REFLECT( ) |
afx_msg HBRUSH CtlColor ( CDC* pDC , UINT nCtlColor ); |
ON_WM_DRAWITEM_REFLECT( ) |
afx_msg void DrawItem ( LPDRAWITEMSTRUCT lpDrawItemStruct ); |
ON_WM_MEASUREITEM_REFLECT( ) |
afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct ); |
ON_WM_DELETEITEM_REFLECT( ) |
afx_msg void DeleteItem ( LPDELETEITEMSTRUCT lpDeleteItemStruct ); |
ON_WM_COMPAREITEM_REFLECT( ) |
afx_msg int CompareItem ( LPCOMPAREITEMSTRUCT lpCompareItemStruct ); |
ON_WM_CHARTOITEM_REFLECT( ) |
afx_msg int CharToItem ( UINT nKey , UINT nIndex ); |
ON_WM_VKEYTOITEM_REFLECT( ) |
afx_msg int VKeyToItem ( UINT nKey , UINT nIndex ); |
ON_WM_HSCROLL_REFLECT( ) |
afx_msg void HScroll ( UINT nSBCode , UINT nPos ); |
ON_WM_VSCROLL_REFLECT( ) |
afx_msg void VScroll ( UINT nSBCode , UINT nPos ); |
ON_WM_PARENTNOTIFY_REFLECT( ) |
afx_msg void ParentNotify ( UINT message , LPARAM lParam ); |