高手请进!在线等!

时间:2022-09-18 18:40:53
我想做这样一个东西:
单文档程序,左边有一个对话条,右边是客户区;
当我点击某加速键的时候,程序会抓到鼠标的所在点,然后在客户区写出:move to ...,然后换行;
然后我在对话条的下拉框中选择一个鼠标命令,如单击,双击,然后在客户区写出该命令,然后换行;
写完后存成一个文件,并设置一个加速键,以后当程序运行的时候,按加速键就会运行保存起来的任务。

请高手指点:
使用那个函数能抓到鼠标所在的点?
如何得到客户区左上角的坐标?
写完存成文件后,按加速键就执行这些任务是通过什么实现的?

谢谢!

10 个解决方案

#1


gz

#2


GetCursorPos()
GETCLIENTRECT(),CLIENTTOSCREEN()

#3


up

#4


GetCursorPos函数可获得鼠标所在的点的坐标,具体为:
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并没有得到客户区的坐标,为什么?

#9


guizi6():
能具体讲讲怎么使用的马?
谢谢!

#10


最后一个问题.
你的PROJECT的RESOURCE VIEW里面不是有个ACCELERATOR么?在里面添加快捷键,然后在CPP里面把这些快捷键映射到函数就可以了.
MFC自动生成的代码就是最好的例子,你可以看看.

#1


gz

#2


GetCursorPos()
GETCLIENTRECT(),CLIENTTOSCREEN()

#3


up

#4


GetCursorPos函数可获得鼠标所在的点的坐标,具体为:
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并没有得到客户区的坐标,为什么?

#9


guizi6():
能具体讲讲怎么使用的马?
谢谢!

#10


最后一个问题.
你的PROJECT的RESOURCE VIEW里面不是有个ACCELERATOR么?在里面添加快捷键,然后在CPP里面把这些快捷键映射到函数就可以了.
MFC自动生成的代码就是最好的例子,你可以看看.