python postmessage_句柄做线程参数和PostMessage函数的用法

在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。

而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。

// -------------------------------------------

不知道,你还记得那个线程函数吗?下面是定义

UINT DeviceOnLine(LPVOID pParam)

{

HWND hHwnd = (HWND)pParam; //转化参数

...

CString str;

str.Format("test");

::PostMessage(hHwnd, WM_MY_MESSAGE, (WPARAM)str, NULL); //向hHwnd句柄PostMessage

//要是static类型的,记住static函数的使用方法:一个版本,仅仅与类对话,没有this指针。

...

}

如果要使用PostMessage很多次,我们可以象下面这样独立出一个函数(由于我们是在static的线程函数里面使用,所以声明的也是static):

static int AddMessage(HWND hWnd, CString str)

{

if(str.GetLength() <= 0)

return 0;

char *newMess = new char[str.GetLength() + 1];

strcpy(newMess,str);

::PostMessage(hWnd,WM_MY_MESSAGE,(WPARAM)newMess,0);

return 0;

}

现在,我们已经把我们需要的消息发了出去,那我们就还要处理它,不然我们还发它们干吗呢,呵呵(废话,快点说吧)!

首先:在类中声明处理函数,比如afx_msg LRESULT AddMessageEx(WPARAM wPapam, LPAPAM lPapam);

其次:在Message Map中加入映射,比如:

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)

ON_MESSAGE(WM_MY_MESSAGE, AddMessageEx)

END_MESSAGE_MAP

最后,实现处理函数:

LRESULT CTestDlg::AddMessageEx(WPARAM wParam, LPARAM lParam)

{

char* newMsg = (char*)wParam;

if(newMsg == NULL)

return -1;

... //这里就可以使用我们接收的消息啦,哈哈!目的完成。

delete newMsg;

return 0;

}

对了,还有一个比不可少的,就是在stdafx.h文件中加入,自己定义的消息

#define WM_MY_MESSAGE (WM_USER+123)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值