转贴:VC++中对于处理消息的学习总结

一个用PostThreadMessage线程通信例子 #include #include #include #include #define UM_MSG1 WM_USER+1#define UM_MSG2 WM_USER+2DWORD WINAPI Thread1(LPVOID para){ DWORD dwThreadId = *(DWORD *)para; DWORD i=0; TCHAR *p; 阅读详情

Message Map

struct AFX_MSGMAP //消息映射表
{
AFX_MSGMAP* pBaseMessageMap; //基类消息映射表的指针;
AFX_MSGMAP_ENTRY* lpEntries; //消息入口表的指针;
};

struct AFX_MSGMAP_ENTRY //消息映射入口表
{
UINT nMessage; //消息;
UINT nCode; //控件的通知码或WM_NOTIFY的通知码
UINT nID; //控件的ID,(0时为 Window 消息)
UINT nLastID; //最后一个控件的ID;
UINT nSig; //信号类型;
AFX_PMSG pfn; //消息函数的指针;
};

typedef void (CCmdTarget::*AFX_PMSG)(void); //消息映射函数;

一、消息映射图
1、DECLARE_MESSAGE_MAP()
展开:
static AFX_MSGMAP_ENTRY _messageEntries[] //消息映射入口表
static AFX_MSGMAP messageMap; //消息映射表;
virtual AFX_MSGMAP* GetMessageMap() const;//返回消息映射 表的指针;

2、BEGIN_MESSAGE_MAP(class_name,base_class_name)
①、定义GetMessageMap()函数,代码如下:
{ return &class_name::messageMap;}
②、初始化消息映射表,代码如下:
AFX_MSGMAP class_name::messageMap={
&(base_class_name::messageMap),
&(class_name::_messageEntries)
}
③、初始化消息入口表
AFX_MSGMAP_ENTRY class_name::_messageEntries[]={
//在这里添加消息和映射函数;

3、END_MESSAGE_MAP()
{0,0,0,0,AfxSig_end,(AFX_PMSG)0}
} ; //该括号和③相对应;


二、消息类型
1、命令消息(WM_COMMAND)
所有派生自 CCmdTarget 的类都有资格接受WM_COMMAND。

2、Window消息(WM_xxx)
所有派生自 CWnd 的类都有资格接受 WM_xxx。

3、控件消息(WM_NOTIFY)
控件向其父窗口通知消息。

三、消息处理
1、WM_xxx 消息处理
窗口类(自身)处理→基类处理→CWnd∷DefWindowProc()处理;
其所对应的宏一般为在消息 WM_ 前面加上 ON_。

2、命令消息处理
命令消息来自命令用户接口对象(菜单、加速键或工具栏按钮)发出的WM_COMMAND消息;
㈠、WM_COMMAND消息
其所包含的类型和对应的宏如下:
①、ON_COMMAND(ID,pfn)
标准的命令消息;

②、ON_COMMAND_EX(ID,pfn)
多个对象对同一个命令 ID 的处理;
其函数的原型如下:
afx_msg BOOL pfn(UINT nID)
说明:
当返回 TRUE 时表示已经处理,不用在消息处理链中继续处理该命令;为 FALSE 时表示继续在消息处理链中处理该命令。
注意:
其一:在多对象处理中一定要使用该宏;
其二:pfn(UINT nID)(消息处理函数)返回值将其类型void改成BOOL,而且必须为FALSE;
其三:多个对象的处理是由高层向低层的过程:即视图类→主框架窗口类→应用程序类;

③、ON_COMMAND_RANGE(nID,nLastID,pfn)
多个命令 ID 提供相同的处理;
注意:
其一:确保nID、nLastID的值在 Resource.h 中是连续的。
其二:一般在函数 pfn(UINT nID) 中加入参数,用来确定那一个按钮点击。

㈡、CN_UPDATE_COMMAND_UI消息
当菜单项、工具栏按钮等[命令用户接口对象]要更新其状态时所对应的消息,它所包含的类型和对应的宏如下:
①、ON_UPDATE_COMMAND_UI(ID,pfn)
其中函数的原型如下:
afx_msg void pfn(CCmdUI* pCmdUI)

