如何给TAB控件发送TCN_SELCHANGE消息?
我的程序是基于Dialog的,在我主窗体上有一个TabCtrl(m_Tab_Mode)控件,现在我通过点击窗体上一按钮,改变TabCtrl所选择的页面,同时我也想让它执行TCN_SELCHANGE所对应的操作,所以就需要向TabCtrl发送这个消息,我用的:
NMHDR nmhdr;
nmhdr.code=TCN_SELCHANGE;
nmhdr.hwndFrom=m_Tab_Mode.GetSafeHwnd();
nmhdr.idFrom=IDC_TAB_MODE;
::SendMessage(this-> GetSafeHwnd(),WM_NOTIFY,MAKELONG(TCN_SELCHANGE,0),(LPARAM)(&nmhdr));
但是却都没有效果,请问为什么,是不是参数有问题,怎样改才能生效呢?请高手指教!
[解决办法]
TCN_SELCHANGE是发送给父窗口的消息,要在父窗口中(这里是对话框)处理这个消息.
[解决办法]
CTabCtrl::SetCurSel
[解决办法]
映射类CTabCtrl对应你的Tab控件,在主对话框中定义一个CTabCtrl变量m_cTabWnd,
在CXXXDlg::OnInitDilaog()中加入如下代码,
m_cTabWnd.Create(WS_CHILD | WS_VISIBLE,CRect(20,56,400,150),this,IDC_TAB);
IDC_TAB是你的Tab控件对应ID,
ON_NOTIFY(TCN_SELCHANGE,IDC_TAB1,OnSelChangeTab)
映射TCN_SELCHANGE消息
如下消息处理函数
void CXXXDlg::OnSelectChangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{//处理页选择改变后的消息
int iindex = m_cTabWnd.GetCurSel()
switch(iindex)
{
case 0:
view1.ShowWindow(SW_SHOW);
view2.ShowWindow(SW_HIDE);
view3.ShowWindow(SW_HIDE);
break;
case 1:
view2.ShowWindow(SW_SHOW);
view1.ShowWindow(SW_HIDE);
view3.ShowWindow(SW_HIDE);
break;
case 3:
view3.ShowWindow(SW_SHOW);
view1.ShowWindow(SW_HIDE);
view2.ShowWindow(SW_HIDE);
break;
}
}
[解决办法]
lz``这是我的代码``测试了是可以触发OnChange的``
NMHDR nmhdr;
nmhdr.code=TCN_SELCHANGE;
nmhdr.hwndFrom= m_pTab.GetSafeHwnd();
nmhdr.idFrom=m_pTab.GetDlgCtrlID();
::SendMessage(m_pTab.GetSafeHwnd(), WM_NOTIFY,MAKELONG(TCN_SELCHANGE,0), (LPARAM)(&kk));