包含tab控件时,,如何让子控件跟随对话框大小变化(补充)

来源:互联网 发布:微信生鲜小程序源码 编辑:程序博客网 时间:2024/05/20 13:05

由于是使用一个简单的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_SELCHANGING, &CTabPage::OnTcnSelchanging)  
ON_NOTIFY_REFLECT(TCN_SELCHANGE, &CTabPage::OnTcnSelchange)

改为

ON_NOTIFY_REFLECT_EX(TCN_SELCHANGING, &CTabPage::OnTcnSelchanging)ON_NOTIFY_REFLECT_EX(TCN_SELCHANGE, &CTabPage::OnTcnSelchange)

其实主要就是

ON_NOTIFY_REFLECT与ON_NOTIFY_REFLECT_EX
这两个宏的处理了,根据MSDN说明,同样是拦截消息,前者是拦截后自己使用,不在反馈给父窗口;而后者,则是可以在自己处理的情况下,

继续转交给父窗口进行处理的,不过,在其函数中,唯有return false时才可让父窗口接收到该消息,若是为true时,则无法令其接收到消息,所以,最终其函数改为

BOOL CTabPage::OnTcnSelchange(NMHDR *pNMHDR, LRESULT *pResult){ShowCurPage(SW_SHOW);*pResult= 0;return FALSE;}
然后在父窗口中,可以通过
ON_NOTIFY(TCN_SELCHANGE,IDC_TAB,OnSelectChanging)
处理该tab控件消息
voidCMTSWDlg::OnSelectChanging(NMHDR* pNMHDR,LRESULT* pResult){int a = m_TabCtrl.GetCurSel();*pResult = 0;}

特此记录下,方便以后使用。