由于是使用一个简单的tab控件,所以内容很简略;
在实际使用中,更多的处理则是交给其父窗口进行处理的,从而根据实际的项目特性进行制作。
在项目中,发现希望能够在父窗口中也能对切换标签的消息进行处理时,就需要对以下的命令进行改写;
afx_msg void OnTcnSelchanging(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);
将其改为
afx_msg BOOL OnTcnSelchanging(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg BOOL OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult);
同时其反射消息定义也由原先的
ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CTabPage::OnTcnSelchange) 改为ON_NOTIFY_REFLECT(TCN_SELCHANGING, &CTabPage::OnTcnSelchanging)
ON_NOTIFY_REFLECT_EX(TCN_SELCHANGING, &CTabPage::OnTcnSelchanging) ON_NOTIFY_REFLECT_EX(TCN_SELCHANGE, &CTabPage::OnTcnSelchange)
其实主要就是这两个宏的处理了,根据MSDN说明,同样是拦截消息,前者是拦截后自己使用,不在反馈给父窗口;而后者,则是可以在自己处理的情况下,ON_NOTIFY_REFLECT与ON_NOTIFY_REFLECT_EX
继续转交给父窗口进行处理的,不过,在其函数中,唯有return false时才可让父窗口接收到该消息,若是为true时,则无法令其接收到消息,所以,最终其函数改为
然后在父窗口中,可以通过BOOL CTabPage::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult) { ShowCurPage(SW_SHOW); *pResult = 0; return FALSE; }
处理该tab控件消息ON_NOTIFY(TCN_SELCHANGE,IDC_TAB,OnSelectChanging)
void CMTSWDlg::OnSelectChanging(NMHDR* pNMHDR,LRESULT* pResult) { int a = m_TabCtrl.GetCurSel(); *pResult = 0; }
特此记录下,方便以后使用。