vc中怎么使用SendMessage自定义消息函数

vc中怎么使用SendMessage自定义消息函数,第1张

首先肆游要自定义消息,比高纯如WM_STOP

#define WM_STOP  (WM_USER+1000)

要重载消息处理函数

比如在MFC里面,在头文件中申明函数如下:

virtual BOOL PreTranslateMessage(MSG* pMsg)

CPP中具体实现:

BOOL XXXX::PreTranslateMessage(MSG* pMsg)

{

    switch (pMsg->message)

  戚雹咐  {

    case WM_STOP:

        SetDlgItemText(IDC_UPDATE, TEXT("Update"))

        break

    default:

        break

    }

    return CDialog::PreTranslateMessage(pMsg)

}

3.现在可以在使用:

PostMessage(pdlg->m_hWnd, WM_STOP, NULL, NULL)

首先说怎么发送,然后说怎么接收:

自己定义一个消息,加上一个消息响应函数。然后用SendMessage把字符串的地此扒址发过去。

比如VC环境:

在stdafx.h中,

#define MY_MESSAGE USER+1

定义一个函数用来发送,可以是定时器,可以是按钮。

void send()

{

CString str

str = "12345"

::SendMessage(hWnd,MY_MESSAGE ,(WPARAM)&str)

}

你的类头文件.h中:

afx_msg void MyFunction(WPARAM wParam,LPARAM lParam)

在.cpp中

BEGIN_MESSAGE_MAP下面加衫扒袭入:

ON_MESSAGE(MY_MESSAGE ,MyFunction)

在后面加上你的函数体

void 你的类名::MyFunction(WPARAM wParam,LPARAM lParam)

{

//如果你发送的字符串的地址在WPARAM中,则用WPARAM来接收

CString* pStr = (CString*)wParam.

AfxMessageBox(*pStr)

}

你要注意的是:这只能适合SendMessage,如果你要使用PostMessage,就要把你发送的字符串设定为类的成员,或者全局的,不能是临时变量。因为SendMessage是要让消息响应函数执行完了才会返回,所以str是不会被系统释放的。PostMessage是直接返回,于是你传或兄了一个str的地址过去,但是消息响应函数执行的时候,str已经被删除了,这个时候的地址是一个不可知的内容,程序就会发生内存泄露,所以还是推荐你定义一个字符串专门用来发送。

VB声明

Declare Function SendMessage&Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)

说明

调用一个窗口的窗口函数,将一条消息发给那个友枝窗口。除非消息处理完毕,否则该函数不会返回。

SendMessageBynum, SendMessageByString是该函数运告森的“类型安全”声明形式

返回值

Long,由具旁亩体的消息决定

参数表

参数 类型及说明

hwnd Long,要接收消息的那个窗口的句柄

wMsg Long,消息的标识符

wParam Long,具体取决于消息

lParam Any,具体取决于消息


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12166001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存