高分求助!我想用C或者C++写一个获取当前鼠标位置的函数,就是getMousePosition的形式,返回两个整数x/y,怎么搞??

qinliu0425 2006-09-27 09:34:54
如题,另外。我想把这个功能放到一个dll中
请各位大虾帮忙。不慎感激
...全文
545 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoyerHuang_悦 2006-10-11
  • 打赏
  • 举报
回复
楼上的,是你自己说要做成dll的吧??LINUX下面又不能用dll,所以没必要考虑这个API的移植呀。。
除非你又说,打算做成so格式的。
qinliu0425 2006-10-11
  • 打赏
  • 举报
回复
调用GetCursorPos在windows上可以,但在linux上就不行了
du51 2006-09-27
  • 打赏
  • 举报
回复
#include <windows.h>
#include <windowsx.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "GetCursorPos";

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_HREDRAW|CS_VREDRAW;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;

wincl.hbrBackground = GetStockBrush(WHITE_BRUSH);;

if (!RegisterClassEx (&wincl))
return 0;

hwnd = CreateWindowEx (
0,
szClassName,
"Windows App",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);

/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}


/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
RECT rt;
PAINTSTRUCT ps;
TCHAR line[100];
POINT curpos;
switch (message) /* handle the messages */
{
case WM_CREATE:
SetTimer(hwnd,200,100,NULL);
break;
case WM_TIMER:
InvalidateRect(hwnd,NULL,FALSE);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rt);
GetCursorPos(&curpos);/*本来就有这个函数*/
TextOut(hdc,rt.right/2-10,rt.bottom/2-10,line,wsprintf(line,TEXT("x=%d y=%d"),curpos.x,curpos.y));
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
KillTimer(hwnd,200);
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}
Jokar 2006-09-27
  • 打赏
  • 举报
回复
呵呵~lz就参考~GetCursorPos的做法传引用或指针参数进去就行了~

不然也可以将结果保存到一个DOWRD形态的变量中,高位WORD存x,低位WORD存y;
相关的宏:MAKELONG(low, high), LOWORD(x), HIWORD(x)~呵呵
飞哥 2006-09-27
  • 打赏
  • 举报
回复
VC 新建一个DLL工程
将上述代码改成你需要的形式,添加进去
设置接口
编译!
飞哥 2006-09-27
  • 打赏
  • 举报
回复
#pragma comment(lib,"user32.lib")

void main()
{
LPPOINT lp;
lp =new POINT;
GetCursorPos(lp);
printf("%l\t%l\n",lp->x,lp->y);
delete lp;

}
OOPhaisky 2006-09-27
  • 打赏
  • 举报
回复
这得调用windows api了

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