第七章 鼠标part1

吉林大学图形学实验课作业边标记填充多边形 吉林大学计算机专业图形学实验课作业1 作业要求: 编写应用程序,采用鼠标输入顶点的方法确定待填充多边形;实现边标志算法完成对多边形的填充,要求完成使用自己学号的后四位数字对多边形内部进行填充。完成效果如下图所示:       注:因为没有安装vc,所以直接用windowsapi编写的。   思路:1,获取鼠标点击坐标,保存到POINT数组pt[]中;  2,计算包含多边形的最 阅读详情

7.1鼠标基础:

GetSystemMetrics函数来确认鼠标是否存在fMouse = GetSystemMetrics(SM_MOUSEPRESENT)
确定所安装鼠标其上按键的个数cButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);

使用SystemParametersInfo函数可以设定或获得设定鼠标的参数。

一些简单的定义:

IDC_CROSS光标(在本章后面的BLOKOUT程序中有用到)的热点在十字交叉线的中心。IDC_WAIT光标是一个沙漏,通常用于指示程序正在执行。
在定义窗口类别结构时指定特定窗口的内定光标wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

 

7.2显示区域鼠标消息:

对于所有这些消息来说,其lParam值均含有鼠标的位置,可以用LOWORD和HIWORD宏来提取这些值
x = LOWORD(lParam);
y = HIWORD(lParam);

wParam的值指示鼠标按键以及Shift和Ctrl键的状态。您可以使用表头文件WINUSER.H中定义的位屏蔽来测试wParam。MK前缀代表「鼠标按键」。

窗口消息处理程序可以「拦截鼠标」并且连续地接收鼠标消息,即使此时鼠标在该窗口显示区域之外。

如果正在显示一个系统模态消息框或者系统模态对话框,那么其它程序就不能接收鼠标消息。

简单的鼠标处理:

处理Shift键:

wParam和MK_LBUTTON进行位与(AND)运算,来确定是否按下了左键,同理,wParam和MK_CONTROL进行位与(AND)运算,来确定是否按下了Ctrl键。

Windows函数GetKeyState可以使用虚拟键码VK_LBUTTON、VK_RBUTTON、VK_MBUTTON、VK_SHIFT和VK_CONTROL来传回鼠标按键与Shift键的状态。

双击鼠标按键:

如果希望您的窗口消息处理程序能够收到双按键的鼠标消息,那么在呼叫RegisterClass初始化窗口类别结构时,必须在窗口风格中包含CS_DBLCLKS标识符wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;这样设定之后,可以收到WM_LBUTTONDBLCLK消息。

 

7.3非显示区域鼠标消息

非显示区域鼠标消息类似于系统键盘消息WM_SYSKEYDOWN、WM_SYSKEYUP和WM_SYSCHAR。非显示区域鼠标消息几乎完全与显示区域鼠标消息相对应。消息中含有字母「NC」以表示是非显示区域消息。wParam参数指明移动或者按鼠标按键的非显示区域。

将屏幕坐标转换为显示区域坐标或者反之
 ScreenToClient(hwnd, &pt);
 ClientToScreen(hwnd, &pt);

非显示区域命中测试

命中测试消息:WM_NCHITTEST代表「非显示区域命中测试」。Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其它鼠标消息。

从消息产生消息:Windows用WM_NCHITTEST消息产生所有其它鼠标消息,这种由消息引出其它消息的想法在Windows中是很普遍的。

 

 

7.4程序中的命中测试

正如DefWindowProc在处理WM_NCHITTEST消息时做一些命中测试一样,窗口消息处理程序经常必须在显示区域中进行一些命中测试。
命中测试中会使用x和y坐标值,它们由传到窗口消息处理程序的鼠标消息的lParam参数给出。

使用键盘仿真鼠标:

Windows为这个光标保存了一个「显示计数」。如果安装了鼠标,显示计数会被初始化为0。否则,显示计数会被初始化为-1。

增加显示计数ShowCursor(TRUE)//如果您想显示鼠标光标,而不管鼠标存在与否

减少显示计数ShowCursor(FALSE);

获得光标的位置:GetCursorPos (&pt);pt是POINT结构

设定光标位置:SetCursorPos(x, y);//x和y都是屏幕坐标,而不是显示区域坐标

当然,呼叫ScreenToClient和ClientToScreen就能做到屏幕坐标与客户坐标的相互转换

CHECKER1

将子窗口用于命中测试的例子

 

CTF钓鱼邮件分析实战:从元数据到载荷解密的完整攻防解析 网络安全攻防演练中,钓鱼邮件分析是红蓝队必备的核心技能。其原理在于攻击者利用社会工程学,通过伪造邮件头、嵌入恶意链接或附件来诱导目标。掌握邮件分析技术,对于识别攻击链、溯源攻击者、提升企业安全防护能力具有重要价值。典型的应用场景包括CTF竞赛、安全应急响应和日常威胁狩猎。本文以一道热门CTF题目为例,详细拆解了从邮件元数据侦察、MIME结构分析到附件载荷解密的完整流程,并融入了Base64解码和隐写术等关键技术点,为安全从业者提供了一套可复用的实战方法论。 阅读详情

