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

来源:互联网 发布:域名变更备案ip 编辑:程序博客网 时间:2024/05/01 23:12

#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