VB界面,VC核心

前端之家收集整理的这篇文章主要介绍了VB界面,VC核心前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原帖地址:http://topic.csdn.net/t/20020613/22/801995.html

以下的这篇文章,其实已在CSDN出现过,现将它重提,希望对苦于界面或VB & VC混合编程中遇到的问题有帮助。


VB与VC混合编程中处理消息的方法

  现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作、IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作。
  一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如:
  Declare Function SendCommand Lib ″c:/program files/devstudio/wjfprojects/Hr0506dllMnsr/debug/Hr0506dllMnsr.dll″(CmdNum As Integer) As Boolean
  声明以后,函数SendCommand 就可以当作VB自己的函数使用了。
  但是,怎样将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巧妙地处理自定义的消息:
  1.首先将VB窗体中TextBox控件Text1的句柄传递给DLL(注意:VB中的TextBox控件有hWnd属性)。
  VB中: ′声明DLL中的函数
  Declare Function SendhWnd Lib ″c:/program files/devstudio/wjfprojects/Hr0506dllMnsr/debug/ Hr0506dllMnsr.dll″ ((ByVal hWnd As Long) As Boolean
  ′传递text1的句柄
  SendhWnd(text1.hWnd)
  VC中://句柄接收函数
   declspec(dllexport) BOOL GethWnd(HWND hWnd1)
  { hWnd=hWnd1;
  if (hWnd==NULL)
  { return FALSE; }
  return TRUE;}
  2.在VC中用API函数SetWindowText取代PostMessage直接发送消息给VB中的Text1控件:
  SetWindowText(hWnd,″ MW_TAPI_DATACOME ″);
  3.在Text1_Change事件中处理消息:
  Private Sub Text1_Change()
  Select case Text1.text
  case W_TAPI_DATACOME:
  ′消息处理语句
  case MW_TAPI_BUSY:
  ′消息处理语句
  default:
  ′其他处理语句
  End Select
  End Sub
  以上方法在作者编写的“TAPI远程监控系统”中使用,效果很好。
(北京 吴俊峰)

6 楼 zdhe(zdhe) 回复于 2002-06-13 23:41:16 得分 10

implement VC com interface is better. then VB can freely use VC built control.

this method is OK. but not good enough.

but,get HWND and transfer to Vc,in VC use SetWindowLong to change winproc,then you can do every thing in VC freely...

原帖地址:http://topic.csdn.net/t/20010505/00/112369.html

19 楼 arbiter(同济流氓) 回复于 2001-05-06 18:47:00 得分 15

给你实质一点回答,慢慢推敲其中的奥妙,好过楼上几位的空谈吧。哈哈…… VB与VC的混合编程 VC部分: VC的Projects中创建Win32 Dynamic-link Library(dll) 创建add.cpp文件添加以下代码: double __stdcall add(double,double); double multiplication(double,double); double __stdcall add(double i,double j) { i=multiplication(i,j); return (i+j); } double multiplication(double i,double j) { return i*j; } 创建add.def文件添加以下代码(用于找到程序入口点为add函数): EXPORTS add @1 编译上述cpp文件生成add.dll VB部分: 添加模块Module1添加以下代码(用于声明调用add.dll): Public Declare Function add Lib "add" (ByVal i As Double,ByVal j As Double) As Double VB窗口上添加text1 text2 text3 command1三个控件 代码窗口添加以下代码: Private Sub Command1_Click() Dim a As Double,b As Double,c As Double a = Text1: b = Text2 c = add(a,b) Text3 = c End Sub 连接: 将VC生成的add.dll复制到VB所在目录下(或者system目录下)(dll文件是隐藏需要显示)

猜你在找的VB相关文章