单文档程序,左边有一个对话条,右边是客户区;
当我点击某加速键的时候,程序会抓到鼠标的所在点,然后在客户区写出:move to ...,然后换行;
然后我在对话条的下拉框中选择一个鼠标命令,如单击,双击,然后在客户区写出该命令,然后换行;
写完后存成一个文件,并设置一个加速键,以后当程序运行的时候,按加速键就会运行保存起来的任务。
请高手指点:
使用那个函数能抓到鼠标所在的点?
如何得到客户区左上角的坐标?
写完存成文件后,按加速键就执行这些任务是通过什么实现的?
谢谢!
10 个解决方案
#1
gz
#2
GetCursorPos()
GETCLIENTRECT(),CLIENTTOSCREEN()
GETCLIENTRECT(),CLIENTTOSCREEN()
#3
up
#4
GetCursorPos函数可获得鼠标所在的点的坐标,具体为:
POINT Pos;
if (GetCursorPos(&Pos) != 0)
{
// 成功,Pos.x和Pos.y分别为x,y的坐标
}
else
{
// 失败
...
}
POINT Pos;
if (GetCursorPos(&Pos) != 0)
{
// 成功,Pos.x和Pos.y分别为x,y的坐标
}
else
{
// 失败
...
}
#5
谢谢各位
最后一个问题是通过什么办法实现的?
又精通钩子的高手在吗?
最后一个问题是通过什么办法实现的?
又精通钩子的高手在吗?
#6
up
#7
RegisterHotkey()
#8
int y = 0;
int m = 0;
void CMainFrame::OnPoint()
{
POINT point;
CClientDC ClientDC(this);
GetCursorPos(&point);
ClientDC.SelectStockObject(DEVICE_DEFAULT_FONT);
CRect rt;
GetClientRect(&rt);
ClientToScreen(&rt);
//计算字高
int LineHeight;
TEXTMETRIC TM;
ClientDC.GetTextMetrics(&TM);
LineHeight = TM.tmHeight + TM.tmExternalLeading;
//往客户区里写
CString str1 = "Move to ";
CString str2 = "";
str2.Format(_T("%d,%d"), point.x, point.y);
str1 += str2;
if(m == 0)
{
y += rt.top;
ClientDC.TextOut(rt.left+MARGIN, y, str1);
}
else
ClientDC.TextOut(rt.left+MARGIN, y, str1);
y += LineHeight;
m++;
}
getclientrect和clienttoscreen并没有得到客户区的坐标,为什么?
int m = 0;
void CMainFrame::OnPoint()
{
POINT point;
CClientDC ClientDC(this);
GetCursorPos(&point);
ClientDC.SelectStockObject(DEVICE_DEFAULT_FONT);
CRect rt;
GetClientRect(&rt);
ClientToScreen(&rt);
//计算字高
int LineHeight;
TEXTMETRIC TM;
ClientDC.GetTextMetrics(&TM);
LineHeight = TM.tmHeight + TM.tmExternalLeading;
//往客户区里写
CString str1 = "Move to ";
CString str2 = "";
str2.Format(_T("%d,%d"), point.x, point.y);
str1 += str2;
if(m == 0)
{
y += rt.top;
ClientDC.TextOut(rt.left+MARGIN, y, str1);
}
else
ClientDC.TextOut(rt.left+MARGIN, y, str1);
y += LineHeight;
m++;
}
getclientrect和clienttoscreen并没有得到客户区的坐标,为什么?
#9
guizi6():
能具体讲讲怎么使用的马?
谢谢!
能具体讲讲怎么使用的马?
谢谢!
#10
最后一个问题.
你的PROJECT的RESOURCE VIEW里面不是有个ACCELERATOR么?在里面添加快捷键,然后在CPP里面把这些快捷键映射到函数就可以了.
MFC自动生成的代码就是最好的例子,你可以看看.
你的PROJECT的RESOURCE VIEW里面不是有个ACCELERATOR么?在里面添加快捷键,然后在CPP里面把这些快捷键映射到函数就可以了.
MFC自动生成的代码就是最好的例子,你可以看看.
#1
gz
#2
GetCursorPos()
GETCLIENTRECT(),CLIENTTOSCREEN()
GETCLIENTRECT(),CLIENTTOSCREEN()
#3
up
#4
GetCursorPos函数可获得鼠标所在的点的坐标,具体为:
POINT Pos;
if (GetCursorPos(&Pos) != 0)
{
// 成功,Pos.x和Pos.y分别为x,y的坐标
}
else
{
// 失败
...
}
POINT Pos;
if (GetCursorPos(&Pos) != 0)
{
// 成功,Pos.x和Pos.y分别为x,y的坐标
}
else
{
// 失败
...
}
#5
谢谢各位
最后一个问题是通过什么办法实现的?
又精通钩子的高手在吗?
最后一个问题是通过什么办法实现的?
又精通钩子的高手在吗?
#6
up
#7
RegisterHotkey()
#8
int y = 0;
int m = 0;
void CMainFrame::OnPoint()
{
POINT point;
CClientDC ClientDC(this);
GetCursorPos(&point);
ClientDC.SelectStockObject(DEVICE_DEFAULT_FONT);
CRect rt;
GetClientRect(&rt);
ClientToScreen(&rt);
//计算字高
int LineHeight;
TEXTMETRIC TM;
ClientDC.GetTextMetrics(&TM);
LineHeight = TM.tmHeight + TM.tmExternalLeading;
//往客户区里写
CString str1 = "Move to ";
CString str2 = "";
str2.Format(_T("%d,%d"), point.x, point.y);
str1 += str2;
if(m == 0)
{
y += rt.top;
ClientDC.TextOut(rt.left+MARGIN, y, str1);
}
else
ClientDC.TextOut(rt.left+MARGIN, y, str1);
y += LineHeight;
m++;
}
getclientrect和clienttoscreen并没有得到客户区的坐标,为什么?
int m = 0;
void CMainFrame::OnPoint()
{
POINT point;
CClientDC ClientDC(this);
GetCursorPos(&point);
ClientDC.SelectStockObject(DEVICE_DEFAULT_FONT);
CRect rt;
GetClientRect(&rt);
ClientToScreen(&rt);
//计算字高
int LineHeight;
TEXTMETRIC TM;
ClientDC.GetTextMetrics(&TM);
LineHeight = TM.tmHeight + TM.tmExternalLeading;
//往客户区里写
CString str1 = "Move to ";
CString str2 = "";
str2.Format(_T("%d,%d"), point.x, point.y);
str1 += str2;
if(m == 0)
{
y += rt.top;
ClientDC.TextOut(rt.left+MARGIN, y, str1);
}
else
ClientDC.TextOut(rt.left+MARGIN, y, str1);
y += LineHeight;
m++;
}
getclientrect和clienttoscreen并没有得到客户区的坐标,为什么?
#9
guizi6():
能具体讲讲怎么使用的马?
谢谢!
能具体讲讲怎么使用的马?
谢谢!
#10
最后一个问题.
你的PROJECT的RESOURCE VIEW里面不是有个ACCELERATOR么?在里面添加快捷键,然后在CPP里面把这些快捷键映射到函数就可以了.
MFC自动生成的代码就是最好的例子,你可以看看.
你的PROJECT的RESOURCE VIEW里面不是有个ACCELERATOR么?在里面添加快捷键,然后在CPP里面把这些快捷键映射到函数就可以了.
MFC自动生成的代码就是最好的例子,你可以看看.