VB與VC混合程式設計中處理訊息的方法 (轉)

worldblog發表於2007-12-04
VB與VC混合程式設計中處理訊息的方法 (轉)[@more@]

VB與VC混合中處理訊息的方法

  現在越來越多的人採用VB與VC的混合程式設計:用VB開發出漂亮的介面以及外圍處理,再用VC編寫底層的各種操作,例如的操作、IO埠的操作等,VC中還可以嵌入語言進行更底層的操作。
  一般的做法是將VC程式編譯成DLL,在VB中用Declare語句宣告DLL中的,例如:
  Declare Function SendCommand Lib ″c:program filesdevstudiowjfprojectsHr0506dllMnsrdeHr0506dllMnsr.dll″(CmdNum As Integer) As Boolean
  宣告以後,函式SendCommand 就可以當作VB自己的函式使用了。
  但是,怎樣將VC中的各種訊息(例如各種底層的狀態)及時通知VB並且VB能夠及時處理呢?這是VB的一個缺陷:不能方便地處理自定義的訊息。例如在VC中自定義了兩條訊息:MW_T_DATACOME,MW_TAPI_BUSY,在C語言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);語句可以很方便地將MW_TAPI_CONNECTED訊息傳遞給窗體(窗體控制程式碼為hWnd),在主回撥函式中就可以處理了。但是要把這條訊息傳遞給VB,並讓VB處理這條訊息,並不太容易。雖然在VB5.0以上的版本中,可以定義自己的事件(EVENT),但比較麻煩。這裡介紹一種簡單的方法,讓VB巧妙地處理自定義的訊息:
  1.首先將VB窗體中TextBoxText1的控制程式碼傳遞給DLL(注意:VB中的TextBox控制元件有hWnd屬性)。
  VB中: ′宣告DLL中的函式
  Declare Function SendhWnd Lib ″c:program filesdevstudiowjfprojectsHr0506dllMnsrdebug 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()
   case Text1.text
  case W_TAPI_DATACOME:
  ′訊息處理語句
  case MW_TAPI_BUSY:
  ′訊息處理語句
  default:
  ′其他處理語句
  End Select
  End Sub
  以上方法在作者編寫的“TAPI”中使用,效果很好。
(北京 吳俊峰)

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987987/,如需轉載,請註明出處,否則將追究法律責任。

相關文章