当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>Visual C++教程

Visual C++程序的建立~~5

    4、自定义消息

    用户可以自定义消息,在应用程序中主动发出,这种消息一般用于应用程序的某一部分内部处理。

    例10:当用户单击光标上移键时,程序发送用户自定义消息,在对应的消息响应函数中弹出消息对话框,显示消息发送成功。

    (1)建一个单文档应用程序:名为:自定义消息处理

    (2)定义用户消息的ID(标识符)

    在视图类的头文件CMyView.h中的前面写如下语句,定义用户消息的标识符:

 #endif // _MSC_VER > 1000
 #define WM_PAAINT  120     //定义消息的ID标识符,这里用大于100的120表示
 class CMyView : public CView
 {  protected: // create from serialization only
  CMyView();
           ……
      }

    (3)声明并自定义用户消息响应函数:在视图类中添加void OnMyFunction()函数。

    ClassView右键对准CMyView单击Add Member Function类型写:void,函数名写:OnMyFunction(),将消息响应函数加到CMyView.cpp中。并加代码:

 void CMyView::OnMyFunction()
 {
 MessageBox(”恭喜你,消息发送成功”);
 }
    (4)在视图类的实现文件CMyView.cpp中添加消息映射
 BEGIN_MESSAGE_MAP(CMyView, CView)
 //{{AFX_MSG_MAP(CMyView)
       …………………………….
 //}}AFX_MSG_MAP
 ON_MESSAGE(WM_PAAINT,OnMyFunction)

    (5)编写程序代码

    添加WM_KEYDOWN消息响应函数,用户按下光标上移键时,将产生WM_KEYDOWN消息。故加此消息响应函数。

 ViewClassWizardClass name:CMyViewObject IDs:CMyViewMessages: WM_KEYDOWN
Add FunctionEdit Code到View.cpp的OnKeyDown()函数中加代码:
void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 HWND hWnd = GetSafeHwnd(); //接收消息的窗口句柄
 if(nChar==VK_UP)           //光标上移键
 { ::PostMessage(hWnd,WM_PAAINT,0,0);// 将消息插入消息队列并返回。
        return;
 }
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

    (6)编译运行,按下光标上移键,程序发送自定义消息,显示一小对话框,结果见图1.4.10所示。



    说  明:

    1、OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)当键盘上某个按键被按下时发送此消息

    参  数:

    nChar为所按的键的字符代码值,这里是VK_UP(光标上移键的虚拟键)

    nRepCnt为重复击键的次数nFlags表示扫描码和键转换前后的状态

    2、用户消息的发送

    ::PostMessage()函数:Windows提供的发送消息的函数,PostMessage()的功能是将消息插入消息队列并返回,由处理线程处理,而队列中的消息通过GetMessage()或PeekMessage()函数获取。

    PostMessage()函数的原型为:

    BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,WPARAM IParam)

    参  数:

    HWND hWnd     接收消息的窗口句柄

    UINT Msg        消息的ID标识符

    WPARAM wParam 消息的WPARAM参数

    WPARAM IParam  消息的LPARAM参数

    WPARAM wParam,WPARAM IParam都是消息的附加参数,比如你要响应键盘按下的消息就得用WM_CHAR消息,但是你并不知道按下的是那个键,这2个参数就指定你按键的ASCII码,来确定你按下的是哪个键。它俩都是4个字节长,一般都用LPARAM传指针,两者没区别;你想怎么用就怎么用。wParam的低4位数也表示消息的ID值,比如某菜单用符号表建的ID符为:ID_NEW_MENUITEM,值为101,则可用if(LOWORD(wParam)==ID_NEW_MENUITEM)来判别。

    例中见到了HWND和UINT,它们是Windows常用的句柄类型和常用的基本数据类型。表1.4列出了一些Windows编程中常用的基本数据类型。表1.5列出了Windows常用的句柄类型。

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接