⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sy0402.htm

📁 c语言经典教程
💻 HTM
字号:
<html>
<HEAD>
<TITLE>Visual C++与计算机接口</TITLE>
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312" > 
</HEAD>
<body>
<font color="#0000FF">创建自己的窗口消息</font>
<p>
(一)实验目的:<BR>
     在应用程序中创建自己的窗口消息<BR><BR>
(二)实验内容:<BR>
     定义一个新的窗口消息,实际上是一个数字ID。然后,在应用程序的类之间发送和接收该窗口消息<BR><BR>
(三)实验方法:<BR><BR>
1、创建一个新的窗口消息<BR>
  使用以下方式定义一个新的消息。若想定义多个消息,只要使用WM_USER的更大增量即可。<BR>
    # define WM_WZD_MESSAGE WM_USER+1<BR><BR>
2、发送一个窗口消息<BR>
  利用SendMessage( )发送新消息:<BR>
    pWnd->SendMessage(WM_WZD_MESSAGE,wParam,lParam);<BR>
  pWnd是指消息发送的目的窗口指针,例如由 AfxGetMainWnd() 获得的主窗口指针。<BR>
  消息所带的参数最多是两个,都是DWORD变量。可以把想要传递的数据(例如一个数值或一个指针)存储在参数wParam和lParam中,在消息处理函数中再将wParam和lParam转换为自己的数据。<BR><BR>

接收并处理新窗口消息的方法有三种:<BR>
  ·使用WndProc函数处理消息<BR>
  ·增加ON_MESSAGE宏和消息处理函数本身到接收消息类的消息映像中<BR>
  ·为此新消息创建自己的消息映像宏<BR>
  第一种最简单,但不很直观,第二种的好处是快而且简单,第三种方法的好处是在消息进行处理之前用户可以定制wParam和lParam参数,在大量使用此消息时很有用。<BR><BR>
3、使用WndProc函数处理消息<BR>
  ·在消息发送的目的窗口重载函数WndProc,它是专门处理各种传递到本窗口内的消息的函数。<BR>
  ·在函数WndProc中处理消息:<BR>
      LRESULT CMyWindow::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) <BR>
      {<BR>
        if(message == WM_WZD_MESSAGE) { ... }<BR>
        return CMDIChildWnd::WindowProc(message, wParam, lParam);<BR>
      }<BR><BR>
4、使用ON_MESSAGE()接收新窗口消息<BR>
  (1)在类的.h文件中添加消息处理函数的声明:<BR>
      protected:<BR>
        //{{AFX_MSG(CTttView)<BR>
        //}}AFX_MSG<BR>
        afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);<BR>
        DECLARE_MESSAGE_MAP()<BR>
  (2)在用户类的.cpp文件中的消息映像区中加入消息映射宏:<BR>
      BEGIN_MESSAGE_MAP(CTttView, CView)<BR>
        //{{AFX_MSG_MAP(CTttView)<BR>
        //}}AFX_MSG_MAP<BR>
        ON_MESSAGE(WM_WZD_MESSAGE,OnMyMessage)<BR>
      END_MESSAGE_MAP()<BR>
  (3)最后,在文件中添加消息处理函数的具体实现:<BR>
      LRESULT CMainFrame::OnWzdMessage(WPARAM wParam, LPARAM lParam)<BR>
      {<BR>
        ...<BR>
        return 0;<BR>
      }<BR>
    传送的wParam和lParam的值的含义由你自己决定,函数返回什么值也由你自己决定。<BR><BR>
5、创建新的消息映像宏<BR>
  (1)用如下方式为新消息定义一个新的消息映像宏,理想情况下,其定义在一个包含文件中,以便可被应用程序的所有文件共享。<BR>
      #define ON_WZD_MESSAGE() {WM_WZD_MESSAGE,0,0,0,AfxSig_vW,(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(CWnd *))&OnMyMessage},<BR>
    注意末尾有一个逗号。<BR>
    另外,AfxSig_vW的值告诉MFC,新消息带一个指向CWnd类的指针,且返回值是Void类型,再把wParam和lParam参数转换为调用参数。<BR>
    AfxSig_vW的其他可用值,请参阅MFC子目录下AFXMSG_.H文件。<BR>
    改变AfxSig_vW的值意味着改变这个宏定义的函数的调用参数。<BR>
  (2)在类的.h文件中添加消息处理函数的声明:<BR>
      protected:<BR>
        //{{AFX_MSG(CTttView)<BR>
        //}}AFX_MSG<BR>
        afx_msg void OnMyMessage(CWnd *pWnd);<BR>
        DECLARE_MESSAGE_MAP()<BR>
  (3)在用户类的.cpp文件中的消息映像区中加入消息映射宏:<BR>
      BEGIN_MESSAGE_MAP(CTttView, CView)<BR>
        //{{AFX_MSG_MAP(CTttView)<BR>
        //}}AFX_MSG_MAP<BR>
        ON_WZD_MESSAGE()<BR>
      END_MESSAGE_MAP()<BR>
  (4)最后,在文件中添加消息处理函数的具体实现:<BR>
      void CMainFrame::OnMyMessage(CWnd *pWnd)<BR>
      {<BR>
	      ((CTttView*)pWnd)->DoSomeWork();<BR>
      }<BR>
    注意,这里传递的参数不是通常的wParam和lParam,而是更友好的CWnd指针。<BR>
  (5)另外,发送消息的时候要使用:<BR>
      AfxGetMainWnd()->SendMessage(WM_WZD_MESSAGE,(int)m_hWnd);<BR>
<p></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -