首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何确定包含窗口的ATL消息映射中的HWND

在ATL(Active Template Library)中,消息映射是一种将消息与窗口处理函数关联起来的机制。HWND(Window Handle)是Windows操作系统中用于标识窗口的句柄。

要确定包含窗口的ATL消息映射中的HWND,可以按照以下步骤进行:

  1. 确定窗口类名:首先需要确定包含窗口的类名,即窗口的类型。窗口类名是在创建窗口时指定的,可以通过调用CreateWindowEx函数或者使用ATL的窗口类宏来创建窗口。
  2. 获取窗口句柄:使用FindWindow或FindWindowEx函数可以根据窗口类名或其他属性来获取窗口句柄。窗口句柄是HWND类型的变量,用于唯一标识一个窗口。
  3. ATL消息映射:在包含窗口的类中,使用BEGIN_MSG_MAP宏开始消息映射,然后使用MESSAGE_HANDLER宏将消息与处理函数关联起来。在消息映射中,可以使用窗口句柄(HWND)作为消息的目标窗口。

下面是一个示例代码片段,演示如何在ATL中确定包含窗口的消息映射中的HWND:

代码语言:txt
复制
class CMyWindow : public CWindowImpl<CMyWindow>
{
public:
    DECLARE_WND_CLASS(_T("MyWindowClass"))

    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_PAINT, OnPaint)
        // 其他消息映射
    END_MSG_MAP()

    LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        HWND hWnd = m_hWnd; // 获取窗口句柄
        // 处理绘制窗口的逻辑
        return 0;
    }
};

在上述示例中,CMyWindow类继承自CWindowImpl类,使用DECLARE_WND_CLASS宏声明窗口类名。在BEGIN_MSG_MAP和END_MSG_MAP之间,使用MESSAGE_HANDLER宏将WM_PAINT消息与OnPaint函数关联起来。在OnPaint函数中,可以通过m_hWnd成员变量获取窗口句柄。

