【WM】工作窗口类原理和实现

关于WM_ERASEBKGND和WM_PAINT的深刻理解 一直以来,对于WM_PAINT和WM_ERASEBKGND消息不是很清楚,从书上和网上找了很多资料,大体上有以下几点说法: 1>WM_PAINT先产生,WM_ERASEBKGND后产生 2.WM_PAINT产生后,在调用BeginPaint时 hdc = BeginPain 阅读详情

通过Remote Spy我们常能见到类名为Worker的窗口(如下图所示),那么工作窗口类是什么呢?Remote Spy

其实工作窗口与常规窗口十分相似,只不过我们无需调用RegisterClass()函数注册窗口类,并把我们传入的p参数作为窗口的额外数据保存了起来。想来微软青睐这类不可见的窗口也就是为了简化步骤,提高效率而已。

 

我们先来看看如何创建工作窗口的。在头文件miscsvcs.h内有CreateWorkerWindow()函数的原型声明:

 

//  *************************************************************************
//  CreateWorkerWindow
//
//  Purpose:
//      Helper function to create a worker window
//
//  Parameters:
//      pwszClass   Class name (NULL preferred, unless you need a unique class)
//      pfnWndProc  Window proc for worker window
//      hwndParent  Parent
//      dwExStyle   WS_EX_* styles
//      dwFlags     WS_* styles
//      pwszTitle   Window title
//      hmenu       Menu or child ID
//      p           Comes through in lParam of CREATESTRUCT during WM_CREATE processing
//
//  Returns:
//      HWND of worker window
//
//  Side Effects:
//      none
//  *************************************************************************
HWND CreateWorkerWindow(TCHAR *pwszClass, WNDPROC pfnWndProc, HWND hwndParent,
                        DWORD dwExStyle, DWORD dwFlags, TCHAR *pwszTitle,
                        HMENU hmenu, void * p);

 

下面给出CreateWorkerWindow()函数的实现:

深入解析WM_CREATE与WM_INITDIALOG:Windows窗口创建与消息机制核心原理 在Windows桌面应用开发中,消息机制是GUI编程的基石,它定义了应用程序与操作系统之间的通信方式。其核心原理在于系统通过消息队列和窗口过程(WndProc)来驱动事件响应,实现用户交互。理解这一机制的技术价值在于,它是构建稳定、高效图形界面的基础,直接影响程序的响应性和可靠性。无论是开发嵌入式上位机、工业控制软件还是通用桌面应用,掌握窗口创建期间的关键消息流都至关重要。本文聚焦于WM_CREATE和WM_INITDIALOG这两个在**窗口创建**和**对话框初始化**阶段的核心消息,通过对比它们的触发 阅读详情

相关推荐

coze开发-5、给智能体添加“技能”

中间编排与技能组件 中间编排的定义 中间编排是指在智能体的构建过程中,使用一些工具对智能体进行协调和管理。通过这些工具,我们能够更好地实现智能体在特定业务场景中的应用。

andyyah晓波的博客 527

web worker

什么是web worker 官方的解释是这样的: worker是一个对象,通过构造函数Worker创建,参数就是一个js文件的路径;文件中的js代码将运行在主线程之外的worker线程; var jsFileURI = JS_FILE_PATH; // js文件路径 var worker = new Worker(jsFileURI); worker运行在另一个全局上下文中(self...

GuoZebin的博客 568

Spring Boot Admin 完整教程

SpringBootAdmin是一个用于管理和监控SpringBoot应用的Web工具,提供健康检查、性能指标、日志管理等核心功能。系统由AdminServer(管理服务器)和AdminClient(客户端)组成,通过Actuator端点收集数据。配置需添加Maven/Gradle依赖,通过@EnableAdminServer注解启动服务端,客户端需配置注册信息。支持UI自定义、安全认证(基本/OAuth2)、多种通知方式(邮件/Slack)及与Eureka/Consul等服务发现的集成。最佳实践包括分层监

weixin_51040479的博客 2555

Web Worker 使用教程

  作者:阮一峰 www.ruanyifeng.com/blog/2018/07/web-worker.html   一、概述   JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。 W...

weixin_42065612的博客 356

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1820

NMOS管和PMOS管做开关控制电路

