VC 获取鼠标 点击时的屏幕坐标

#include "stdafx.h"
#include <stdio.h>

HWND     MainHwnd;
HWND     TrackHwnd;

UINT     g_nXCoor;  
UINT     g_nYCoor;
//
LRESULT CALLBACK WndProcMain (HWND hWnd, UINT message, WPARAM wParam ,LPARAM lParam);
LRESULT CALLBACK WndProcTrack (HWND hWnd, UINT message, WPARAM wParam ,LPARAM lParam);



int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrev,
      char * lpCmdLine, int nShowCmd )
{

WNDCLASSEX     WndClassEx;           //设计类

WndClassEx.cbSize   = sizeof( WNDCLASSEX );
WndClassEx.style   = NULL;
WndClassEx.lpfnWndProc = WndProcMain;

WndClassEx.cbClsExtra = 0;
WndClassEx.cbWndExtra = 0;
WndClassEx.hInstance = hInstance;
WndClassEx.hIcon   = LoadIcon( NULL, IDI_APPLICATION );
WndClassEx.hCursor   = LoadCursor( NULL, IDC_ARROW );
WndClassEx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

WndClassEx.lpszMenuName = NULL;
WndClassEx.lpszClassName = "MyWndClassMain";
WndClassEx.hIconSm   = LoadIcon( NULL, IDI_APPLICATION );

::RegisterClassEx( &WndClassEx );      //注册类



MainHwnd = CreateWindow ( "MyWndClassMain", "My First Windows", WS_OVERLAPPEDWINDOW,
        100, 100, 600, 600, NULL, NULL, hInstance, NULL);          //创建窗口

WndClassEx.lpfnWndProc = WndProcTrack;
WndClassEx.lpszClassName = "MyWndClassTrack";
::RegisterClassEx( &WndClassEx );

TrackHwnd = CreateWindow ("MyWndClassTrack", "TrackWindows", WS_OVERLAPPEDWINDOW | WS_CHILD,
        0, 0, 200, 50, MainHwnd, NULL, hInstance, NULL);      //创建窗口


ShowWindow (MainHwnd, nShowCmd );     //显示窗口
ShowWindow (TrackHwnd, nShowCmd );    //显示窗口

MSG msg;          //消息
while( GetMessage( &msg,NULL,NULL,NULL ) )
{  
::DispatchMessage( &msg ); //将消息分发到窗口函数
}
return 0;
}

LRESULT CALLBACK WndProcMain (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_MOUSEMOVE: //鼠标移动

g_nXCoor = LOWORD( lParam );   // 鼠标横坐标
g_nYCoor = HIWORD( lParam );    // 鼠标纵坐标

InvalidateRect( hWnd, NULL,TRUE );   //增加重绘区域

MoveWindow (TrackHwnd, g_nXCoor + 15, g_nYCoor + 15, 200, 50, TRUE );   //改变窗口的大小和位置
break;

case WM_PAINT:   //绘制
{  
   PAINTSTRUCT   PS; //定义PAINTSTRUCT结构来记录一些绘制信息
   HDC     hDC;   //定义HDC类
   RECT    rectClient;   //定义RECT类
  
   hDC = BeginPaint (hWnd, &PS);   
    GetClientRect ( hWnd, &rectClient);   
  
   MoveToEx (hDC, g_nXCoor, rectClient.top, NULL );
   LineTo (hDC, g_nXCoor, rectClient.bottom);  
  
   MoveToEx (hDC, rectClient.left, g_nYCoor, NULL );
   LineTo (hDC, rectClient.right, g_nYCoor);  
  
   EndPaint (hWnd, &PS);
}
break;

case WM_DESTROY:
::PostQuitMessage ( 0 );     //销毁窗口
break;

default:
return ::DefWindowProc(hWnd, message, wParam, lParam ); //默认的消息处理的回调函数
}

return TRUE;
}

LRESULT CALLBACK WndProcTrack (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_PAINT:   //显示坐标
{
   PAINTSTRUCT PS;   //定义PAINTSTRUCT结构来记录一些绘制信息
   HDC    hDC;   //定义HDC类
   RECT   rectClient;   //定义RECT类
   CHAR   strMousePosition[100];  

   hDC = BeginPaint (hWnd, &PS);
  
   GetClientRect (hWnd, &rectClient);
   
   sprintf (strMousePosition, "Mouse Pt: x= %4d y = %4d", g_nXCoor, g_nYCoor); //格式化输出到字符串
   
   TextOut (hDC, 0, 0, strMousePosition, strlen ( strMousePosition));   //输出坐标
   
   EndPaint (hWnd, &PS);
}
break;

case WM_DESTROY:
::PostQuitMessage( 0 );   //销毁窗口
break;

default:

return ::DefWindowProc(hWnd, message, wParam, lParam );   //默认的消息处理的回调函数
}

