《Windows程序设计》之BLOKOUT1

2023-05-16

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	static BOOL fBlocking,fValidBox;
	static POINT ptBeg,ptEnd,ptBoxBeg,ptBoxEnd;
	HDC hdc;
	PAINTSTRUCT ps;

	switch(message)
	{
	case WM_LBUTTONDOWN:
		ptBeg.x=ptEnd.x=LOWORD(lParam);
		ptBeg.y=ptEnd.y=HIWORD(lParam);

		DrawBoxOutline(hwnd,ptBeg,ptEnd);
		//设置光标为IDC_CROSS,表示正在画矩形
		SetCursor(LoadCursor(NULL,IDC_CROSS));
		//标志,TRUE表示正在画
		fBlocking=TRUE;
		return 0;
	case WM_MOUSEMOVE:
		if(fBlocking)
		{
			//当鼠标移动时,设置光标为IDC_CROSS
			SetCursor(LoadCursor(NULL,IDC_CROSS));
			//当下面这一行注释点时,移动鼠标会出现下面图片的效果
			DrawBoxOutline(hwnd,ptBeg,ptEnd);
			ptEnd.x=LOWORD(lParam);
			ptEnd.y=HIWORD(lParam);
			//下面这一行也是会出现下面图片的效果
			DrawBoxOutline(hwnd,ptBeg,ptEnd);
		}
		return 0;
	case WM_LBUTTONUP:
		if(fBlocking)
		{
			DrawBoxOutline(hwnd,ptBeg,ptEnd);
			//用来保存最终的矩形
			ptBoxBeg=ptBeg;
			ptBoxEnd.x=LOWORD(lParam);
			ptBoxEnd.y=HIWORD(lParam);
			//光标还原
			SetCursor(LoadCursor(NULL,IDC_ARROW));
			fBlocking=FALSE;
			fValidBox=TRUE;
			//下面后调用WM_PAINT
			InvalidateRect(hwnd,NULL,TRUE);
		}
		return 0;
	case WM_CHAR:
		//x1b是esc,实现效果,当正在画时,点一个esc会取消
		if(fBlocking & (wParam=='\x1B'))
		{
			DrawBoxOutline(hwnd,ptBeg,ptEnd);
			SetCursor(LoadCursor(NULL,IDC_ARROW));
			fBlocking=FALSE;
		}
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hwnd,&ps);
		//这个是用来画鼠标松开时最终的矩形
		if(fValidBox)
		{
			SelectObject(hdc,GetStockObject(BLACK_BRUSH));
			Rectangle(hdc,ptBoxBeg.x,ptBoxBeg.y,ptBoxEnd.x,ptBoxEnd.y);
		}
		//这个是实现鼠标点下左键后,移动时候的效果,但是鼠标移动时没有调用这个,我认识无用
		/*if(fBlocking)
		{
			SetROP2(hdc,R2_NOT);
			SelectObject(hdc,GetStockObject(NULL_BRUSH));
			Rectangle(hdc,ptBeg.x,ptBeg.y,ptEnd.x,ptEnd.y);
		}*/
		EndPaint(hwnd,&ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd,message,wParam,lParam);
}

上面代码有两个问题还没有搞清楚:

25---30行中有两个DrawBoxOutline,我试着去掉任何一个,但是效果都会变成下图这样。

我想应该跟WM_MOUSEMOVE有关,不能做到时时的来相应。

