手头上有个三方程序,使用的是TPageControl,上面有几个TabSheet,我现在想用vc写个程序来自动在sheet 0和sheet 2之间切换。另外,sheet 0上有两个button,需要给这两个button发送BM_CLICK消息。现在碰到两个问题:1)在sheet 0和sheet 2之间切换的时候,有时候无法从sheet 2切换到sheet 0。我的切换程序如下:HWND CMyClass::FindTPageControl()
{
//这一段代码使用spy4win生成的代码,用来查找TPageControl。
//代码略
}//这个函数用于切换sheet,直接给TPageControl的父窗口发送鼠标消息,尝试用过NMHDR notify,但是老出错,因此改用直接给父窗口发送鼠标消息。
void CMyClass::ChangePageIdx(HWND hPage, int Value)
{
HWND hParent = ::GetParent(hPage);
CRect rcParent;
::GetWindowRect(hParent, &rcParent);
CPoint pt0(rcParent.left+60, rcParent.top+40);
::ScreenToClient(hPage, &pt0);
::SendMessage(hPage, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt0.x, pt0.y));
}调用如下:HWND hPage=FindTPageControl();
ChangePageIdx(hPage,0);根据我的debug log,程序都已经运行到SendMessage了,坐标点也都是正确的,但是就是无法切换。2)给sheet 0上的button发送BM_Click消息时,有时候也发送失败,代码如下:HWND FindButtonWindow()
{
//这里使用spy4win生成的代码;代码略
}调用代码如下:HWND hwnd=FindButtonWindow();
SendMessage(hWnd,BM_CLICK,0,0);根据我的debug log,hwnd都已经被找到了,就是发送消息这个函数出了问题。请高手帮忙。是不是要activewindows先啊?如何确保每次消息都能发送成功呢?
{
//这一段代码使用spy4win生成的代码,用来查找TPageControl。
//代码略
}//这个函数用于切换sheet,直接给TPageControl的父窗口发送鼠标消息,尝试用过NMHDR notify,但是老出错,因此改用直接给父窗口发送鼠标消息。
void CMyClass::ChangePageIdx(HWND hPage, int Value)
{
HWND hParent = ::GetParent(hPage);
CRect rcParent;
::GetWindowRect(hParent, &rcParent);
CPoint pt0(rcParent.left+60, rcParent.top+40);
::ScreenToClient(hPage, &pt0);
::SendMessage(hPage, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt0.x, pt0.y));
}调用如下:HWND hPage=FindTPageControl();
ChangePageIdx(hPage,0);根据我的debug log,程序都已经运行到SendMessage了,坐标点也都是正确的,但是就是无法切换。2)给sheet 0上的button发送BM_Click消息时,有时候也发送失败,代码如下:HWND FindButtonWindow()
{
//这里使用spy4win生成的代码;代码略
}调用代码如下:HWND hwnd=FindButtonWindow();
SendMessage(hWnd,BM_CLICK,0,0);根据我的debug log,hwnd都已经被找到了,就是发送消息这个函数出了问题。请高手帮忙。是不是要activewindows先啊?如何确保每次消息都能发送成功呢?
http://topic.csdn.net/u/20070701/17/59ebaac2-9ca5-4cc3-93e0-54b9fc8b5ff7.html?397066827
能不能帮忙看看上述代码能实现吗?或者有什么问题?谢谢
如果鼠标切换不出错的话,嗯~~,我那个代码里其实还少了一个TCN_SELCHANGING的NOTIFY消息,你把这个也加上试试先(应该在在TCM_SETCURSEL之前)。
你也可以试试直接发鼠标消息控制,通过TabCtrl_GetItemRect可以得到页标题的位置大小,然后向它发WM_LBUTTONDOWN和WM_LBUTTONUP试试(当然,用mouse_event也好)。