②、ON_UPDATE_COMMAND_UI_RANGE(nID,nLastID,pfn)
该函数可以处理一组[命令用户接口对象]的外观;
其中函数的原型如下:
afx_msg void pfn(CCmdUI* pCmdUI)
重要:
CCmdUI 中的 m_nID 成员表示不同的 ID,因此可以利用它来进行区别处理。

3、控件的通知消息
从控件和子窗口发送到父窗口的WM_COMMAND通知消息(即在发送命令消息中加入控件的通知码)。
注意:在 Window9x 新控件中不再传送WM_COMMAND通知消息,而是发送 WM_NOTIFY 消息,但为了兼容,旧有的控件还是传送WM_COMMAND消息。
例如:
CEdit控件向父窗口发送 EN_CHANGE 通知代码的WM_COMMAND消息。
注意:框架像传送其它 WM_ 消息一样传送通知消息,但有一个例外,即由 [按钮] 控件发送的 BN_CLICKED 通知消息,被作为命令消息特别处理。
㈠、WM_COMMAND 其所对应的宏如下:
①、ON_CONTROL(通知码, nID,fn)
②、ON_CONTROL_RANGE(通知码, nFirstID,nEndID,fn)
注意:
这两个宏的应用和 ON_COMMAND、ON_COMMAND_RANGE相同,所不同的是在宏前面加入[通知码]。
注意:可以根据不同的控件的[通知码]派生出特定的宏,其所派生的宏一般为在 [通知码] 前面加上 ON_。
㈡、WM_NOTIFY 其所对应的宏如下:
①、ON_NOTIFY(通知码, nID,fn)
其中函数的原型如下:
afx_msg void fn(NMHDR* pNotifyStruct,LRESULT* result)
其中结构:
typedef struct tagNMHDR {
HWND hwndFrom; //发送通知消息的控件的句柄;
UINT idFrom; //发送通知消息的控件的 ID;
UINT code; //通知码;
} NMHDR;

②、ON_NOTIFY_EX(通知码, nID,fn)
表示一个消息在多个对象的成员函数中进行处理。
其中函数的原型如下:
afx_msg BOOL fn(UINT nID,NMHDR* pNotifyStruct,LRESULT* result)
说明:
它必须返回 BOOL 类型的数值,其意义和 ON_COMMAND_EX 相同。

③、ON_NOTIFY_RANGE(通知码, nFirstID,nEnd,fn)
表示多个控件的通知消息在同一个函数中进行处理。
其中函数的原型如下:
afx_msg void fn(UINT nID,NMHDR* pNotifyStruct,LRESULT* result)
说明:
其意义和ON_COMMAND_RANGE相同。

4、反射消息处理
父窗口在处理控件窗口的通知消息WM_CTLCOLOR、WM_COMMAND、WM_NOTIFY时,会把该消息转化为反射消息,并转交给控件子窗口处理,只有在控件子窗体不处理该消息时,父窗口才有机会处理。
注意:在类的属性对话框中的消息页面可查反射消息(前面有"="标志)
①、WM_CTLCOLOR_REFLECT反射消息
其所对应的宏如下:
ON_WM_CTLCOLOR_REFLECT()
反射消息函数的原型:
HBRUSH class_name∷CtlColor(CDC* pDC,UINT nCtlColor)
{
return NULL;
}
该函数用来重置控件的顔色;注意:必须 return CBrush才有效。


5、自定义的窗口消息
自定义窗口消息的消息标志都大于WM_USER(至少是WM_USER+100,因为许多控件都使用这一范围的WM_USER消息)
使用自定义的消息分为二步:
①、在 Resource.h 中定义消息标记
#define WM_MYMSG (WM_USER+1000)

②、在消息映射表中加入消息映射宏
BEGIN_MESSAGE_MAP()

ON_MESSAGE(WM_MYMSG,fn)
END_MESSAGE_MAP()
说明:
其对应的宏为 ON_MESSAGE(),其成员函数的原型为:
afx_msg LRESULT fn(WPARAM,LPARAM)

6、登记消息
①、在系统中注册并获取一个登记消息的消息标记
UINT RegisterWindowMessage(LPCTSTR)
说明:
通过 API 函数来注册消息标记,其中 LPCTSTR 为用户的任意字符串。例如:
UINT WM_MYMSG=RegisterWindowMessage("MYMSG");
其中 WM_MYMSG 是自定义无符号整型的消息标记。

