求助VC向TAB控件发送切换选项卡消息

时间:2021-06-27 14:44:13
我想向一个窗口的TAB控件里面的子控件(一个按钮)发送单击消息.
可是我发现这个窗口在刚运行的时候只有第一个选项卡的控件是初始化了的,其他选项卡的里的子控件都无法获得句柄.只有切换选项卡之后 对应的选项卡的子控件才会初始化并能捕捉到句柄..
所以我想发送sendmessage消息 切换选项卡 然后查找那个按钮
或者大家有什么好的方法也可以教教我  求大虾调教~!

7 个解决方案

#1


大虾求指点啊,还有 我试过网上很多方法都不行,向tab控件的选项按钮发送单击事件,项tab发送CTRL+TAB组合键项主窗口发送组合键 都不行

#2


发送TCM_SETCURFOCUS 消息试下。

#3


谢谢zwfgdlc  我刚才试过了 发送TCM_SETCURFOCUS 消息窗口并没有更新 ,但是选项卡已经切换过去了 
也就是说选项卡是切换了 里面的子控件还是没变.所以那个控件还是没有初始化找不到.
我查了下 要发送TCN_SELCHANGE消息.可是我试了发送了没反应....

BOOL   CALLBACK   EnumChildProc(HWND hWnd,LPARAM   lParam)
{
CStringArray* Strs=(CStringArray*)lParam;
CString ChildName ;
GetClassName(hWnd,ChildName.GetBuffer(512),1024);
//寻找控件句柄发送信息
if (ChildName.CollateNoCase("TPageControl")==0)
{
NMHDR nmhdr;
nmhdr.code=TCN_SELCHANGE;
nmhdr.hwndFrom=hWnd;
nmhdr.idFrom=GetDlgCtrlID(hWnd);
 :: PostMessage (hWnd,WM_NOTIFY,MAKELONG(TCN_SELCHANGE,2),(LPARAM)&nmhdr );
//弹出框参数不为空则查找弹出框
GetClassName(hWnd,ChildName.GetBuffer(1024),1024);
if(ChildName.CollateNoCase("msctls_updown32")==0)
{
}
//找到窗口 停止枚举
//return false;
}
//否则继续
return true;
}

#4


你试试SendMessage?

#5


跨进程吗?

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#7


TAB控件里面的子控件(一个按钮)发送单击消息.

#1


大虾求指点啊,还有 我试过网上很多方法都不行,向tab控件的选项按钮发送单击事件,项tab发送CTRL+TAB组合键项主窗口发送组合键 都不行

#2


发送TCM_SETCURFOCUS 消息试下。

#3


谢谢zwfgdlc  我刚才试过了 发送TCM_SETCURFOCUS 消息窗口并没有更新 ,但是选项卡已经切换过去了 
也就是说选项卡是切换了 里面的子控件还是没变.所以那个控件还是没有初始化找不到.
我查了下 要发送TCN_SELCHANGE消息.可是我试了发送了没反应....

BOOL   CALLBACK   EnumChildProc(HWND hWnd,LPARAM   lParam)
{
CStringArray* Strs=(CStringArray*)lParam;
CString ChildName ;
GetClassName(hWnd,ChildName.GetBuffer(512),1024);
//寻找控件句柄发送信息
if (ChildName.CollateNoCase("TPageControl")==0)
{
NMHDR nmhdr;
nmhdr.code=TCN_SELCHANGE;
nmhdr.hwndFrom=hWnd;
nmhdr.idFrom=GetDlgCtrlID(hWnd);
 :: PostMessage (hWnd,WM_NOTIFY,MAKELONG(TCN_SELCHANGE,2),(LPARAM)&nmhdr );
//弹出框参数不为空则查找弹出框
GetClassName(hWnd,ChildName.GetBuffer(1024),1024);
if(ChildName.CollateNoCase("msctls_updown32")==0)
{
}
//找到窗口 停止枚举
//return false;
}
//否则继续
return true;
}

#4


你试试SendMessage?

#5


跨进程吗?

#6


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#7


TAB控件里面的子控件(一个按钮)发送单击消息.