return TRUE;
}

http://hi.baidu.com/vipver/blog/item/9ea3770965c3fb2d6a60fb02.html

### 回答1: VC鼠标自动循环点击源代码是指使用VC(Visual C++)编程语言编写的程序,用于实现鼠标自动循环点击的功能。以下是一个简单的示例代码: ```c++ #include <Windows.h> // 引入Windows.h头文件 int main() { int count = 0; // 设置点击次数 int interval = 1000; // 设置点击间隔(单位:毫秒) while(count < 10) // 循环点击10次 { POINT p; // 定义一个点的结构体,用于保存当前鼠标坐标 GetCursorPos(&p); // 获取当前鼠标坐标 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); // 模拟鼠标左键点击 Sleep(interval); // 休眠指定的间间隔 count++; // 点击次数自增 } return 0; } ``` 以上代码通过循环控制鼠标点击次数,通过`GetCursorPos`函数获取鼠标当前的坐标,并通过`mouse_event`函数模拟鼠标左键的点击操作。同,通过`Sleep`函数实现点击间隔的控制。该代码简单实现了鼠标自动循环点击的功能。 ### 回答2: 要编写VC鼠标自动循环点击的源代码,可以使用以下步骤: 1. 引入相关库和头文件:在代码开头使用`#include`指令引入`Windows.h`头文件,以及一些其他可能需要的库和头文件。 2. 定义主函数:使用`int main()`定义主函数。 3. 获取屏幕尺寸:使用`GetSystemMetrics()`函数获取屏幕的宽度和高度。 4. 创建鼠标点击的循环:使用`for`循环,设置循环次数或使用`while`循环,并给一个终止循环的条件。 5. 声明鼠标点击位置:使用`MOUSE_EVENTF_LEFTDOWN`和`MOUSE_EVENTF_LEFTUP`来模拟鼠标左键的按下和抬起操作。 6. 鼠标点击位置:使用`SetCursorPos()`函数设定鼠标点击的位置,可以使用特定的坐标点,也可以使用屏幕尺寸进行随机点击。 7. 进行鼠标点击操作:使用`mouse_event()`函数来模拟鼠标点击。 8. 设置鼠标点击的延迟:使用`Sleep()`函数设置鼠标点击之间的延迟,以控制点击速度。 9. 释放资源:使用`ReleaseCapture()`函数来释放鼠标捕捉。 10. 返回值:使用`return`语句返回0。 总的来说,以上步骤描述了实现VC鼠标自动循环点击的基本流程和代码框架。具体的实现还需根据实际需求进一步完善和调整。希望能对你有所帮助。 ### 回答3: vc鼠标自动循环点击源代码可以使用C++编写,以下是一个简单的实现: ```c++ #include <windows.h> int main() { // 获取屏幕宽高 int screenWidth = GetSystemMetrics(SM_CXSCREEN); int screenHeight = GetSystemMetrics(SM_CYSCREEN); // 设置鼠标点击位置 int posX = screenWidth / 2; int posY = screenHeight / 2; // 设置点击次数和间隔间 int clickCount = 10; int interval = 1000; // 循环模拟鼠标点击 for (int i = 0; i < clickCount; i++) { // 移动鼠标到指定位置 SetCursorPos(posX, posY); // 模拟鼠标左键按下和抬起 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // 间隔一定间后继续下一次点击 Sleep(interval); } return 0; } ``` 以上代码使用了Windows API中的一些函数和结构体实现了鼠标自动循环点击的功能。具体步骤如下: 1. 获取屏幕的宽度和高度,用来确定鼠标点击位置。 2. 设置需要点击的次数和每次点击的间隔间。 3. 使用一个循环来模拟鼠标点击操作。 4. 在每次循环中,先将鼠标移动到指定的位置,再模拟鼠标左键按下和抬起的操作。 5. 最后,在每次点击之间间隔指定的间。 以上代码只是一个简单的示例,可以根据实际需求进行修改和扩展。注意,在编译和运行代码前,需要在项目属性中添加Windows SDK的库文件依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值