jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1517回复:17

VXD用SHELL_PostMessage,app怎么办呢?

楼主#
更多 发布于:2002-08-13 12:36
在VXD中断处理程序中用SHELl_PostMessage向app发送一个自定义消息,那么app的相关处理程序应该如何编写呢?
请高手指点:
SHELL_PostMessage(hWnd,WM_My_MESSAGE,0,0,NULL,NULL);
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-08-13 13:22
app是mfc的?
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-13 13:27
app是mfc的?


是的
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-08-13 13:43
可以在mainframe的BEGIN_MESSAGE_MAP的下面,加消息。
下面是WM_CREATE的例子。
比如,先
#define ON_WM_MY_MSG() \\
{ WM_My_MESSAGE, 0, 0, 0, AfxSig_is, \\
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&MyMessage },
把他加到BEGIN_MESSAGE_MAP。别忘了在h文件还要声明。
afx_msg void MyMessgae();
实际也就是加个消息响应函数。
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-13 13:52
可以在mainframe的BEGIN_MESSAGE_MAP的下面,加消息。
下面是WM_CREATE的例子。
比如,先
#define ON_WM_MY_MSG() \\
{ WM_My_MESSAGE, 0, 0, 0, AfxSig_is, \\
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&MyMessage },
把他加到BEGIN_MESSAGE_MAP。别忘了在h文件还要声明。
afx_msg void MyMessgae();
实际也就是加个消息响应函数。


是这样加么?
BEGIN_MESSAGE_MAP(CSC200TESTDlg, CDialog)
//{{AFX_MSG_MAP(CSC200TESTDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
#define ON_WM_MY_MSG() \\
{ WM_My_MESSAGE, 0, 0, 0, AfxSig_is, \\
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&OnSC200Message }
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
好好学习 天天向上
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-13 14:11
不行啊,请详细一些吧,谢谢了.
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-08-13 15:45
ft
在前面用#define...
,然后再加ON_MY_MESSAGE
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-14 09:48
ft
在前面用#define...
,然后再加ON_MY_MESSAGE


请详细一些吧,我会给你分的、
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-08-14 09:54
实际呢,我也没有这样亲自做过的,没有自己的消息呀。 :D
理论上。

#define ON_WM_MY_MSG() \\
{ WM_My_MESSAGE, 0, 0, 0, AfxSig_is, \\
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&OnMyMsg },

然后在message map,加个
ON_WM_MY_MSG()

在h文件,加
afx_msg void OnMyMsg();    //声明

在cpp文件,加
void CMainFrame::OnMyMsg()
{
  //it\'s my message
}

成功了告诉我。 :D
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-14 09:58
好的,谢谢,我马上试试
好好学习 天天向上
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-14 10:03
出错:
WM_MY_MESSAGE没有定义
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2002-08-14 10:09
当然要先定义呀。
比如

#define WM_MY_MESSAGE     WM_USER + 100

VxD也要有这个东东。
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-14 10:17
编译成功了,可我还是有点疑问,为什么你写的那个
#define ON_WM_MY_MSG() \\
{ WM_My_MESSAGE, 0, 0, 0, AfxSig_is, \\
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&OnMyMsg },

是用{}呢?还有末尾有个逗号,我去掉逗号就会出错?
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2002-08-14 10:26
呵呵,你去看看那个BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏是怎么定义的。
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-08-14 10:50
编译都通过了,可运行还是没有执行我的cpp中断服务程序。
我想会不会是我的deviceiocontrol传递窗口句柄有问题。
在cpp中:
CWnd* Main_CWnd;
Main_CWnd=AfxGetMainWnd();
PVOID inBuf;
inBuf=Main_CWnd->m_hWnd;
DeviceIoControl(hDevice,W32IF_PASS_EVENT,inBuf,sizeof(PVOID),NULL,0,NULL,NULL);

在VXD中
先定义了:
DWORD* PostMsghWnd; //Ring3层应用程序的hWnd
HANDLE hWnd;
然后:
case W32IF_PASS_EVENT:
PostMsghWnd=(DWORD*)pDIOCParams->dioc_InBuf;
hWnd=(HANDLE)*PostMsghWnd; //获得主窗口句柄
status=0;
break;
好好学习 天天向上
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2002-08-14 11:11
HWND inBuf;
inBuf=Main_CWnd->GetSafeHWnd();

HANDLE hWnd;
hWnd=(HANDLE)pDIOCParams->dioc_InBuf;

用不着再转来转去了吧。
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-08-14 11:34
这样不行的,inbuf必须是传递地址好像。
好好学习 天天向上
jping
驱动牛犊
驱动牛犊
  • 注册日期2001-11-21
  • 最后登录2002-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-08-14 11:37
实际呢,我也没有这样亲自做过的,没有自己的消息呀。 :D
理论上。

#define ON_WM_MY_MSG() \\
{ WM_My_MESSAGE, 0, 0, 0, AfxSig_is, \\
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))&OnMyMsg },

然后在message map,加个
ON_WM_MY_MSG()

在h文件,加
afx_msg void OnMyMsg();    //声明

在cpp文件,加
void CMainFrame::OnMyMsg()
{
  //it\'s my message
}

成功了告诉我。 :D


我已经给你分了,谢谢你的帮助。
好好学习 天天向上
游客

返回顶部