相关推荐

波分复用技术原理

波分复用原理 把不同波长的光信号复用到同一根光纤中进行传送,这种方式我们把它叫做波分复用( Wavelength Division Multiplexing ) 一根光纤被划分为多个波道,多个波长以一定的间隔隔开,在光纤中独立传输。 波分复用应用演示 如果将WDM系统看作交通系统,光纤可以看作是多个车道的公用道路。 各种类型的业务就像货物一样,被打包装载到车辆中。 车辆按照分配的车道行驶至目的地,完成货物的运输。 想要提高波分复用系统的传输容量,就要增加波道数量或是提升单波传...

m0_63251770的博客 9997

Windows SDK(四)鼠标和键盘消息处理

HFONT hFont = CreateFont(20, 10, 0, 0, 0, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, L"宋体");DrawText(hdc, L"蓝色", -1, &rect, DT_NOCLIP);DrawText(hdc, L"红色", -1, &rect, DT_NOCLIP);

2301_78838647的博客 1923

LVGL仪表盘实战:5分钟用lv_meter打造汽车仪表UI(附完整代码)

本文详细介绍了如何使用LVGL的lv_meter组件在5分钟内构建专业汽车仪表盘UI。从环境配置、刻度定制到指针动画和性能优化,提供完整代码示例和实战技巧,帮助开发者快速实现嵌入式设备上的高效仪表盘设计。

k5l6m的博客 421

几个WM消息其lParam和wParam参数定义

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34153893的博客 485

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3154

利用netns做自环Iperf测试

netns可以让一台机器上模拟多个网络设备,是网络虚拟化的重要组成,将不同类型的网络应用隔离。一个net namespace有自己独立的路由表,iptables策略,设备管理。本文利用netns模拟网络来实现单机上网卡自环上的iperf测试或其他网络测试。

weixin_42414349的博客 3370

第七章 鼠标part2

7.5拦截鼠标一个窗口消息处理程序通常只在鼠标光标位于窗口的显示区域,或非显示区域上时才接收鼠标消息。所以应该只有当鼠标按键在您的显示区域中被按下时才拦截鼠标;当鼠标按键被释放时,才释放鼠标拦截。拦截鼠标并非只适用于那些古怪的应用程序。如果您需要鼠标按键在显示区域按下时都能够追踪WM_MOUSEMOVE消息,并直到鼠标按键被释放为止,那么您就应该拦截鼠标。BLOKOUT2:#inclu

千月星跡 1352

【GEOS-Chem模拟教程第二期上】生物质燃烧排放 GFED4 数据配置

生物质燃烧排放 GFED4 数据配置

WW、forever的博客 1301

钓鱼邮件分析实战:从CTF到真实攻防的完整框架与工具链

钓鱼邮件分析是网络安全中信息收集与数字取证的核心技能,其本质在于通过系统化方法识别和逆向社会工程学攻击链。从技术原理看,攻击者常利用邮件头伪造、链接伪装、恶意附件投递等技术手段,结合社会工程学诱导用户交互。在工程实践中,一套标准化的分析框架至关重要,通常涵盖信封信息侦查、正文内容分析、附件深度检查及行为关联还原四个层次。掌握静态分析工具如olevba、pdf-parser与动态沙箱环境,能有效应对CTF竞赛和真实应急响应场景。本文以典型钓鱼邮件样本为例,详解如何通过邮件头字段解析、隐写术检测和恶意宏分析,逐

403

人形机器人电源系统硬件开发:从原理图设计到PCB布局的完整流程

人形机器人是“移动的智能终端”,其电源系统如同“心脏+血管”:既要为大脑(主控)、肌肉(电机)、感官(传感器)提供稳定能量,又要在有限体积内应对高动态负载(如跳跃时电机瞬间大电流)。本文聚焦“硬件开发”维度,覆盖从需求分析到PCB制板的完整流程,适合硬件工程师、机器人爱好者快速掌握工程实战方法。

AI天才研究院 2174

结构光之相移法+多频外差的数学原理推导

‍论文:基于数字光栅投影的结构光三维测量技术与系统研究 [博]作者:李中伟 华中科技大学 2007功能:相移法:多频外差(三频N步相移法)01 相移法图1 待写入投影仪的理想N步相移条纹通常对于 步相移来说,生成第 幅条纹图像(如图1所示)的公式如下:402 Payment Required其中::背景光强:调制强度:像素点横向坐标:相移值图2 相机拍摄到的实际 N ......

3D视觉工坊 1189

本地私有AI知识库:数据不出门的智能检索系统

本地私有AI知识库是一种基于RAG(检索增强生成)架构的边缘智能系统,其核心原理是将非结构化文档(如PDF、Word、Markdown)经语义切片与向量化后,接入本地运行的大语言模型(LLM),实现低延迟、高可控的问答服务。技术价值在于打破云依赖,保障数据主权与合规性,尤其适用于法律、医疗、工业等强敏感场景。典型应用包括合同条款精准检索、技术文档跨版本比对、多源知识融合问答等。本文聚焦‘本地部署’与‘私有控制’两大热词,详解从文档预处理、向量数据库选型到权限沙箱构建的全链路实践。