NMOS管和PMOS管做开关控制电路

while(1) 3万+

Web Worker

Web Worker

qq_34626688的博客 1098

服务器被黑?快速检测和识别系统中的恶意进程

在管理服务器时,检测和识别系统中的恶意进程至关重要。本文介绍了使用 `ps`、`top`、`htop` 等系统监控工具,分析日志文件,以及使用 `chkrootkit` 和 `rkhunter` 等安全工具的方法。通过这些步骤,可以有效地检测和处理恶意进程,确保系统的安全和稳定。

_midnight的博客 1417

Windows 桌面窗口 Z 序移动 [测试]

Windows 桌面自定义WorkerW分层窗口 脱离系统消息的使用,自定义分层窗口的部分功能,实现在桌面嵌入任意窗口。

溡漪幽博客 2667

open3d将某一时间序列下的彩色图和深度图批量转换成点云(python)

必备条件需要3D相机生成的彩色图及深度图,注意要将深度图与彩色图对齐(一般3D相机自带对齐算子),以及3D相机的彩色图内参(相机自带内参获取功能)。有了此彩色图、对齐后的深度图以及相机内参就能使用open3d生成彩色点云了.

吾名招财的博客 315

UCIE Specification详解(三)

Protocol Layer(协议层)以及Die-to-Die Adapter

Crazzy_M的博客 1762

Web Worker的理解以及使用

Web Worker的理解以及项目中使用

YSys12345678的博客 1539

ShardingSphere 5.3 系列Spring 配置升级指南 | Spring Cloud 47