66-----72行的代码让我去掉了,我认识没有用,因为在WM_MOUSEMOVE中没有调用WM_PAINT,那段代码应该不会被执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Windows程序设计》之BLOKOUT1 的相关文章

  • 转发——从搭建小系统到架构分布式

    从搭建小系统到架构分布式 从搭建小系统到架构分布式 SpringBoot是目前Spring技术体系中炙手可热的框架之一 既可用于构建业务复杂的企业应用系统 xff0c 也可以开发高性能和高吞吐量的互联网应用 Spring Boot 框架降低
  • 2018-8-30华为机试第三题

    一个很明显的递归问题 package cn csu ksh import java util ArrayList import java util List import java util Scanner public class Mai
  • Android学习之Sensor

    转自http javatest blog 163 com blog static 20865106420126216118757 只需要五步 xff0c 你就能搞定Sensor 让你的程序变的更酷 java view plain copy
  • 虚拟现实技术vr可以用来干什么?虚拟现实技术vr有什么特征

    科技行业的不断蓬勃发展 xff0c 每天会出现一些新的科技产品 xff0c 例如现在很火的虚拟现实技术vr xff0c 虚拟现实技术用的领域很多 xff0c 就拿游戏行业来说 xff0c 玩家可以通过vr眼镜 vr手柄等体验vr游戏 xff
  • Ubuntu18.04安装Qt5.14.2

    1 去官网 xff08 https download qt io archive qt xff09 下载对应的 run版本 这里是5 14 2 2 进入下载后的路径 xff0c 先赋予权限 xff0c 再安装 span class toke
  • Python归并排序

    归并排序 数据科学家每天都在处理算法 然而 xff0c 数据科学学科作为一个整体已经发展成为一个不涉及复杂算法实现的角色 尽管如此 xff0c 从业者仍然可以从建立对算法的理解和知识库中受益 在本文中 xff0c 对排序算法归并排序进行了介
  • Android ADB 源码分析总结

    Android之ADB总结 本文内容如下 xff1a 1 makefile分析及总结 2 adb框架介绍 3 adbd源码分析 3 1 adbd初始化流程分析 3 2 adb shell流程分析 3 3 adb root流程分析 4 adb
  • android4.0新控件Switch方法解析

    就是很像开关的那种控件 xff0c 它只有两个状态 xff1a on和off xff1a 在IOS中 xff0c 有个UISwitch控件 xff0c 其效果图 xff0c 如下 xff1a 在android4 0里面 xff0c 添加了一
  • Android Adb 源码分析(一)

    扭起屁股得意洋洋 最近 xff0c 我负责的项目因为临近量产 xff0c 把之前的userdebug版本关闭 xff0c 转成了user版本 xff0c 增加selinux的权限 xff0c 大家都洋溢在项目准备量产的兴奋和喜悦之中不能自拔
  • ADB源码分析(一)——ADB模块简述

    原文地址 http www apkbus com blog 50331 54609 html 感谢作者的分享 1 Adb 源码路径 system core adb 2 要想很快的了解一个模块的基本情况 xff0c 最直接的就是查看该模块的A
  • Git分支管理规范

    一 分支与角色说明 Git 分支类型 master 分支 xff08 主分支 xff09 稳定版本 develop 分支 xff08 开发分支 xff09 最新版本 release 分支 xff08 发布分支 xff09 发布新版本 hot
  • Kindeditor编辑器 jsp上传错误解决方法 与struts2冲突整合

    上传使用的是upload json jsp文件 xff0c 问题关键在于struts2对于struts2过滤访问的jsp时 xff0c 会改变reqeust的类型 xff0c 由HttpServletRequest变成MultiPartRe
  • Android中Dialog和Toast及其Snackbar的使用和区别

    一 Snackbar的使用 连接地址 http www jcodecraeer com a anzhuokaifa androidkaifa 2015 0714 3187 html 如果说Dialog和Toast是两个极端的话 xff0c
  • 国外SAP自由顾问的价格

    http scnblogs techweb com cn sapfreelancer archives 19 html 非常感谢我的一位在海外做SAP猎头的朋友 xff0c 他做SAP猎头已经七年了 xff0c 而且不久前刚刚离职 xff0
  • ping的详细过程

    ping是我们在Linux中测试网络连接的常用指令 首先ping是应用程序 xff0c 而不是协议 xff0c 它利用ICMP Internet control message protocol 因特网控制报文协议 报文检测网络连接 首先假
  • Android studio 之 Kotlin Not Configured

    Build报错 xff1a Index is not created for Stubs AndroidStudio 爆以下错误 xff1a com intellij ide plugins StartupAbortedException
  • ThreadPoolExecutor的的核心线程回收设置allowCoreThreadTimeOut

    如果你对ThreadPoolExecutor的执行还不了解 xff0c 可以参考有界 无界队列对ThreadPoolExcutor执行的影响这篇文章 在ThreadPoolExecutor类中有个allowCoreThreadTimeOut
  • C语言-数据结构-归并排序(merge sort)-递归 迭代-源代码及分析

    1 归并排序 归并排序 xff08 MERGE SORT xff09 是建立在归并操作上的一种有效的排序算法 该算法是采用分治法 xff08 Divide and Conquer xff09 的一个非常典型的应用 将已有序的子序列合并 xf
  • android之Fragment(官网资料翻译)

    Fragment要点 Fragment作为Activity界面的一部分组成出现 可以在一个Activity中同时出现多个Fragment xff0c 并且 xff0c 一个Fragment亦可在多个Activity中使用 在Activity
  • 经典人脸识别算法小结——EigenFace, FisherFace & LBPH(下)

    该文章由下面两部分组成 xff1a 1 经典人脸识别算法小结 EigenFace FisherFace amp LBPH xff08 上 xff09 xff0c 这部分介绍人脸开源库 xff0c 和图片的读取等准备工作 2 经典人脸识别算法