②、在消息映射表中加入消息映射宏
BEGIN_MESSAGE_MAP()

ON_REGISTERED_MESSAGE(WM_MYMSG,fn)
END_MESSAGE_MAP()
说明:
其对应的宏为 ON_REGISTERED_MESSAGE(),其成员函数的原型为:
afx_msg LRESULT fn(WPARAM,LPARAM)
注意:登记消息可以实现跨进程的数据通讯。

7、线程消息
只有继承自CWinThread类才能允许处理线程消息。
①、定义线程的消息标记
有两种方法:
(1)、使用自定义的消息标记,即:WM_USER;
(2)、使用登记的消息标记,即:RegisterWindowMessage;

②、在CWinThread继承类的消息映射表中添加宏
ON_THREAD_MESSAGE(消息标记,fn) //自定义的消息;
ON_REGISTERED_THREAD_MESSAGE(消息标记,fn) //登记的 //消息
③、其函数的原型如下:
afx_msg void fn(WPARAM wPARAM,LPARAM lParam)

④、引发线程消息
线程消息的引发必须调用 CWinThread 类的PostThreadMessage将消息投递到线程消息队列中。
注意:可以通过 AfxGetApp() 函数获取一个全局的应用对象。
PostThreadMessage(UINT,WPARAM,LPARAM)

8、WM_COPYDATA
操作系统维护一块内存来管理 WM_COPYDATA 消息,该消息主要用于跨进程传递数据,传递的数据量达到 232。
①、定义一个 COPYDATASTRUCT 数据结构
typedef struct tagCOPYDATASTRUCT {
DWORD dwData; //自定义的特殊数据;
DWORD cbData; //以字节为单位的 lpData 的大小;
PVOID lpData; //传送的数据内存块的指针;
} COPYDATASTRUCT;

②、其所对应的宏
ON_WM_COPYDATA()

③、其所对应的函数的原型
afx_msg BOOL OnCopyData(CWnd*,COPYDATASTRUCT*)
说明:
CWnd*:发送该消息的窗口的指针;


9、投递和发送消息
通过向一个窗体投递或发送消息,可以间接地驱动窗体的消息过程。
投递(PostMessage):将消息放到线程的消息队列中,然后不等线程处理该消息就直接返回到调用方。
发送(SendMessage):当一个线程向目标线程发送消息时,该线程要一直等待,直到目标线程处理了该消息为止。
①、投递消息
BOOL CWnd∷PostMessage(UINT,WPARAM=0,LPARAM=0)
说明:
CWnd:目标窗口;
该函数将一条消息放入到应用程序的消息队列,然后不等窗口处理就直接返回。

②、发送消息
LRESULT CWnd∷SendMessage(UINT,WPARAM=0,LPARAM=0)
说明:
CWnd:目标窗口;
该函数将一条消息放入到应用程序的消息队列,等待窗口处理后才返回。
为了避免线程陷入永久等待状态,可以用SendMessageTimeout代替SendMessage:
LRESULT SendMessageTimeout(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR)
说明:
HWND:窗口句柄;
UINT:消息发送的选项,为SMTO_BLOCK时,可以防止线程无 限等待,即根据一定的超时值返回。
UINT:超时,以毫秒为单位;
PDWORD_PTR:返回值;
注意:CWnd没有对该函数的包装。

③、投递和发送消息
BOOL CWnd∷SendNotifyMessage(UINT,WPARAM,LPARAM)
说明:
CWnd:目标窗口;
该消息具有SendMessage和PostMessage两种功能:
当目标窗口和发送窗口为同一个线程时,则相当于SendMessage的功能;否则当不为同一个线程时,则为PostMessage的功能。

6-1、投递和发送 WM_XXX 消息
在发送标准的 WINDOW 消息时,只要将该消息的 ID、wParam、lParam参数放在 SendMessage()和PostMessage()函数的相应位置即可。

6-2、投递和发送命令消息和控件的通知消息
在投递和发送命令消息时,消息的 ID为 WM_COMMADN,而对于不同的菜单项、加速键、控件则wParam、lParam的取值不同。
wParam分成低、高两部分,低部分为菜单项、加速键、控件的ID。高部分则:
菜单项:0;加速键:1;控件:通知码
lParam:当控件时是控件的句柄,否则为 NULL。

