| 
					阅读:1669回复:17
				 VXD用SHELL_PostMessage,app怎么办呢?
					在VXD中断处理程序中用SHELl_PostMessage向app发送一个自定义消息,那么app的相关处理程序应该如何编写呢?
 请高手指点: SHELL_PostMessage(hWnd,WM_My_MESSAGE,0,0,NULL,NULL); | |
| 
 | 
| 沙发#发布于:2002-08-13 13:22 
					app是mfc的?				 | |
| 板凳#发布于:2002-08-13 13:27 app是mfc的? 是的 | |
| 
 | 
| 地板#发布于: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(); 实际也就是加个消息响应函数。 | |
| 地下室#发布于:2002-08-13 13:52 可以在mainframe的BEGIN_MESSAGE_MAP的下面,加消息。 是这样加么? 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() | |
| 
 | 
| 5楼#发布于:2002-08-13 14:11 
					不行啊,请详细一些吧,谢谢了.				 | |
| 
 | 
| 6楼#发布于:2002-08-13 15:45 
					ft
 在前面用#define... ,然后再加ON_MY_MESSAGE | |
| 7楼#发布于:2002-08-14 09:48 ft 请详细一些吧,我会给你分的、 | |
| 
 | 
| 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 | |
| 9楼#发布于:2002-08-14 09:58 
					好的,谢谢,我马上试试				 | |
| 
 | 
| 10楼#发布于:2002-08-14 10:03 
					出错:
 WM_MY_MESSAGE没有定义 | |
| 
 | 
| 11楼#发布于:2002-08-14 10:09 
					当然要先定义呀。
 比如 #define WM_MY_MESSAGE WM_USER + 100 VxD也要有这个东东。 | |
| 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 }, 是用{}呢?还有末尾有个逗号,我去掉逗号就会出错? | |
| 
 | 
| 13楼#发布于:2002-08-14 10:26 
					呵呵,你去看看那个BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏是怎么定义的。				 | |
| 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; | |
| 
 | 
| 15楼#发布于:2002-08-14 11:11 
					HWND inBuf;
 inBuf=Main_CWnd->GetSafeHWnd(); HANDLE hWnd; hWnd=(HANDLE)pDIOCParams->dioc_InBuf; 用不着再转来转去了吧。 | |
| 16楼#发布于:2002-08-14 11:34 
					这样不行的,inbuf必须是传递地址好像。
 | |
| 
 | 
| 17楼#发布于:2002-08-14 11:37 实际呢,我也没有这样亲自做过的,没有自己的消息呀。 :D 我已经给你分了,谢谢你的帮助。 | |
| 
 | 
 
							
 
				 
				