在 `5.3.0` 版本以前,`ShardingSphere-JDBC` 同时支持 `Java API`、`YAML`、`Spring Boot Starter` 和 `Spring Namespace` 等配置方式。 - 当新增或更新 API 时,需要调整多项配置文件,工作量大 - 社区需要维护多重配置文档和示例 - `Spring Bean` 生命周期管理容易受到项目其他依赖的影响,比如 `PostProcessor` 无法正常执行 - `Spring Boot Starter` 和 `Spring N

gmHappy 2万+

3、窗口的创建

窗口应用程序是消息驱动的。用户对窗口的输入最终以消息的形式传递给窗口,窗口间的通信也依赖于消息。所谓“传递给窗口”是指系统调用了我们提供的、被称为窗口过程的函数,窗口过程负责对消息作出响应。窗口过程和窗口类绑定,创建窗口前必须注册窗口类。 1、注册窗口类 调用RegisterClass注册窗口。该函数只需要一个WNDCLASS指针传参。 typedef struct tagWNDCLASSA { UINT style; // 窗口类样式 WNDPROC lpfnW

csdn_cjc的博客 620

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

黑马MFC之底层窗口实现

【代码】黑马MFC之底层窗口实现。

qq_57060016的博客 188

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

将拖放应用于程序

简单说说拖放的原理: 在用鼠标选中多个或一个文件后,Windows为这些文件分配一块内存用来存放他们的文件路径和名字,然后通知程序,程序就处理这些文件,打开或复制等等可见关键是Windows如何通知你的程序的呢?以及程序如何处理呢?首先你要让Windows知道你想使用拖放功能:要么使用自己的窗口类,在CreateWindowEx(WS_EX_ACCEPTFILES....)要么使用Window

jhb92的专栏 649

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WM_NCHITTEST (处理无边框窗口的缩放)

MSDN对它的解释是: The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window bene

ljfth的专栏 2584

[转]关于windows 的窗口消息和WM_PAINT

http://blog.youkuaiyun.com/keldon/archive/2007/08/10/1736338.aspx 关于WM_PAINT消息响应小结 WM_PAINT消息小结WM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作。1. 系统何时发送WM_PAINT消息?系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗

blueblood_jing的专栏 745

用Tkinter打造GUI开发工具(2)Tkinter工作原理

用Tkinter打造GUI开发工具(2)Tkinter工作原理 Tcl/Tk是面向过程的脚本程序,Tkinter是在Tcl/Tk基础上的面向对象程序。我们主要使用Tkinter模块开发图形,因此读者需要掌握面向对象程序开发知识。 Python程序对英文大小写敏感,命令关键字和变量名称区分大小英文字母,即程序中字母大小写不同,代表不同含义。Tkinter模块名在Python2和Python3不同。 ...

hepu8的博客 3172

Win32汇编系列七、窗口程序原理及实现

前言 学c语言的人天天面对黑框框,有木有?不知道是否想用c写一个窗口程序?我想应该也很希望吧,目前我见过的书中很少有介绍窗口程序设计,如果想写的话,还需要去网上、b站搜索,使用c写窗口程序其实挺麻烦的,需要了解Windows消息机制、GDI或者GDI+、还有各种控件,如Button,另外自带的控件都太难看,需要使用GDI或GDI+自己绘制,这样工作量又大了很多,所以现在很少有rj这种最"底层"的方式实现了就需要我不曾在c中大量写过, ...

HouXinLin_优快云的博客 3708

WM_PAINT详解和WM_ERASEBKGND

WM_PAINT简介: WM_PAINT消息在Windows程序设计中是很重要的。当窗口显示区域的一部分显示内容或者全部变为“无效”,以致于必须“更新画面”时,将由这个消息通知程序。 WM_PAINT产生的时机: 1. 系统产生 其实系统会在很多的不同的机制下发送WM_PAINT消息,比如调用UpdateWindow函数,第一次创建窗口,改变了窗口的大小,最大化,最小化等等。这些动作...

Barry的博客 7840

WM_CLOSE

<br />  WM_CLOSE消息与DefWindowProc收到WM_SYSCOMMAND消息,且wParam等于SC_COLSE时发送给窗口过程的消息相同。<br />  如果在一个Windows程序的系统菜单图标上双击一下,那么程序将会终止。双击产生一系列的WM_NCHITTEST消息。由于鼠标定位在系统菜单图标上,因此DefWindowProc将返回HTSYSMENU的值,并且Windows把wParam等于HTSYSMENU的WM_NCLBUTTONDBLCLK消息放在消息队列中。<br /> 

tg5156的专栏 7639

i3wm使用记录

但是,你可以使用任意标签直接标记特定窗口,然后再使用它。操作过程: 1.将窗口最小化(变成便签窗口) 2. $mod+p 浮点模式显示窗口,与隐藏窗口,然后显示下一个便签窗口 3. 将显示出的窗口变为平铺窗口就将窗口从便签窗口中删除了。请注意,这只是一个普通的浮动窗口,因此如果你想“将其从便笺窗口中删除”,你可以简单地使其再次平铺(如果你想让一个窗口固定在显示器上,即使你切换到另一个工作区,它还留在屏幕上,那么你可以使用。时,窗口将再次显示为浮动窗口,以你当前的工作区为中心(在可见的便签簿窗口上使用。

hehao1999的博客 1310

VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息

关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息 这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。 如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加: 添加变量: BOOL m_bTracking; m_bTracking = FALSE; 添加消息处理函数: afx_msg LRESULT OnMo

无知人生,记录点滴 8111

WM_ACTIVE的消息

WM_ACTIVE的消息参数 wParam的低阶word指示窗口是被激活还是失去激活:WA_ACTIVE,被鼠标点击以外的方法激活;WA_CLICKACTIVE,由鼠标点击激活;WA_INACTIVE,失去激活;wParam的高阶word指示窗口是否被最小化;非零表示最小化;lPararm表示将激活的窗口句柄(WA_INACTIVE),或者将失去激活的窗口句柄(WA_C

iu_81的专栏 1万+

WM_PAINT 是如何触发的

WM_PAINT消息在Windows操作系统中是一个非常重要的消息,它用于通知窗口需要重绘其客户区。在处理WM_PAINT消息时,窗口程序通常会在其窗口处理函数中添加相应的消息处理逻辑。这通常涉及使用BeginPaint和EndPaint函数来设置和结束绘制操作,并在它们之间执行实际的绘制工作。总结来说,WM_PAINT消息是Windows操作系统用于通知窗口程序其客户区需要重绘的一种机制。它可以在多种场景下被触发,以确保窗口内容的正确显示。

lijian2017的博客 1563
上一篇: 【WM】如何判断进程能否被终止(freeable)
下一篇: 【WM】如何判断两个窗口是否由同一进程创建
keyssoft
博客等级 码龄25年 8粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值