对于wParam参数可以采用自定义宏:
WPARAM MAKEWPARAM(WORD wLow,WORD wHigh)

6-3、投递和发送自定义的窗口消息
在投递和发送自定义的窗口消息时,参数 wParam、lParam 没有特别的涵义,只和普通函数的形参一样进行数据的传递。
注意:
PostMessage 和 SendMessage 是不同的,前者投递后就返回,而后者必须等到消息处理后再返回;所以在参数是 [局部] 或 [临时]时,使用PostMessage函数会引发错误(除非参数使用 指针,则可避免错误),而必须使用SendMessage函数。
6-4、投递和发送注册的窗口消息
和 6-3 基本一样,但它要特别注意的问题是:在跨进程的处理消息时,如果将消息PostMessage、SendMessage到某个进程 A,则必须在进程 B 中获取进程 A 的窗口类名,并通过窗口类名获取窗口的指针,最后再根据指针调用 PostMessage、SendMessage 函数。
注意:在获取窗口的指针时,可以根据窗口类名或窗口的标题。


6-5、投递和发送WM_COPYDATA消息
SendMessage(消息标记,WPARAM,LPARAM)
其中:
消息标记:WM_COPYDATA;
WPARAM:发送该消息的窗口句柄;
LPARAM:COPYDATASTRUCT结构的指针,先通过(LPVOID)进行转换,再通过(LPARAM)进行转换,如下形式:
(LPARAM)(LPVOID)&cds

 
VC++深入详解(2):MFC消息映射与基本绘图 先看一个简单的例子:让程序对鼠标左键响应一个messagebox。 有两种方法完成这个任务:1.在对应的类上选择Add windows message Handler,然后选择WM_LBUTTONDOWN消息,然后增加处理函数,在处理函数中添加一句: MessageBox("view click!");或者使用菜单上的查看->建立类向导,在message maps下选择:Project选 阅读详情

相关推荐

VC++中窗口过程函数及其消息发送、响应机制介绍

在VC++中,窗口过程函数是应用程序定义的一个函数,主要功能是处理发送给窗口的消息。窗口过程函数的定义是:virtual LRESULT WindowProc( UINT message, WPARAM wParam,LPARAM lParam ); 其中,message指定消息类型,wParam和lParam指定其余的消息特定信息,内容与message参数值有关。 在应用程序中窗口过程函数

小木头工作室 2772

WM_CTLCOLOR

在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射。本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正。        什么是消息反射?         在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可

feimashenhua的专栏 3441

VC++ 添加自定义消息响应函数以及发送消息SendMessage投递消息PostMessage的简单测试

1.自定义消息ID。 MyMessageDlg.h中 #define WM_MY_MESSAGE (WM_USER + 100) WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件的消息会占用一部分。 2. 定义消息处理函数。 消息处理函数为消息目标类的成员函数。同样在头文件中声明。 afx_msg LRESULT On

Yerasel的专栏 4293

消息反射详解

 么是消息反射?  在Windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射回来一样,故此得名:消息反射。  消息反射的由来  在Windows和MFC4.0版本一下,父窗口(通常是一个对话框)会对这些消息进行处理,

cspyb的专栏 1019

VC++创建一个Windows窗口程序

本文为《VC++深入详解》第一章的笔记 创建一个完整的Windows窗口程序主要步骤为 WinMain函数的定义创建一个窗口编写消息循环编写窗口过程函数 窗口的创建: 消息循环: 在创建、显示、更新窗口之后,我们需要编写一个消息循环,不断从消息队列中取出消息,并进行响应。 GetMessage(),Peekmessage()从消息队列中取出消息,并保存在消息结构体中

编程碎片流 8009

孙鑫视频VC++深入详解学习笔记

<br />VC++深入详解学习笔记<br />Lesson1: Windows程序运行原理及程序编写流程<br />Lesson2: 掌握C++基本语法<br />Lesson3: MFC框架程序剖析<br />Lesson4: 简单绘图<br />Lesson5: 文本编程<br />Lesson6: 菜单编程<br />Lesson7: 对话框编程<br />Lesson9: 定制应用程序的外观<br />Lesson10: 绘图控制<br />Lesson11 图形的保存和重绘<br />Lesso

