VB與VC混合程式設計中處理訊息的方法 (轉)
VB與VC混合程式設計中處理訊息的方法 (轉)[@more@]
一般的做法是將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”中使用,效果很好。
(北京 吳俊峰)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#的訊息處理方法 (轉)C#
- 深度解析VC中的訊息(中) (轉)
- VCL中訊息處理初探 (轉)
- 深度解析VC中的訊息(上) (轉)
- 轉向C#,從細微處開始 -- 寫給VB、VC程式設計師 (轉)C#C程式程式設計師
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- MFC應用程式中處理訊息的順序
- C與指令碼的混合程式設計 (轉)指令碼程式設計
- 關於VC中的DLL的程式設計 (轉)程式設計
- 用VB寫高效的影像處理程式 (轉)
- VC增加自定義訊息 (轉)
- Excel 的VB程式設計 (轉)Excel程式設計
- VC++訊息對映的思考 (轉)C++
- 處理鍵盤輸入訊息(轉)
- VB程式設計中的一些經驗 (轉)程式設計
- C++ BUILDER 訊息處理的深入探索 (轉)C++UI
- Linux核心模組程式設計--中斷處理程式(轉)Linux程式設計
- Looper中的訊息佇列處理機制OOP佇列
- 三、訊息的可靠處理
- VC++中程式與多程式管理的方法(轉)C++
- Windows應用程式的訊息處理機制Windows
- 使用Windows訊息控制Winamp(VB) (轉)Windows
- VB.NET中的物件導向程式設計特徵 (轉)物件程式設計特徵
- 關於VC++中,兩種自定義訊息的傳送與接收的方法實現進行說明。 (轉)C++
- VB的API程式設計精粹(1) (轉)API程式設計
- VB的API程式設計精粹(二) (轉)API程式設計
- IOS 訊息推送處理iOS
- 在VB中用Paintpicture方法進行圖形處理 (轉)AI
- Android中的非同步訊息處理機制Android非同步
- 3-Windows程式設計 -視窗與訊息Windows程式設計
- 在VC++ 6.0下利用訊息實現內部程式通訊 (轉)C++
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- Service初探與非同步訊息處理機制非同步
- MFC動態建立控制元件的訊息處理 (轉)控制元件
- Linux系統程式設計之訊號中斷處理(下)Linux程式設計
- Linux系統程式設計之訊號中斷處理(上)Linux程式設計
- VB程式設計師眼中的C# (轉)程式設計師C#
- VB程式設計的一些心得 (轉)程式設計