📄 05o029.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>
<body>
<div align="justify">
<table border="0" width="100%" class="font" height="57">
<tr>
<td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">VC知识库(五)</font>
</td>
<td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
<font color="#800080">www.vckbase.com</font>
</td>
</tr>
<tr>
<td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
<B>VB与VC混合编程中处理消息的方法</B>
</td>
</tr>
<tr>
<td width="100%" height="17" class="info" align="center" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="22" class="font" colspan="2">
<hr>
</td>
</tr>
<tr>
<td width="100%" height="5" class="font" colspan="2">
现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作、IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作。
<BR> 一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如: <BR> Declare
Function SendCommand Lib ″c:\program
files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.dll″(CmdNum
As Integer) As Boolean <BR> 声明以后,函数SendCommand 就可以当作VB自己的函数使用了。
<BR> 但是,怎样将VC中的各种消息(例如各种底层的状态)及时通知VB并且VB能够及时处理呢?这是VB的一个缺陷:不能方便地处理自定义的Windows消息。例如在VC中自定义了两条消息:MW_TAPI_DATACOME,MW_TAPI_BUSY,在C语言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);语句可以很方便地将MW_TAPI_CONNECTED消息传递给窗体(窗体句柄为hWnd),在主回调函数中就可以处理了。但是要把这条消息传递给VB,并让VB处理这条消息,并不太容易。虽然在VB5.0以上的版本中,可以定义自己的事件(EVENT),但比较麻烦。这里介绍一种简单的方法,让VB巧妙地处理自定义的消息:
<BR><BR> 1.首先将VB窗体中TextBox控件Text1的句柄传递给DLL(注意:VB中的TextBox控件有hWnd属性)。
<BR> VB中: ′声明DLL中的函数 <BR> Declare Function SendhWnd Lib
″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\
Hr0506dllMnsr.dll″ ((ByVal hWnd As Long) As Boolean
<BR> ′传递text1的句柄 <BR> SendhWnd(text1.hWnd) <BR> VC中://句柄接收函数
<BR> declspec(dllexport) BOOL GethWnd(HWND hWnd1) <BR> {
hWnd=hWnd1; <BR> if (hWnd==NULL) <BR> { return FALSE; }
<BR> return TRUE;}
<BR> 2.在VC中用API函数SetWindowText取代PostMessage直接发送消息给VB中的Text1控件:
<BR> SetWindowText(hWnd,″ MW_TAPI_DATACOME ″);
<BR> 3.在Text1_Change事件中处理消息: <BR> Private Sub Text1_Change()
<BR> Select case Text1.text <BR> case W_TAPI_DATACOME:
<BR> ′消息处理语句 <BR> case MW_TAPI_BUSY: <BR> ′消息处理语句 <BR> default:
<BR> ′其他处理语句 <BR> End Select <BR> End Sub
<BR> 以上方法在作者编写的“TAPI远程监控系统”中使用,效果很好。
</td>
</tr>
<tr>
<td width="100%" height="12" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="6" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="8" class="font" colspan="2">
</td>
</tr>
<tr>
<td width="100%" height="17" class="font" colspan="2"></td>
</tr>
</table>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -