我的程序是基于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));
但是却都没有效果,请问为什么,是不是参数有问题,怎样改才能生效呢?请高手指教!
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));
但是却都没有效果,请问为什么,是不是参数有问题,怎样改才能生效呢?请高手指教!
解决方案 »
- VC WebBrowser2 点击链接的获取问题
- 请问有这样的文本处理软件吗?
- 需要远程看到多个PC的操作情况,有这样的代码推荐吗?
- 象CShockwaveFlash这种控件,怎么映射它的消息呢
- 我是第一次来北京,很不熟悉,在哪里租房好呢?一般要多少钱?很急啊!
- 如何让程序持续响应鼠标消息
- 应聘vc程序员,笔试通过后,面试时会碰到哪些问题??
- 打包个cab&sign到[email protected],马上给100分哦。
- 高分寻求拼图游戏的VC算法
- VC6.0英文版哪里有下载?????谢谢,告诉我分全是你的
- 关于获取窗体句柄的问题~高手支招~~谢谢~~我狠头疼啊~~
- vc中怎么实现在对话框显示后,自动运行进度条,需要外部传递两个数值。
在父窗口处理一下这个消息就好了
在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;
}
}
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_MODE, OnTcnSelchangeTabMode);
用SetCurSel是可以改变当前TAB控件选择的页面,但是不能触发OnTcnSelchangeTabMode事件,我的目的就是这样,为何我的SendMessage不起作用啊,请大家继续支持,谢谢!
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));
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)); nmhdr这是一个局部变量,我不知道SendMessage之后主窗体是否还来的急处理消息,因为此过程马上就要结束了
{
NMHDR nmhdr;
nmhdr.code = TCN_SELCHANGE;
nmhdr.hwndFrom = m_tab.GetSafeHwnd();
nmhdr.idFrom= m_tab.GetDlgCtrlID(); ::SendMessage(::GetDlgItem(AfxGetApp()->GetMainWnd()->GetSafeHwnd(), IDC_TAB1),TCM_SETCURSEL,01,NULL);
::SendMessage(::GetDlgItem(AfxGetApp()->GetMainWnd()->GetSafeHwnd(), IDC_TAB1), WM_NOTIFY,MAKELONG(TCN_SELCHANGE,1), (LPARAM)(&nmhdr));
}