码迷,mamicode.com
首页 > 移动开发 > 详细

学习windows编程 day6 之处理鼠标移动

时间:2018-03-07 23:50:30      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:切换   cli   span   point   size   begin   背景   etc   roc   

#define POINT_MAX 1000

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
static int cxClient, cyClient;
static POINT pt[POINT_MAX];
static int iCount;
int x, y;


switch (message)
{
case WM_LBUTTONDOWN:
iCount = 0;
InvalidateRect(hwnd, NULL, TRUE);
break;
case WM_MOUSEMOVE: //当处理完一个WM_MOUSEMOVE消息后,才会到系统消息队列中去取出下一个,所以,并不是鼠标一直移动就会一直产生WM_MOUSEMOVE消息在消息队列中,其中还可以产生其他消息
if (wParam&MK_LBUTTON && iCount<POINT_MAX)
{
pt[iCount].x = GET_X_LPARAM(lParam); //相比于LOWORD(lParam)更加可靠,在多屏显示时LOWORD(lParam)易出错
pt[iCount++].y = GET_Y_LPARAM(lParam);


hdc = GetDC(hwnd);
SetPixelV(hdc, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0);
ReleaseDC(hwnd, hdc);
}
break;
case WM_LBUTTONUP:
InvalidateRect(hwnd, NULL, FALSE);//不擦除背景,产生WM_PAINT消息
break;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);


SetCursor(LoadCursor(NULL, IDC_WAIT));
//Windows为鼠标光标保存了一个「显示计数」若是安装了鼠标,就会初始为0,否则为-1
//showcursor(true)会增加显示计数,当其非0 时会显示鼠标光标
//ShowCursor(TRUE);//1
for (x = 0; x < iCount;x++)
{
for (y = x+1; y < iCount;y++)
{
MoveToEx(hdc, pt[x].x, pt[x].y, NULL);
LineTo(hdc, pt[y].x, pt[y].y);
}
}
//减少显示计数
//ShowCursor(FALSE);//0
//使两个成对出现,才不会影响其他地方对鼠标的操作


SetCursor(LoadCursor(NULL, IDC_ARROW)); //切换两个备用指针
//设置后鼠标就会显示出样式,不需要showCursor(true)
//(在不移动鼠标情况下不会改变,当鼠标移动时会回复为原来光标图,是因为当产生WM_MOUSEOVE时,系统会自动将鼠标改为原来的(注册时设置的光标)


EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}



return DefWindowProc(hwnd, message, wParam, lParam);
}

 

 

学习windows编程 day6 之处理鼠标移动

标签:切换   cli   span   point   size   begin   背景   etc   roc   

原文地址:https://www.cnblogs.com/ssyfj/p/8525308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!