社区
界面
帖子详情
100分求 模拟鼠标发送双击消息给CTreeCtrl中指定ITEM的代码
summerICEREDTEA
2006-08-18 10:06:29
rt
...全文
580
18
打赏
收藏
100分求 模拟鼠标发送双击消息给CTreeCtrl中指定ITEM的代码
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
summerICEREDTEA
2006-08-21
打赏
举报
回复
aluzi(aluzi)
确实是SendMessage啊 但是要发送位置参数啊
aluzi
2006-08-20
打赏
举报
回复
直接用SendMessage就行了,干吗模拟鼠标点击?
折腾_苏州
2006-08-20
打赏
举报
回复
楼上一点提醒,另我茅塞顿开啊,怎么没考虑到VirtualAllocEx:-)
针对楼主情况,我写了一篇blog,楼主可去看看;
http://blog.csdn.net/seu07201213/archive/2006/08/19/1097305.aspx
jerry
2006-08-18
打赏
举报
回复
如果你能得到该树的句柄.
TreeView_GetItemRect(hwndTree, hTreeItem, &rect, TRUE);
可以得到其它进程的控件信息
::ClientToScreen(hwndTree, &pt);
也可以运行
发送鼠标事件与进程无关. 所以. 你还是可以按这个方法去做
lixiaosan
2006-08-18
打赏
举报
回复
假如树是如此排列的
---1
|
---2
|
-----3
数句柄:hwnd
你找到他们的HTREEITEM,分别为hItem1, hItem2, hItem3
假如你要双击3
TreeView_EnsureVisible(hwnd, hItem3);
CRect rect;
TreeView_GetItemRect(hwnd, hItem3, &rect, TRUE);
CPoint pt;
pt.x = rect.left + rect.Width()/2;
pt.y = rect.top + rect.Height()/2;
::ClientToScreen(hwnd, &pt);
SetCursorPos(pt.x, pt.y);
mouse_event(MOUSEEVNETF_LEFTDOWN, 0, 0, 0);
mouse_event(MOUSEEVNETF_LEFTUP, 0, 0, 0);
mouse_event(MOUSEEVNETF_LEFTDOWN, 0, 0, 0);
mouse_event(MOUSEEVNETF_LEFTUP, 0, 0, 0);
mynamelj
2006-08-18
打赏
举报
回复
mark
jerry
2006-08-18
打赏
举报
回复
楼上。
*(HTREEITEM*)&rc = hTreeItem;
SendMessage(hwndTreeView, TVM_GETITEMRECT, FALSE, (LPARAM)&rc);
跨进程不能这样做。 你将你进程内的内存地址传入其它进程,指望它会正确填充吗
这里需要有点技巧。可以用
OpenProcess 打开进程
VirtualAllocEx 在该进程内分配内存
lixiaosan
2006-08-18
打赏
举报
回复
CRect rect;
TreeView_GetItemRect(hwndTree, hTreeItem, &rect, TRUE);
ClientToScreen(....);
mouse_event(MOUSEEVENTF_LEFTDOWN, .....);
mouse_event(MOUSEEVENTF_LEFTUP, .....);
mouse_event(MOUSEEVENTF_LEFTDOWN, .....);
mouse_event(MOUSEEVENTF_LEFTUP, .....);
summerICEREDTEA
2006-08-18
打赏
举报
回复
krh2001(边城浪子)
谢谢你的指导
还有个问题忘了说了 我操作的是其他进程的树控件
http://community.csdn.net/Expert/topic/4951/4951006.xml?temp=.3357202
这是我的另一个帖子 你可以看看 我有什么问题吗
我发送TVM_GETITEMRECT消息 得不到正确的结果
jerry
2006-08-18
打赏
举报
回复
1) 取得该ITEM的坐标。CTreeCtrl::GetItemRect
2)转换到屏幕坐标 CTreeCtrl::ClientToScreen
2) mouse_event 发送模拟鼠标消息到该矩形内一点。
折腾_苏州
2006-08-18
打赏
举报
回复
TreeView_GetItemRect宏 跨进程似乎取不到rect;
RECT rc;
*(HTREEITEM*)&rc = hTreeItem;
SendMessage(hwndTreeView, TVM_GETITEMRECT, FALSE, (LPARAM)&rc);
SendMessage会返回FALSE, 在同一进程是可以这么取的
跨进程,可这么解决:
先获取tree的位置,根据item的位置和item的高度结合tree的rect来确定其位置,最后
模拟鼠标事件
CRect和CPoint可用RECT和POINT替换
RECT rect;
POINT pt;
pt.x = rect.left + (rect.right-rect.left)/2;
pt.y = rect.top + (rect.bottom-rect.top)/2;
::ClientToScreen(htree, &pt);
SetCursorPos(pt.x, pt.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0,0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0,0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0,0);
littlepboy
2006-08-18
打赏
举报
回复
晕,这些要包含MFC的类啊
#include <afxwin.h>
Y___Y
2006-08-18
打赏
举报
回复
看看SendMessage()函数
m_dbsky
2006-08-18
打赏
举报
回复
是不是哪写错了,或是你Copy的代码,可能会有其他字符在里面
你查一下MSDN哦,
VOID mouse_event(
DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
ULONG_PTR dwExtraInfo
);
MOUSEEVENTF_LEFTDOWN,MOUSEEVENTF_LEFTUP是这样写的
summerICEREDTEA
2006-08-18
打赏
举报
回复
MOUSEEVENTF_LEFTDOWN 也是未定义
我建立的是win32 project
summerICEREDTEA
2006-08-18
打赏
举报
回复
CRect和CPoint要包含什么头文件才能调用啊
我include <windows.h>
提示CRect : undeclared identifier
summerICEREDTEA
2006-08-18
打赏
举报
回复
非常感谢,早上有点忙 现在才看到
马上实验,成功就结贴
m_dbsky
2006-08-18
打赏
举报
回复
感谢lixiaosan(小三) 啊
我刚遇到一个类似的问题,模拟鼠标发送消息给CTabCtrl实现切换,搜索资料就跑到这来了,我借用了下lixiaosan(小三) 的代码,成功了,感谢lixiaosan(小三) 啊
以下是我的代码:(模拟鼠标发送消息给CTabCtrl实现切换),希望对你有用
void CMainFrame::MouseChengeTab(int i)
{
HWND hParent=AfxGetMainWnd()->m_hWnd;
HWND hwnd=::FindWindowEx(hParent,NULL,NULL,NULL);//
HWND hwnd_1=::FindWindowEx(hwnd,NULL,"#32770",NULL);
HWND hwnd_2=::FindWindowEx(hwnd,hwnd_1,"#32770",NULL);
HWND hTab=::FindWindowEx(hwnd_2,NULL,"SysTabControl32","Tab1");//tab的句柄
CRect rc;
TabCtrl_GetItemRect(hTab,i,&rc);//TCM_GETITEMRECT
CPoint pt;
pt.x = rc.left + rc.Width()/2;
pt.y = rc.top + rc.Height()/2;
::ClientToScreen(hTab, &pt);
SetCursorPos(pt.x, pt.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0,0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP ,0, 0, 0, 0);
}
关于C
Tree
Ctrl
上添加CToolTip
Ctrl
class C
Tree
Ctrl
hAssiant{public: static void AddNode(CMyToolTip
Ctrl
&
tree
Ctrl
) {
tree
Ctrl
.m_pToolTip
Ctrl
= new CToolTip
Ctrl
; if (!
tree
Ctrl
.m_pToolTip
Ctrl
->Create( &
tree
Ctrl
, TTS_ALWAYSTIP)) { TRAC
MFC模型树控件
Tree
Ctrl
实现按下
Ctrl
键多选,按下Shift键连选
本文介绍了一种在MFC的
Tree
Ctrl
中
实现
Ctrl
键多选和Shift键连选的方法。通过继承C
Tree
Ctrl
类创建C
Tree
Ctrl
Ex,并重写
鼠标
和键盘事件处理函数,实现多选功能。
IE控制条的实现
本文介绍了一个仿IE浏览器的控制条实现方法,包括界面绘制、关闭功能、尺寸调整及使用方式。该控件支持类似IE收藏夹栏的功能,可通过
代码
轻松集成。
vc 树型控件
中
SetCheck()函数的使用
本文详细介绍如何在
Tree
View控件
中
正确使用SetCheck方法,并提供了一种处理
Tree
View
中
Checkbox改变状态的方法,同时还介绍了如何处理
Tree
View控件
中
的子窗口问题。
MFC程序快速套用28款现成皮肤:Skin++ 2.0 SDK直连+命令行换肤支持
一套开箱即用的MFC界面美化工具,基于Skin++ 2.0 SDK实现,含SkinPPWTL.h头文件、SkinPPWTL.lib静态库和SkinPPWTL.dll动态库,适配VC6.0到VS2019全系列开发环境。集成28个SSK格式皮肤文件,包括XP-Luna、XP-Metallic、MAC、Longhorn、Royale、Christmas、AquaOS、SlickOS2、Gloss、PurpleClass等风格,覆盖经典Windows、Mac拟物、科技感、节日主题及现代渐变等多种视觉类型。使用时只需
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章