weixin_34008933的博客 427

C#的GDI+绘图详解

/消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。

weixin_50920631的博客 3457

Dream Chaser工作室官方网站开发全记录

Dream Chaser工作室网站开发记录

Banqingmeng的博客 261

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

第十三章 使用打印机

限用在打印机上的函数(StartDoc、EndDoc、StartPage和EndPage)负责将打印机的输出组织打印到纸页上。而一个程序呼叫普通的GDI函数在一张纸上显示文字和图形和在屏幕上显示的方式一样。打印入门在Windows下使用打印机时,实际上启动了一个包含GDI32动态链接库模块、打印驱动程序动态连结模块(带.DRV扩展名) 、Windows后台打印程序,以及有用到的其它相关模块

千月星跡 2518

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

第二十章 多任务和多线程

第二十章 多任务和多线程

千月星跡 1498

第十二章 剪贴簿

12.1剪贴簿的简单使用标准剪贴簿数据格式Windows支持不同的预先定义剪贴簿格式, 这些格式在WINUSER.H定义成以CF为前缀的标识符。 ■三种能够储存在剪贴簿上的文字数据型态:①CF_TEXT    以NULL结尾的ANSI字符集字符串。它在每行末尾包含一个carriage  return和linefeed字符,这是最简单的剪贴簿数据格式。②CF_OEMTEXT   

千月星跡 1403

第二十一章 动态链接库

多数与Windows相关的磁盘文件如果不是程序模块,就是动态链接程序。21.1动态链接库的基本知识动态链接库并不能直接执行,也不接收消息。它们一些独立的文件,其中包含能被程序或其它DLL呼叫来完成一定作业的函数。只有在其它模块呼叫动态链接库中的函数时,它才发挥作用。 在程序开发中,您将各种目标模块(.OBJ)、执行时期链接库(.LIB)文件,以及经常是已编译的资源(.RES)文件连结在

千月星跡 1261

第九章 子窗口控件part2

9.3静态类别:在CreateWindow函数中指定窗口类别为「static」静态类别还包括了窗口样式SS_ICON和SS_USERITEM,但是当它们被用作子窗口控件时却没有任何意义。在CreateWindow程序中指定视窗类别为「static」,您就可以建立静态文字的子视窗控制项。这些子视窗非常「文静」。它既不接收滑鼠或键盘输入,也不向父视窗发送WM_COMMAND讯息。 9.

千月星跡 1202

第六章 键盘part1

6.1键盘基础键盘输入以消息的形式传递给程序的窗口消息处理程序。忽略键盘:虽然呼叫程序菜单的按键将通过窗口的窗口消息处理程序,但通常内定的处理方式是将按键传递给DefWindowProc。谁获得了焦点:接收特定键盘事件的窗口具有输入焦点。输入焦点的概念与活动窗口的概念很相近。有输入焦点的窗口是活动窗口或活动窗口的衍生窗口。窗口消息处理程序通过拦截WM_SETFOCUS和WM_K

千月星跡 1178

第六章 键盘part2

6.3字符消息四类字符消息:非系统字符WM_CHAR和WM_DEADCHAR消息是从WM_KEYDOWN得到的;而系统字符WM_SYSCHAR和WM_SYSDEADCHAR消息是从WM_SYSKEYDOWN消息得到的。在大多数情况下,Windows程序会忽略除WM_CHAR之外的任何消息。伴随四个字符消息的lParam参数与产生字符代码消息的按键消息之lParam参数相同。如果您的窗口消息

千月星跡 1128

第十一章 对话框part4

11.3通用对话框POPPAD.cpp #include #include #include "resource.h" #define EDITID 1#define UNTITLED TEXT("(untitled)") LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

千月星跡 1091

第十一章 对话框part3

11.2非模态对话框非模态对话框允许使用者在对话框与其它程序之间进行切换,又可以在对话框与建立对话框的窗口之间进行切换。当使用者觉得让对话框保留片刻会更加方便时,使用非模态对话框是合适的。非模态对话框是使用CreateDialog来建立的,该函数所使用的参数与DialogBox相同。hDlgModeless = CreateDialog ( hInstance, szTemplate, h

千月星跡 1062

第二章 Unicode简介

2.1字符集简史ASCII码使用8位字符集,而Unicode使用全16位字符集,这使得Unicode能够表示世界上所有的书写语言中可能用于计算机通讯的字符、象形文字和其它符号。那么如何容纳象形文字语言而仍保持和ASCII的某种兼容性呢?答案是双字节字符集(DBCS)。正因为各个国家的字符集都是不一样的,比如代码页932(日文) 、936(简体中文) 、949(韩语)和950(繁体汉字)。只有为

千月星跡 1058
上一篇: 第六章 键盘part2
下一篇: 第七章 鼠标part2
进击的横打
博客等级 码龄19年 2万+粉丝 1296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值