`
ub137ub
  • 浏览: 16088 次
社区版块
存档分类
最新评论

VC添加自定义消息(转)

 
阅读更多

VC添加自定义消息(转)
2011年04月14日
  VC的ClassWizard不允许增加用户自定义消息,所以你必须手工进行添加。当你添加了自定义的消息以后,ClassWizard就可以像处理其它消息一样处理你定义的消息了。
  一、VC6添加自定义消息
  1、定义消息。在Windows中,所有的消息都用一个特定的整数值来表示,为了避免自定义消息与已存在的其他消息发生冲突,应该利用Windows提供的一个常量:WM_USER,小于这个常量的是系统保留的。即用户自定义的消息至少为WM_USER+1,注意最后表示的消息的数值不要超过0x7FFF。在开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
  #define UM_PROGRESS WM_USER + 100
  2、在类头文件的AFX_MSG块中声明消息处理函数:
  class CMainFrame:public CFrameWnd{
  protected:
  //{{AFX_MSG(CMainFrame)
  afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  afx_msg void OnTimer(UINT nIDEvent);
  afx_msg LRESULT OnProgress(WPARAM wParam, LPARAM lParam);
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()
  3、在类的实现文件中,使用ON_MESSAGE宏指令将消息映射到消息处理表中。
  BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  //{{AFX_MSG_MAP(CMainFrame)
  ON_WM_CREATE()
  ON_WM_TIMER()
  ON_MESSAGE(UM_PROGRESS, OnProgress)//注意这条语句的后面没有分号
  //}}AFX_MSG_MAP
  END_MESSAGE_MAP()
  4、实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。
  LPESULT CMainFrame::OnProgress(WPARAM wParam,LPARAM lParam){
  CRect rect;
  m_wndStatusBar.GetItemRect(2,&rect); //获得窗格区域
  //创建进度栏,注意第三个参数为CWnd* pParentWnd,根据情况选择父窗体
  m_progress.Create(WS_CHILD|WS_VISIBLE|PBS_VERTICAL,rect,this,123);
  m_progress.SetPos(50);
  return 0;
  }
  5、在适当的时候发送自定义消息,进行消息处理。需要注意使用SendMessage还是PostMessage进行处理:SendMessage是消息处理完毕后再返回;而PostMessage则是把消息放到消息队列后立即返回。
  SendMessage(UM_PROGRESS);
  PostMessage(UM_PROGRESS);   
  如果用户需要整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
  二、VC2003添加自定义消息
  在VC2003中添加自定义消息和VC6基本一致。需要注意的是VC6处理的消息可以没有参数,但VC2003消息处理的函数必须带有两个参数wParam和lParam,并且其返回值类型为LRESULT。这里,还有另一种方法可以实现地定义消息的处理(VC6和VC2003均适用):
  1、定义消息:#define UM_PROGRESS WM_USER + 100
  2、重载CMainFrame的DefWindowProc函数,然后添加对用户自定义消息处理:
  LRESULT CMainFrame::DefWindowProc(UINT message, WPARAM wParam,
  LPARAM lParam){
  switch(message){
  case UM_PROGRESS:{
  //通过指定资源ID获得相应的索引
  int index = m_wndStatusBar.CommandToIndex(IDS_PROGRESS);
  CRect rect;
  m_wndStatusBar.GetItemRect(index,&rect);
  m_progress.Create(WS_CHILD|WS_VISIBLE,rect,&m_wndStatusBar
  ,123);
  m_progress.SetPos(50);
  break;
  }
  default:
  break;
  }
  return CFrameWnd::DefWindowProc(message, wParam, lParam);
  }
分享到:
评论

相关推荐

    VC6自定义消息WM_USER

    在窗口过程(`WndProc`)中,我们需要添加对自定义消息的处理。在`switch`语句中增加一个`case`分支来处理`WM_MYCUSTOMMSG`: ```c++ switch (message) { case WM_MYCUSTOMMSG: // 自定义消息的处理代码 ...

    VC发送自定义消息

    2. 在消息映射中添加对自定义消息的处理,如上述`ON_MESSAGE`的例子所示。 3. 在源代码中,可能有一个按钮或事件触发发送自定义消息,例如在按钮的点击事件处理函数中调用`SendMessage`。 4. `OnMyCustomMessage`...

    VC中自定义消息的传递

    2. **消息映射**: 在接收自定义消息的类中,我们需要在消息映射表中添加一条对应的消息映射项。例如: ```cpp BEGIN_MESSAGE_MAP(CMyClass, CDialog) ... ON_MESSAGE(WM_MYCUSTOMMSG, &CMyClass::OnMyCustomMsg) ...

    VC中添加响应自定义的消息的代码步骤

    在VC(Visual C++)开发环境中,自定义消息的处理是一项常见且实用的功能,它允许开发者为应用程序添加特定的行为响应,以实现更为复杂和灵活的交互逻辑。下面将详细解析如何在VC中添加并响应自定义消息的具体步骤,...

    vc自定义消息实例

    在这个“vc自定义消息实例”中,我们将探讨如何在VC++环境下创建和处理自定义消息,这对于扩展Windows API功能和实现特定功能是非常有用的。 自定义消息是在Windows消息系统中,程序员为应用程序定义的非标准消息...

    VC++6.0下强大的自定义消息程序的编写

    ### VC++6.0下强大的自定义消息程序的编写 #### 概述 在Windows编程中,使用Visual C++ 6.0(简称VC++6.0)进行开发时,自定义消息是一种非常实用的技术。它能够帮助程序员更加灵活地控制程序的行为、状态更新以及...

    VC-DEFINE-MESSAGE.rar_vc自定义消息

    在`RegisterClass`函数中添加你的自定义消息。例如: ```cpp WNDCLASS wc; wc.lpfnWndProc = MyWindowProc; // 自定义的窗口过程函数 wc.lpszClassName = "MyClass"; wc.style = CS_HREDRAW | CS_VREDRAW; wc....

    在VC项目中使用自定义资源(Code)

    在VC++项目中,自定义资源的使用是一个重要的技术点,尤其对于开发具有特定功能或需求的桌面应用程序来说。自定义资源可以包括图标、位图、对话框、字符串表等,甚至可以是开发者自己定义的数据格式。下面我们将深入...

    VC中实现自定义消息(源码+文档说明)

    本资源主要关注的是如何在MFC中实现自定义消息,并提供了源代码示例和文档说明。自定义消息是扩展Windows消息系统的一种方式,它允许程序员在应用程序内部或者不同组件之间传递特定的信息。 首先,自定义消息的创建...

    vc2008 自定义表格类

    这个"vc2008 自定义表格类"旨在提供一个强大且美观的解决方案,帮助开发者更高效地管理数据展示。下面我们将详细探讨这个自定义表格类的一些关键知识点: 1. **自定义控件**:在Windows应用程序开发中,自定义控件...

    VC中怎样使用sendmessage自定义消息函数

    ### VC中如何使用`SendMessage`自定义消息函数 在Visual C++ (VC) 的MFC框架中,`SendMessage`函数是一种非常重要的通信机制,用于在不同的窗口之间传递信息。通过自定义消息,开发者能够实现更加灵活和高效的功能...

    visual c++ vc自定义消息弹出框MessageBox上有图片,自定义文字大小和颜色,超链接

    总的来说,通过自定义对话框和巧妙使用MFC控件,开发者可以在VC++环境中创建出功能更加强大的消息弹出框,不仅限于基本的文字提示,还可以包含图片、定制的文字样式和超链接,从而提升用户体验。深入理解和熟练运用...

    VC调用自定义工具条按钮窗口的实现

    调用自定义工具条按钮通常涉及消息映射和消息处理。在你的自定义按钮类中,你需要定义消息处理函数,这些函数会响应用户的交互。例如,你可以这样定义: ```cpp ON_BN_CLICKED(IDC_MY_BUTTON, OnMyButtonClick) ```...

    VC实现自定义绘图风格代码

    在VC++编程环境中,自定义绘图风格是创建独特用户界面和交互体验的重要技术。本文将深入探讨如何利用VC++实现一个类似于系统“画笔”应用程序中的“绘图风格”选择窗口,并将其集成到“ControlBar”中。我们将讨论...

    VC自定义工具条转换软件

    "VC自定义工具条转换软件"是一个专为VC++开发者设计的实用工具,它的主要功能是将创建的自定义工具条转换为位图或图标文件,以便于在应用程序中集成和显示。 自定义工具条通常由多个工具栏按钮组成,每个按钮可以...

    VC各种自定义扩展控件

    自定义扩展可能包括改变按钮的外观(如添加图片、使用不同形状),增加新的行为(如双击触发事件)或者提供更复杂的交互(如下拉菜单)。开发者可以通过重绘按钮的消息处理,或者使用MFC(Microsoft Foundation ...

    VC自定义向导(含控件自绘)

    在这个场景下,"VC自定义向导(含控件自绘)"是一个专为Visual C++(VC)设计的工具,它允许开发者创建自定义的向导式用户界面,并且包含控件自绘功能。控件自绘是指程序直接控制控件的绘制过程,以实现更个性化的界面...

    vc6.0自定义Geoprocessing Tool

    本教程以“vc6.0自定义Geoprocessing Tool”为主题,通过VC++ 6.0这个经典的开发环境,探讨如何实现自定义GP工具,涉及的主要知识点包括IGPFunction和IGPFunctionFactory接口的实现。 1. **Geoprocessing基础**:...

    vc 各种自定义按纽

    标题“vc 各种自定义按纽”表明了这个压缩包文件包含了多种使用VC 6.0实现的自定义按钮示例,非常适合学习界面设计的初学者。 VC 6.0是Microsoft Visual C++的一个版本,它是一个集成开发环境(IDE),用于编写使用...

Global site tag (gtag.js) - Google Analytics