cora2008的专栏 3135

MFC消息机制

上篇总体概述了编程方式的变化,这篇具体就MFC的消息机制进行简单的说明。 MFC(Microsoft Foundation Class),微软基础类。在我看来,MFC就是由一个个封装类按照一些特定的规则构成的程序模板。 这个模板中最重要的部分应该就是它的消息机制了。 为了更好地了解MFC的消息机制,现将MFC消息机制进行简化,保留其最为重要的部分。 MFC消息机制有两个重要的线程,一个是消

1729

用VC++制作MSN、QQ 的消息提示窗口

用VC++制作MSN、QQ 的消息提示窗口用过QQ和MSN聊天工具的人都知道,只要好友上线,就会在托盘的位置处显示一个提示窗口,以是拉帘式的,或者是淡入淡出的形式出现;想想何不为自己的程式也加一个漂亮的提示窗口呢?   一、MSN拉帘式窗口制作  分三部分:1、窗口的显示;2、窗口的停留;3、窗口的消失;如果达到这样郊果,系统中要有三个定时器,进行分别控制。定义的定时器如下:#defi

小发猫 2635

VC++消息映射的思考

 VC++消息映射的思考作者:郝庆欣在学习VC++的时候,大家都不可避免的用到消息映射。我们都知道C++是一种面向对象的编程语言,VC++中为什么这样来实现消息映射呢?  首先要明白一个包含了消息处理的Windows程序是如何工作的。  一般来说一个包含了消息处理的Windows程序至少要包含两个函数   第一个:    int WINAPI WinMain(      HINSTAN

handj的专栏 1096

VC++网络编程:IP范围消息群发实践

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何使用VC++编写基于IP/UDP协议的消息群发程序。程序支持在指定的IP地址范围内发送消息,适用于学习网络编程和VC++的初学者。文章首先解释了UDP协议的优势,并详细阐述了使用Winsock API进行socket编程的过程,包括初始化Winsock库、创建UDP套接字、设定目标IP和端口号、发送消息和资源清理。重...

weixin_33610780的博客 1051

VC++热键注册与消息处理实现详解

在Windows平台的热键机制中,热键ID(HotKey ID)是一个至关重要的标识符。它不仅用于区分不同热键的功能,还直接影响到应用程序如何响应热键事件。热键ID的设计与管理直接决定了热键系统的可维护性、可扩展性以及运行时的稳定性。本章将深入探讨热键ID的定义规则、唯一性保障、消息绑定机制以及动态管理策略,帮助开发者在复杂应用中高效使用热键功能。// 注册热键 Ctrl + Alt + X 用于退出程序if (!MessageBox(hWnd, L"注册退出快捷键失败!

weixin_42443533的博客 847

VC++消息钩子编程

一、消息钩子的概念 1、基本概念    Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息。为了拦截消息,Windows提出了钩子的概念。钩子(Hook)是Windows消息处理机制中的一个监视点,钩子提供一个回调函数。当在某个程序中安装钩子后,它将监视该程序的消息,在指定消息还没到达窗口之前钩子程序先捕获这个消息。这样就有机会对此

尹成的技术博客 1万+

MFC 消息类型(详解)

MFC 消息类型(详解),消息分类,消息详解,消息处理

VC++6.0中定义热键消息

VC++6.0中定义热键消息   在VC++6.0中,大多数的窗口消息可以从ClassWizard中找到,但是一些不常用的消息在ClassWizard中并没有封装,比如热键处理消息(WM_HOTKEY),用户必须事先定义热键,然后不论该程序在前台或后台运行,只要用户按下了这个热键,该程序就会立即在前台运行,并

bitxinhai的专栏 2377

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

医药领域知识图谱快速及医药问答项目(项目全过程)

该项目是中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目 Github项目地址:mirrors / liuhuanyong / qasystemonmedicalkg · GitCode 一、项目环境搭建 该部分要十分注意,由于版本升级的问题,一些用法及格式已经不兼容了。 python3.8 下载地址:Python Release Python 3.8.10 | Python.orght...

qq_52062182的博客 9917

关于VC++的几种消息

       在VC++中我们会遇到消息这个概念,消息是计算机或我们的应用程序发出的数据信息,每个消息都对应一个对象的成员函数,由这个成员函数来处理。我们来讲几个VC++中的消息:  1.WM_MOVE; WM_SIZE; WM_PAINT消息 WM_MOVE是窗口移动消息,当窗口移动时将发出这个消息;WM_SIZE是窗口改变消息,当窗口改变时将发出这个消息,WM_PAINT是重绘消息,当窗口需要

yinmingli的专栏 1454

汽车诊断服务(UDS——0x11服务解析)

ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。

从事汽车行业 979

VC++模拟键盘消息

实现VC++模拟键盘消息

u010757019的博客 890

手把手教你用STM32F103C8T6驱动HUB75 LED点阵屏(附74HC595级联代码)

本文详细介绍了如何使用STM32F103C8T6开发板驱动HUB75接口的LED点阵屏,包括硬件连接、74HC595级联代码、时序控制及灰度显示实现。通过实战案例展示动态文字显示和性能优化技巧,帮助开发者快速掌握LED点阵屏驱动技术。

weixin_42623010的博客 342

AMBA-CHI协议详解(十)

该规范提供了一个Request Retry(请求重试)机制,确保当请求到达一个Completer 时,它要么被接受,要么被给予一个RetryAck响应,以防止阻塞REQ通道。

Crazzy_M的博客 988

VC++ MFC的消息映射、循环机制

消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄 ,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC &lt;wbr&gt;&lt;wbr&gt;&lt;br&gt; ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可&lt;br&gt; 以象处理其它消息一样处理自定义消息。通常的做...

yff1123570554的专栏 392

领域知识图谱构建的技术流程

因此概念的属性定义十分重要,通常大部分知识库中的概念属性都是采用人工定义等方式生成的,通用知识图谱则可以从开放数据集中获取概念的属性,然后从在线百科中学习实体的属性,并对实体属性进行往上规约从而生成概念的属性。由于百科的分类体系都是经过了百科管理员或是高级编辑人员的校验,其分类系统中的数据可靠性非常高,因此从百科中抽取概念和实体,通常将标题作为实体的候选,而将百科中的分类系统直接作为概念的候选。为了对知识进行合理的组织,更好地描述知识本身与知识之间的关联,需要对知识图谱的模式进行良好的定义。

weixin_43961909的博客 334

在vs2008 vc++ 中添加mfc中消息处理函数

初学vc++,想在vs2008 c++中添加一个按钮需要添加消息处理函数,可是不像6.0,右键添加的选项里只有变量和函数,没有消息处理函数,找了一圈还是在msdn里,具体步骤如下: 1.在类视图中,右键需要添加处理函数的类,选择属性。 2.在”属性“窗口中,单击“消息”按钮。 ...

chengkui2273的博客 250

使用 MATLAB/Simulink + Simscape Electrical + Simulink Design Optimization,构建一个沙漠环境中光伏组件灰尘积累与效率下降仿真模型

本文通过,构建了沙漠环境中光伏组件灰尘积累与效率下降仿真模型✅ 建立了风速-沙尘-积尘速率的物理关系✅ 仿真了灰尘积累过程及其对Isc 和 Pmax的影响✅ 量化分析了不同清洁策略的经济性✅ 提出了优化设计与智能运维建议。

xiaoheshang_123的博客 123

YOLOv26与其他目标检测算法的对比分析

本文对YOLOv26与其他主流目标检测算法进行了全面对比分析。YOLOv26在COCO数据集上达到96.0% mAP@0.5和79.0% mAP@0.5:0.95,显著优于其他YOLO系列算法,同时保持85FPS的推理速度和35MB的轻量级模型。相比两阶段算法(如Faster R-CNN),YOLOv26在速度、模型大小和内存占用方面优势明显;相比Anchor-free算法(如CenterNet),YOLOv26在速度和模型压缩方面更优。其核心创新包括动态锚框分配、自注意力机制和轻量级设计,使其成为适用于复

一键难忘的博客 994
上一篇: 转贴:深度解析VC中的消息(下)
下一篇: VC常用数据类型使用转换详解
karlfly
博客等级 码龄23年 3粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值