随机推荐

  • 对AI的理解及应用的思考

    1 概述 1 1 常用术语 1 2 AI学习方式及地位 序号 学习方法 地位 1 强化学习 Reinforcement Learning 犹如蛋糕上的一颗樱桃 2 监督学习 Supervised Learning 犹如蛋糕外的一层糖霜 3
  • Win Server 2012 远程桌面允许多用户同时登录

    打开任务栏左下角的 服务器管理器 xff0c 在左侧列表中选中 本地服务器 然后将右侧 远程桌面 功能的选项修改为 启用 xff0c 注意取消下面复选框的选中状态 xff1a 同时按住 Win键 43 R 组合键调出运行窗口 xff0c 输
  • MariaDB/Mysql查看更改数据库和表字符编码

    1 查看数据库默认编码 MariaDB none gt show variables like 34 char 34 43 43 43 Variable name Value 43 43 43 character set client ut
  • [2014年10月5日亲测可用]迅雷极速版高速通道加速破解补丁发布

    2014年10月5日亲测可用 迅雷极速版高速通道加速破解补丁发布 最近迅雷会员的加速和离线都因为被举报崩溃了 xff0c 老提示 文件名包含违规内容 xff0c 无法添加到离线空间 0976 xff0c 关于无法添加到离线空间 0976 这
  • vue项目中比较坑的点--Elisint的报错

    在运行vue项目时 xff0c Elsint检查是比较坑的点 xff0c 写一下我遇到的问题 xff0c 以及解决 在运行时 xff0c 发现Elsint的格式检查非常的严格 问题1 xff1a Trailing spaces not al
  • vs2019的下载及安装教程

    天下武功 xff0c 唯快不破 xff0c 虽然支持 C C 43 43 开发工具 也就是大家口中的IDE 有很多 xff0c 但是在团队项目开发中使用最多的还是Visual Studio xff08 以下简称VS xff09 xff0c
  • 【JavaScript】按钮绑定点击事件-onCliek事件

    JavaScript 按钮绑定点击事件 onCliek事件 lt button type 61 34 submit 34 id 61 34 btn 34 gt btn lt button gt 1 第一种 34 btn 34 click f
  • python.matplotlib实现手动鼠标移动坐标点

    01 操作动画 随意拖动任一点 xff0c 任意运动 02 关键代码 编程 xff1a python 3 6运行环境 xff1a Pycharm只展示部分关键代码 xff0c 需要源码的见文末链接关键 xff1a 一定要注意能不能运动 xf
  • 在windows10环境下安装Tensorflow2.1.0--cpu版本,及jupyter使用tensorflow出现kernel内核崩溃的解决(踩坑无数,总结出的快捷方法)

    最近跟着导师学习深度学习 xff0c 需要进行安装tensorflow xff0c 老师给的方法很简洁 xff0c 直接pip install tensorflow xff0c 由于在国内嘛 xff0c 可想而知 xff0c 99 肯定Re
  • 数据库范式

    1NF 无重复列 所有的域都应该是原子的 xff0c 即每一列都是不可分割的数据项 2NF 消除部分子函数依赖 假如 xff1a 学号 xff0c 姓名 xff0c 年龄 xff0c 课程号 xff0c 成绩 xff0c 学分 xff0c
  • Redis之秒杀下单优化以及认识redis消息队列

    目录 一 秒杀优化 异步秒杀思路 二 秒杀优化 Redis 完成秒杀资格判断 1 VoucherServiceImpl xff0c 新增优惠券的同时加入到Redis 2 编写lua 基于lua完成一人一单 xff0c seckill lua
  • 【逆向工程】mapper文件报错:Result Maps collection already contains value for...BaseResultMap

    在使用逆向工程生成代码及mapper文件的时候 xff0c 第一次生成完之后 xff0c 发现少配了一个数据库表 xff0c 因此也就少了对应的实体类和mapper文件 xff0c 于是就直接在工程中添配置上缺少的数据库表就又执行了一遍 x
  • 关于Android studio第一次创建工程时加载过慢的解决方法

    在进行Android开发的时候 xff0c 原来使用的是Android studio2 1版本的 xff0c 突然心血来潮 xff0c 去官网下了一个最新版本的 突然之间遇到许多问题 第一个问题就是第一次创建工程时加载过慢 在网上查找了许多
  • Spring项目实践(三)--- Spring配置文件详解

    不同于我们讲的pom xml以及web xml xff0c 这两个文件的名称是固定的 xff0c 不可更改的 xff0c 这里的设计采用的是约定优于配置的原则 而Spring的配置文件的名称是可以更改的 xff0c 实际上我们在 Sprin
  • Spring项目实践(四)--- Spring MVC配置文件详解

    前三讲我们依次讲了pom xml web xml和spring配置文件 xff0c 这次我们来讲一下springmvc的配置 首先明确一下springmvc是spring的一个模块 springmvc的配置文件 xff0c 也不是固定命名的
  • ShadowSSDT Hook

    ShadowSSDT表的获取 这里的ShadowSSDT表的获取是通过函数KeAddSystemServiceTable来获取的 使用这个函数的原因 xff1a 1 这个函数是已经导出的 xff0c 可以在代码中直接使用 2 这个函数里面使
  • BCTF总结

    缘由 上周 xff0c 我们小组Sigma参加了 百度杯 BCTF比赛 xff0c 经历了难忘的双休 xff0c 这次的BCTF跟以前参加的国内类似的安全比赛有些不同 xff0c 时间只有48小时 xff0c 题目不多 xff0c 但难度大
  • BCTF_海报探秘(300)

    这个题目来自上周的BCTF比赛 xff0c 题目是海报探秘 xff08 300 xff09 xff0c 一张png图片中隐藏了KEY xff0c 解出KEY xff0c 具体报告 xff0c 请下载 xff1a http download
  • 博客转移

    最近好久不来CSDN了 xff0c 自己搭建了一个博客 欢迎各位去新博客留言 http www l0g1n cn 以前学习汇编的博客 http www asmedu net blog user usermain jsp neighborId
  • 《Windows程序设计》之BLOKOUT1

    LRESULT CALLBACK WndProc HWND hwnd UINT message WPARAM wParam LPARAM lParam static BOOL fBlocking fValidBox static POINT