WPF與Win32互操作

2022-01-15 08:08:11 字數 1485 閱讀 6264

一、wpf如何使用hwnd

當您建立wpf window時,wpf會建立頂級hwnd,並使用hwndsource將window及其wpf內容放入hwnd中。應用程式中其餘的wpf內容共享此單個hwnd。不過,選單、組合框下拉列表和其他彈出視窗例外。 這些元素建立它們自己的頂級視窗,這正是 wpf 選單能跳出包含它的視窗 hwnd 之外的原因。

二、hwndsource類

乙個hwndsource實現win32視窗可以包含wpf內容。在視窗中的wpf內容是可安排的,可測量的,和可渲染的;是可互動式輸入的。因為hwndsource是專被設計來與win32進行互動的,這個類展示了底層的win32的特點。您可以使用這個類執行以下操作:

hwndsource類被設計來用於處理一般的互操作,並不是被設計成乙個包裝管理hwnd的角色。一般來說,它不提供用於管理視窗或檢查屬性狀態的託管方法。相反,該hwndsource類可以通過handle屬性訪問win32視窗控制代碼(hwnd),可以通過pinvoke win32 api技術操作視窗。

1 建立

hwndsource只能在構造時被指定。建立乙個hwndsource,首先要建立乙個hwndsourceparameters結構並用所需的引數填充它。這些引數包括以下內容:

2 物件生存週期

hwndsource是正規的公共語言執行庫(clr)物件,其生命週期是由垃圾收集器管理。因為hwndsource代表非託管資源,所以hwndsource實現idisposable介面。如果從所有者執行緒呼叫,同步呼叫處理立即破壞win32視窗。如果從另乙個執行緒呼叫,win32視窗將非同步銷毀。在互操作的**中顯式呼叫dispose可能對某些互操作場景是必要的。

3 視窗處理函式

hwndsource類實現了它自己的視窗處理函式。此視窗處理函式用於處理重要的視窗訊息,如與布局、呈現和輸入相關的訊息。不過,您也可以在鉤子上新增自己的處理函式。你可以在構造時,通過設定hwndsourceparameters.hwndsourcehook屬性,在鉤子中指定自己的處理函式,或者你也可以使用addhook和removehook在視窗建立之後新增和刪除鉤子中的處理函式。

三、hwndsource類

該例子中在鉤子中擴充套件處理函式。

//

在window類中

protected overried void

onsourceinitialized(eventargs e)

private intptr wndproc(intptr hwnd, int msg, intptr wideparam, intptr longparam, ref

bool

handled)

return

intptr.zero;

}

win32 控制項操作

int getwindowtext hwnd hwnd,lptstr lpstring,int nmaxcount boolsetwindowtext hwndhwnd,lpctstrlpstring 問題 如下,vc6 問題描述請看注釋.char sztext 256 wparam wparam ...

捕捉Win32視窗操作

createprocesssuspend.cpp 定義控制台應用程式的入口點。在桌面開啟記事本,然後通過spy 來檢視視窗的類和標題,或者控制代碼 不推薦直接使用控制代碼,因為會程式關閉後會改變 include stdafx.h include pragma comment linker,subsy...

Win32學習筆記 文字與文字操作

文字與文字操作 1.hdc hdc hdc beginpaint hwnd,lppaintstruct 2.定義字型控制代碼變數 hfont hf 3.獲得系統字型控制代碼 hf getstockobject nfontstyle 獲取系統的字型 建立自定義字型 hfont createfont i...