#include <windows.h>#include <stdio.h>HWND MainHwnd;
HWND TrackHwnd;
HWND Hd;
POINT point;
POINT pos;
UINT xCoor ;
UINT yCoor ;
UINT g_nXCoor;
UINT g_nYCoor; LRESULT CALLBACK WndProcMain (HWND hWnd, UINT message, WPARAM wParam ,LPARAM lParam);
int WINAPI 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.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
WndClassEx.hCursor = LoadCursor( NULL, IDC_ARROW ); //窗口采用箭头光标
WndClassEx.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//窗口背景为灰色
WndClassEx.lpszMenuName = NULL;
WndClassEx.lpszClassName = "MyWndClassMain";
::RegisterClassEx( &WndClassEx ); MainHwnd = CreateWindow ( "MyWndClassMain", "My First Windows", WS_OVERLAPPEDWINDOW,
100, 100, 600, 600, NULL, NULL, hInstance, NULL);
Hd = GetDesktopWindow();ShowWindow (MainHwnd, nShowCmd );
UpdateWindow(MainHwnd);MSG msg;
while( GetMessage( &msg,NULL,NULL,NULL ) )
{
TranslateMessage(&msg);
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 ); GetCursorPos(&pos);
xCoor = pos.x;
yCoor = pos.y;
point.x = g_nXCoor;
point.y = g_nYCoor;
Hd = GetDesktopWindow();
//ClientToScreen(hWnd, &point); InvalidateRect( NULL,NULL,TRUE );
/*RedrawWindow(NULL,
NULL,
NULL,
RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW | RDW_ALLCHILDREN); */
case WM_LBUTTONDOWN:
SetCapture(MainHwnd);
InvalidateRect(NULL,NULL,TRUE);
break;
case WM_LBUTTONUP:
ReleaseCapture();
InvalidateRect(NULL,NULL,TRUE);
break; case WM_PAINT:
{
HDC hDC;
RECT rectClient;
PAINTSTRUCT PS;
hDC = GetDC(NULL);
GetWindowRect(Hd, &rectClient); //划线
MoveToEx (hDC, pos.x, rectClient.top, NULL );
LineTo (hDC, pos.x, rectClient.bottom); MoveToEx (hDC, rectClient.left, pos.y, NULL );
LineTo (hDC, rectClient.right, pos.y); CHAR strMousePosition[100];hDC = BeginPaint (hWnd, &PS);
sprintf (strMousePosition, "Mouse Pt: x= %4d y = %4d", pos.x, pos.y);
TextOut (hDC, 0, 0, strMousePosition, strlen ( strMousePosition));//文字输出
EndPaint(hWnd, &PS); ReleaseDC(Hd,hDC);}
break;case WM_DESTROY:
PostQuitMessage ( 0 );
break;default:
return DefWindowProc(hWnd, message, wParam, lParam );
}return TRUE;
}
HWND TrackHwnd;
HWND Hd;
POINT point;
POINT pos;
UINT xCoor ;
UINT yCoor ;
UINT g_nXCoor;
UINT g_nYCoor; LRESULT CALLBACK WndProcMain (HWND hWnd, UINT message, WPARAM wParam ,LPARAM lParam);
int WINAPI 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.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
WndClassEx.hCursor = LoadCursor( NULL, IDC_ARROW ); //窗口采用箭头光标
WndClassEx.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//窗口背景为灰色
WndClassEx.lpszMenuName = NULL;
WndClassEx.lpszClassName = "MyWndClassMain";
::RegisterClassEx( &WndClassEx ); MainHwnd = CreateWindow ( "MyWndClassMain", "My First Windows", WS_OVERLAPPEDWINDOW,
100, 100, 600, 600, NULL, NULL, hInstance, NULL);
Hd = GetDesktopWindow();ShowWindow (MainHwnd, nShowCmd );
UpdateWindow(MainHwnd);MSG msg;
while( GetMessage( &msg,NULL,NULL,NULL ) )
{
TranslateMessage(&msg);
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 ); GetCursorPos(&pos);
xCoor = pos.x;
yCoor = pos.y;
point.x = g_nXCoor;
point.y = g_nYCoor;
Hd = GetDesktopWindow();
//ClientToScreen(hWnd, &point); InvalidateRect( NULL,NULL,TRUE );
/*RedrawWindow(NULL,
NULL,
NULL,
RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW | RDW_ALLCHILDREN); */
case WM_LBUTTONDOWN:
SetCapture(MainHwnd);
InvalidateRect(NULL,NULL,TRUE);
break;
case WM_LBUTTONUP:
ReleaseCapture();
InvalidateRect(NULL,NULL,TRUE);
break; case WM_PAINT:
{
HDC hDC;
RECT rectClient;
PAINTSTRUCT PS;
hDC = GetDC(NULL);
GetWindowRect(Hd, &rectClient); //划线
MoveToEx (hDC, pos.x, rectClient.top, NULL );
LineTo (hDC, pos.x, rectClient.bottom); MoveToEx (hDC, rectClient.left, pos.y, NULL );
LineTo (hDC, rectClient.right, pos.y); CHAR strMousePosition[100];hDC = BeginPaint (hWnd, &PS);
sprintf (strMousePosition, "Mouse Pt: x= %4d y = %4d", pos.x, pos.y);
TextOut (hDC, 0, 0, strMousePosition, strlen ( strMousePosition));//文字输出
EndPaint(hWnd, &PS); ReleaseDC(Hd,hDC);}
break;case WM_DESTROY:
PostQuitMessage ( 0 );
break;default:
return DefWindowProc(hWnd, message, wParam, lParam );
}return TRUE;
}
-------->
InvalidateRect(NULL,NULL,FALSE);
如果操作简单的矩形可以用CRectTracker,编辑其它的图形就自己做一个类,做法可以参考CRectTracker.
想抹掉以前化的内容可以看一下SetROP2这个函数,参数用R2_XORPEN。不懂可以再问