对于ATL消息映射中的HWND,可以根据具体的需求进行处理,例如在处理函数中使用窗口句柄进行绘制、更新窗口内容等操作。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(移动推送、移动分析等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
  • 腾讯云视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云音视频通信(TRTC):https://cloud.tencent.com/product/trtc
  • 腾讯云网络安全(SSL证书、DDoS防护等):https://cloud.tencent.com/product/safety
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ATL Thunk机制学习

ATL模板类库使用Thunk技术来实现与窗口消息相关联HWND和负责处理消息对象this指针之间映射。     ...ATL窗口类注册时,窗口过程函数缺省值都是StartWindowProc,当创建窗口产生第一条消息时将调用此函数。...StartWindowProc是CWindowImplBase一个静态成员函数,它工作是建立CWindowImpl派生对象HWND与对象 this指针之间映射。...在新HWND被缓存到WindowImpl派生对象成员数据中之后,对象真正窗口过程将替代 StartWindowProc窗口过程,并且窗口过程参数HWND被替换成对象指针值。...,用窗口指针 pThis 代替窗口句柄 hWnd ( esp+0x4 中放就是 hWnd ),然后跳转到传入 proc 函数处( (int)proc - ((int)this+sizeof(_WndProcThunk

80610

一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口方法和思路

我用注入和HooKApi方案是采用微软detour库。关于如何HookApi方法,可以参看我之前《一种注册表沙箱思路、实现——Hook Nt函数》。...如果不是该消息,我们将判断该窗口是否为顶层窗口,且其窗口样式包含WS_SYSMENU(我试验了下,我所遇到我认为该处理窗口都有该属性,这个属于经验之谈,不一定准确)。...如果不存在,就创建一个管理两个“吸附”窗口线程,并将对保存到Map中。如果存在,则向这个线程管理窗口发送相应消息。...,于是继承于CMessageLoop;因为我们要让我们窗口屏蔽ATL+F4这类操作,所以我们要PreTranslateMessage,于是要继承于CMessageFilter。...在消息射中,我们要让我们不处理消息交给基类处理 typedef CWTLTitleWindow _thisClass; typedef CDoubleBufferImpl<_thisClass

1.5K40
  • 以金山界面库(openkui)为例思考和分析界面库设计和实现——代码结构(完)

    这就是我之前所说,属性类型是在不同子类中确定。...但是个人觉得这不是一种好设计,我觉得图片皮肤类(m_imgSkin对应类)应该是各个模块图片皮肤类父类,即应该是继承关系,而不应该是包含关系。...它在其内部维护了一组伪窗口信息,然后所有操作都是遍历这些伪窗口处理函数实现消息传递,比如OnCreate方法实现。...我们还要关注下容器类如何和各个组件进行通信。在MFC窗口模式下,消息通过消息泵进行传递。而Kui除了容器类是窗口类,其他组件类则不是窗口,那么它们之间消息是怎么传递?...我们知道只有窗口才能收到消息,那么可以想到第一步处理消息地方应该是容器类。以窗口尺寸改变为例,当窗口尺寸改变时,其内部组件也要被调整。

    1K20

    RabbitMQ是如何确定消息是否投递到队列中

    前言 在使用RabbitMQ消息中间件时,因为消息投递是异步,默认情况下,RabbitMQ会删除那些无法路由消息。为了能够检出消息是否顺利投递到队列,我们需要相应处理机制。...今天就来验证一下相关验证机制。 2. 消息投递失败 那么哪些情况消息会投递失败呢?RabbitMQ消息会先到达指定交换机,然后由交换机路由到对应队列。所以以下几种情况会导致消息投递失败。...CORRELATED,发布消息时会携带一个CorrelationData,被ack/nack时CorrelationData会被返回进行对照处理,CorrelationData可以包含比较丰富元信息进行回调逻辑处理...总结 消息投递失败处理在使用RabbitMQ使用中时非常必要,能够帮助我们追踪消息投递情况,以及处理消息投递异常或者成功后逻辑处理,为消息丢失进行一些兜底或者记录。...但是请注意这个并不是发生在消费阶段,是否成功消费并不是由这两种回调来处理,我们有空再对消息消费确认进行讲解。多多关注:码农小胖哥 获取更多编程干货。

    2.7K40

    MFC子窗口任务栏显示图标和主窗口最小化在系统托盘中显示图标

    MFC子窗口任务栏显示图标很简单, 只需要在子窗口初期化函数OnInitDialog()中添加ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW); 主窗口在系统托盘中显示图标以及恢复窗口是参考某位大神代码...(一)  原理     1、最小化原理:首先要将窗口隐藏,然后在右下角绘制图标。     ...2、恢复原理:将窗口显示,再将托盘中图片删除。...    3、在消息射中添加  ON_MESSAGE(WM_SHOWTASK,OnShowTask);       //其中WM_SHOWTASK是消息名, OnShowTask是自己定义消息响应函数...menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //确定弹出式菜单位置                  HMENU hmenu

    3.1K80

    【CC++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中应用

    ) 指针变量存储内容是一个地址信息,而指针类型确定了指向内容类型。...这个值包含了应用程序对具体消息处理结果,不同消息该值可能不同。 CALLBACK 是函数调用约定。窗口过程函数本质上是一个回调函数,调用者是操作系统。...在窗口第一次收到 WM_PAINT 消息时候,整个客户区都需要被重绘,所以 rcPaint 将包含整个客户区,而随后 WM_PAINT 消息,rcPaint 参数内部包含区域可能会小一些。...return 0; 代码中,MessageBox 函数会展示一个包含确定和取消按钮模态对话框,如果用户点击确定,程序就会调用 DestoryWindows 销毁窗口。...应用程序状态管理 窗口过程是一个函数,该函数包含了每条消息对应业务逻辑。它本身是无状态。然而有些时候你需要跟踪应用程序中每次函数调用状态信息。

    1.6K21

    WPF 如何确定应用程序开启了 Pointer 触摸消息支持

    因为 WPF 在开启 Pointer 和没有开启基础表现几乎相同,因此从业务层很难了解到当前是否开启了 Pointer 消息。...本文从开发者角度,通过 Windows 消息判断当前是否开启 Pointer 支持 在 win10 支持默认把触摸提升 Pointer 消息 告诉大家如何在 Win10 下让 WPF 在 .NET 4.7...和以上框架支持 Pointer 消息 那么如何确定这个 WPF 程序我写对了,开启了 Pointer 消息?...可以通过监听 Window 消息,如果能收到 Pointer 消息,那么算开启成功 不需要在用户端判断,用户端只需要判断 运行系统是 Windows 10 Creators Update 1703...因此本文更多是给开发端,开发时候通过此方法可以确定是否开启了 Pointer 消息 在 WPF 添加窗口消息钩子方法 这篇博客告诉大家如何拿到窗口消息 在这个基础上,尝试在拿到消息判断是否 Pointer

    64820

    MFC原理第六讲.消息传递

    消息映射表 会保存父类MessageMap 以及自己当前消息结构体数组. 消息传递是一层一层递进.那么我们现在要看一下怎么递进....要学习知识     1.窗口创建流程.以及默认回调函数     2.消息处理流程 二丶窗口创建流程.以及默认回调函数   我们要看窗口创建.那么就需要跟进 MFC源码去看....Create消息来到时候 HWND hWnd = CreateWindowEx(cs.dwExStyle, cs.lpszClass, cs.lpszName, cs.style...上面五条则是我们创建窗口时候进行一系列操作. 所以我们消息处理函数变成了 afxWndProc了这个消息处理函数就会在发生消息时候第一个来到....三丶消息处理流程   通过上面我们得知了窗口处理回调已经更改了. 现在我们直接对我们消息下段点.就可以验证一下.是否是我们函数首次来到. 对我们按钮点击下段点. 通过栈回朔一层一层往上看.

    99210

    win32程序之子窗口编程

    一丶简介.什么是子窗口   在前边我们已经讲解了窗口本质.以及如何注册窗口类跟创建窗口. 还讲了消息循环....那么有很多窗口其实Windows已经帮我们创建出来了.我们直接使用即可. 而这些窗口都有自己消息循环. 只有改变状态时候.才会发送消息给我们窗口通知. 此时我们捕获消息就可以进行处理了....子窗口其实就是绘制在主窗口一个窗口.  这些窗口包含了  BUTTON  (按钮控件)  EDIT(编辑框控件) ..... 二丶创建子窗口 1.创建EDIT子窗口   创建子窗口很简单....#define IDC_MY_EDIT_ONE 10 //编辑框ID 自己定义即可. // 此代码模块中包含函数前向声明: LRESULT CALLBACK WndProc(HWND...但是我们如何知道是哪个消息.? 既然我们知道了子窗口改变状态会发送消息.那么我们可以调试一下.打印一下消息. ? 也就是在我们父窗口消息处理回调中打印一下消息.

    1.9K21

    atl创建avtive

    1.activex无窗口问题(控件在编码过程中要检查m_hWnd是否存在,不然vs可能会出现绘制错乱和崩溃) ?...atl窗体通过CComControlBase内部变量控制,窗体属性,包括onsize事件对应m_bRecomposeOnResize变量控制窗体变化事件响应。 2.可插入控件 ?...axHost错误是因为,activex未设置插入属性(见2设置) 4.atl中指针错误不会异常崩溃,可以通过vs反汇编查询打印输出提示异常地址得到具体错误点 ?...8.组建异常(IErrorInfo接口) SetErrorInfo抛出异常 9.连接点 双击类窗口接口可以查看编辑文件,如果双击显示idl文件,就可以在该接口上添加函数接口了...控件端事件实现可以通过,类窗口控件类右键“接口实现”,选择实现接口和模块自动实现后连接点代码。如下: ? ? ? ? 10.c#调用过程中,项目obj需要手动删除,否则会有编译错误。

    1.3K20

    getcomponent_getsocketopt

    GetMesssge只接收与参数hWnd标识窗口或子窗口相联系消息,子窗口由函数IsChild决定,消息范围由参数wMsgFilterMin和wMsgFilterMax给出。...返回值: 返回值是窗口程序返回值。尽管返回值含义依赖于被调度消息,但返回值通常被忽略。 补充 MSG结构必须包含有效消息值。...第五个参数 wRemoveMsg确定消息如何被处理。此参数可取下列值之一: 值 意义 PM_NOREMOVE PeekMessage处理后,消息不从队列里除掉。...PeekMesssge只得到那些与参数hWnd标识窗口相联系消息或被lsChild确定为其子窗口相联系消息,并且该消息要在由参数wMsgFiterMin和wMsgFiherMax确定范围内。...如果hWnd为NULL,则PeekMessage接收属于当前调用线程窗口消息(PeekMessage不接收属于其他线程窗口消息)。

    41010

    Win32对话框程序(2)

    application, excluding the program name int    nCmdShow 设置窗口显示方式,比如nCmdShow=SW_MAXIMIZE表示最大化窗口,详见MSDN...lpCmdLine是不包含程序名命令行,根据MSDN使用函数GetCommandLine()也可返回命令行字符串,不过会包含程序名。...MainDlg.cpp中包含四个函数: 函数名 参数 功能 Main_Proc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 消息分流器,进行消息分流...中,对话框中有菜单和不同控件,通过ID对他们进行标示,如果用户对他们进行了某种操作(比如单击),则在Main_OnCommand函数体内进入相应case,执行其中代码,如上,当点击“确定”按钮是会弹出...,当然,对话框程序应该是Windows编程中很简单,还有很多其他内容需要学习,此外,学习windows编程很重要一部分就是掌握尽可能多API,万丈高楼平地起,一步步来~ 遗留问题 操作系统是如何向程序传递参数

    1.2K30

    windows程序设计第五版_程序设计中三种基本结构

    结构WNDCLASS包含一个窗口全部信息,也是Windows编程中使用基本数据结构之一,应用程序通过定义一个窗口确定窗口属性 基本信息 要得到某一窗口WNDCLASS数据,可以用GetClassLong...要得到某一窗口窗口类,可以用GetClassName(); WNDCLASS中回调函数是窗体消息处理函数: LRESULT CALLBACK WndProc(HWND hwnd, UINT msg...//一系列定义和初始化,并产生消息循环 /* WinMain函数实现以下功能:注册窗口类,建立窗口及执行其他必要初始化工作;进入消息循环,根据从应用程序消息队列接受消息,调用相应处理过程;当消息循环检...Msg.wParam; //消息循环结束 即程序结束时 将信息返回系统 } /窗口函数 //窗口函数定义了应用程序对接收到不同消息响应,其中包含了应用程序对各种可能接受到消息 //处理过程,是消息处理分支控制语句集合...应用程序可以通过处理WM_ERASEBKGND 消息或检查由 BeginPaint 函数填写 PAINTSTRUCT 结构fErase 字段来确定背景什么时候需要着色。

    46710

    键盘钩子入门

    在这些消息到达目标窗口之前对这些消息进行处理。 1.1 钩子函数 1)钩子函数会降低操作系统性能,因为它增加系统处理每一个消息开销。所以用户除非必须才要安装钩子,而且还要尽可能早地去除钩子。...//系统消息过滤钩子 2 动态链接库 2.1 dll基础 Windows API中所有函数都包含在dll中。...3个最重要DLL是: 1)kernel32.dll : 包含用于管理内存、进程和线程各个函数 2)User32.dll : 包含用于执行用户界面任务(如窗口创建和消息传送)各个函数 3)GDI32....dll : 包含用于画图和现实文本各个函数 2.2 为什么使用dll 1)它们扩展了应用程序特性,由于dll能够动态地装入进程地址空间,因此应用程序能够在运行时确定需要执行什么操作,然后装入相应代码...TRUE; } // // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口消息

    95510

    MFC消息_为什么发消息对方不回

    hWnd:其消息被检查窗口句柄。   wMsgFilterMin:指定被检查消息范围里第一个消息。   ...wMsgFilterMax:指定被检查消息范围里最后一个消息。   wRemoveMsg:确定消息如何被处理。...PeekMesssge只得到那些与参数hWnd标识窗口相联系消息或被lsChild确定为其子窗口相联系消息,并且该消息要在由参数wMsgFiterMin和wMsgFiherMax确定范围内。...如果hWnd为NULL,则PeekMessage接收属于当前调用线程窗口消息(PeekMessage不接收属于其他线程窗口消息)。...和WM_ KEYUP消息组合转换为一条WM_CHAR消息(该消息wParam附加参数包含了字符ASCII码),并将转换后消息投递到调用线程消息队列中。

    54720

    【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

    ;WNDCLASSEXA 是包含窗口信息结构。...例如,如果用户在应用程序中选择"确定"按钮,Windows 会向您发送消息,您可以在WndProc函数内编写代码,执行任何适当操作。 这称为处理事件。 您只处理与应用程序相关事件。...(在函数返回之前发送消息。)在创建窗口之后,但在该窗口变为可见之前,新窗口窗口过程会收到此消息。...hWnd:获取消息窗口句柄,文档中解释到:“如果hWnd为NULL,则GetMessage检索属于当前线程任何窗口消息,以及当前线程消息队列中hwnd值为NULL消息(请参阅MSG结构)。...因此,如果hWnd为NULL,则将同时处理窗口消息和线程消息。”

    1K20

    深入浅出MFC学习笔记1_GetMessage、PeekMessage、TranslateMessage、DispachMessage等等用法 消息循环中TranslateMessage函数和Dis

    hWnd:其消息被检查窗口句柄。   wMsgFilterMin:指定被检查消息范围里第一个消息。   ...wMsgFilterMax:指定被检查消息范围里最后一个消息。   wRemoveMsg:确定消息如何被处理。...PeekMesssge只得到那些与参数hWnd标识窗口相联系消息或被lsChild确定为其子窗口相联系消息,并且该消息要在由参数wMsgFiterMin和wMsgFiherMax确定范围内。...如果hWnd为NULL,则PeekMessage接收属于当前调用线程窗口消息(PeekMessage不接收属于其他线程窗口消息)。...尽管返回值含义依赖于被调度消息,但返回值通常被忽略。   备注:MSG结构必须包含有效消息值。

    78810

    WINDOWS核心编程--Windows程序内部运行机制

    *LPMSG; 第一个参数:hwnd hwnd是一个窗口句柄,用于区别该消息属于哪一个窗口,可以说是一个窗口编号。...一个消息一般都与某个窗口相关联,比如鼠标移动到某个窗口中按下鼠标左键,该窗口就会收到一个“WM_LBUTTONDOWND”消息,而应用程序就是利用消息hwnd值来 确定消息到底是属于众多窗口哪一个窗口...第四个参数 nCmdShow 指定程序窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数值由该程序调用者所指定,在调用ShowWindow()时可以使用到该值。...窗口创建 设计一个窗口类 windows给我们设计好了,只需要做填空,就能创建很好类 结构WNDCLASS包含一个窗口全部信息,也是Windows编程中使用基本数据结构之一,应用程序通过定义一个窗口确定窗口属性...第四个参数 wMsgFilterMax指定被检查消息范围里最后一个消息。 第五个参数 wRemoveMsg确定消息如何被处理。

    1.5K50
    领券