#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 之处理鼠标移动的更多相关文章

  1. 学习windows编程 day6 之模拟记事本

    //短的函数最好定义为宏 #define BUFFER(x,y) *(y*cxBuffer+x+pBuffer)//取出一个字符 //字符消息 //WM_CHAR,WM_DEADCHAR,WM_SYS ...

  2. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

  3. 我为什么学习Windows编程

    前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...

  4. 学习windows编程 day2 之滚动条使用

    相关函数: setscrollrange,setscrollpos,getscrollrange,getscrollpos 使用滚动条时我们需要进行的操作: 1.初始化滚动条范围和位置 在窗口创建时W ...

  5. 学习windows编程 day1

    #include <windows.h> #include <strsafe.h> /* 任务:去掉标题栏和边框 */ //#define LineHeight 15 这是自己 ...

  6. 学习windows编程 day4 之 绘制随机矩形和peekMessage

    #include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...

  7. 学习windows编程 day4 之 自定义映射

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  8. 学习windows编程 day4 之视口和窗口

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  9. 学习windows编程 day4 之 盯裆猫

    写着写着就困了.... 看这些测量数据就算了,是对各种函数的练习 #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT ...

随机推荐

  1. java — 静态绑定和动态绑定

    绑定:一个方法的调用与方法所在的类关联起来.java中的绑定分为静态绑定和动态绑定,又被称作前期绑定和后期绑定. 静态绑定:(final.static.private)在程序执行前已经被绑定,也就是说 ...

  2. HDOJ2013_蟠桃记

    水题 HDOJ2013_蟠桃记 #include<stdio.h> #include<stdlib.h> #include<math.h> #include< ...

  3. Java Swing 实现系统托盘图标

    在实现托盘图标时,出现弹出式菜单显示中文乱码,无法显示正确的文字 查询相关资料后发现是字符编码不匹配,查询资料出处 解决方法 1.通过修改Java项目的默认编码为GBK: 2.在Run Configu ...

  4. Ajax的注意事项

    case 1: 无论是使用原生的JavaScript,还是JQuery,通过Ajax请求后端程序数据,返回的数据默认是字符串,字符串,字符串,重要的事情说三遍!!! case 2: 不要尝试直接将返回 ...

  5. python3_列表、元组、集合、字典

    列表list #列表的基本操作 >>> a=[] #创建空列表 >>> a = [0,1,2,3,4,5] #创建列表并初始化,列表是[]包含由逗号分隔的多个元素组 ...

  6. 软件开的目录规范+sys,os,time模块

    —————————————————————————————————————————————————————————————————— start.py import sys,os # print(__ ...

  7. python之Map函数

    # map()函数使用举例 # 功能:map()接受一个函数f和一个或多个list,将f依次作用在list的每个元素,得到一个新的列表 # 语法:map(方法名,列表,[列表2]) # 注意:map( ...

  8. 近端梯度算法(Proximal Gradient Descent)

    L1正则化是一种常用的获取稀疏解的手段,同时L1范数也是L0范数的松弛范数.求解L1正则化问题最常用的手段就是通过加速近端梯度算法来实现的. 考虑一个这样的问题: minx  f(x)+λg(x) x ...

  9. Educational Codeforces Round 58 Div. 2 自闭记

    明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...

  10. TCP的三次握手与四次挥手过程,各个状态名称与含义

    三次握手 第一次握手:主机A发送位码为syn=1,随机产生seq number=10001的数据包到服务器,主机B由SYN=1知道,A要求建立联机,此时状态为SYN_SENT: 第二次握手:主机B收到 ...