1. 程式人生 > >CWnd與HWND的區別與聯絡(相互轉換)完全解析

CWnd與HWND的區別與聯絡(相互轉換)完全解析

區別

           首先,從這兩個單詞的第一個字母即可知道兩者之間的差別。熟悉MFC的人都知道在MFC中,類基本上都是以C開頭的,這是一種規則約定,目的就是讓人一看就知道它是一個類!

          因此,CWnd第一個字母C指的是class的意思,即CWnd是一個類;HWND第一個字母H指的是handle的意思,即HWND是一個控制代碼

CWnd:是MFC類庫中所有視窗類的基類。MFC將所有視窗的通用操作都封裝到CWnd類中,如MoveWindow、ShowWindow;同時,它也封裝了視窗控制代碼,即m_hWnd成員。

HWND:即Windows視窗控制代碼,是Windows系統中對所有視窗的一種唯一標識

聰明的讀者可以發現,CWnd其實就是MFC中的一個類名;而HWND是Windows中窗體控制代碼的型別,一個類似於指標地址的數字型物件。

聯絡(相互轉換)

1、由HWND得到CWnd:

 方法一:通過CWnd的Attach()函式來獲取

	CWnd wnd;
	HWND hWnd;
	wnd.Attach(hWnd);
            CWnd的Attach()函式的作用基本上就是包一個控制代碼附加到一個MFC的物件上,即將CWnd物件的HWND成員指向這個視窗控制代碼hWnd。

方法二:HWND可以通過CWnd的靜態函式:CWnd::FromHandle()或CWnd::FromHandlePermanent(),由控制代碼例項化一個CWnd物件出來。

如果用FromHandle(),返回值是一個臨時CWnd物件,並且我們確保返回值為非空,也就是hWnd是有效的。(函式宣告如下:)

static CWnd*   CWnd::FromHandle(HWND   hWnd) ;
如果用FromHandlePermanent(),返回值是一個永久物件,只有在返回的CWnd在類表裡已經存在,則返回值為非空。(函式宣告如下:)
static CWnd*   CWnd::FromHandlePermanent(HWND   hWnd)  ;

2、由CWnd獲取HWnd:

         方法一:從CWnd獲取HWnd就容易多了,因為它的一個成員變數m_hWnd

就是所對應視窗的控制代碼。

            wnd->m_hWnd

        方法二:也可以通過成員函式CWnd::GetSafeHwnd()來獲得該視窗物件的HWND視窗控制代碼。

相關推薦

CWndHWND區別聯絡相互轉換完全解析

區別            首先,從這兩個單詞的第一個字母即可知道兩者之間的差別。熟悉MFC的人都知道在MFC中,類基本上都是以C開頭的,這是一種規則約定,目的就是讓人一看就知道它是一個類!           因此,CWnd第一個字母C指的是class的意思,即CWnd是

C和C++的區別聯絡擴充套件知識

2017/3/17 複習整理:C/C++區別與聯絡; 關於C和C++的區別是面試中經常會被問到的問題,本著即將面試的心態,進行知識整理,並對小知識點進行擴充套件; C/C++的聯絡: C++是C的超集,相容大部分C的語法的結構; 聯絡嘛我只能想

Android 屬性動畫Property Animation 完全解析 【轉】

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/38067475 1、概述 Android提供了幾種動畫型別:View Animation 、Drawable Animation 、Property Anima

Android 屬性動畫Property Animation 完全解析

目錄(?)[+] 1、概述 Android提供了幾種動畫型別:View Animation 、Drawable Animation 、Property Animation 。View Animation相當簡單,不過只能支援簡單的縮放、平移、旋轉、透明度基本的動畫,

Codematic2動軟.Net程式碼生成器CodeSmith區別聯絡

Codematic2(動軟.Net程式碼生成器)與CodeSmith一開始是用CodeMatic2來生成Model與DAL的,後來使用CodeSmith。現在來比較下這二者的區別與聯絡, 區別: 1 在靈活性方面:CodeSmith更靈活,提供了自定義模板功能。可以按照自定

系統呼叫庫函式的區別聯絡API

在寫程式的過程中,像MFC,VC++這些程式設計,都會涉及到函式的呼叫,有庫函式也有系統函式,下面看一看它們的區別!! 系統呼叫(system call)和庫函式呼叫(Library function call)的區別? 理解庫函式的區別和系統呼叫,首先是kernel m

Constructor object 區別聯絡

1. Constructor:是用於建立和初始化類中建立的一個物件的一種特殊方法。 constructor([arguments])  { ... } 在一個類中只能有一個名為 “constructor” 的特殊方法。 一個類中出現多次建構函式 (constructor)方法將會丟擲一個 Sy

2.6 使用for迴圈遍歷檔案 2.7 使用while迴圈遍歷檔案 2.8 統計系統剩餘的記憶體 2.9 資料型別轉換計算計算mac地址 3.0 資料型別轉換列表字典相互轉換

2.6 使用for迴圈遍歷檔案 open r:以只讀方式開啟 w: 以寫方式開啟 a: 以追加模式開啟 r+: 以讀寫模式開啟 w+: 以讀寫模式開啟(參見w) a+: 以讀寫模式開啟(參見a) rb: 以二進位制模式開啟 read 我們先寫一個檔案,叫1.txt 內容如下 111 22

HttpURLConnectionHttpClient 區別聯絡

httpclient其實在網路程式設計中,基於java的實現,幾乎都包裝了socket的通訊,然後模擬各總各樣的協議,httpclient其實是模擬瀏覽器發起像伺服器的請求 http://blog.csdn.net/zhliro/article/details

Linux軟體安裝中RPMYUM 區別聯絡

1 Linux軟體安裝概述 安裝程式的方式: 通用二進位制格式:直接解壓壓縮檔案,就可以使用。但一定要注意安裝平臺。 軟體包管理器:如RPM。 軟體包管理器的前端工具:如YUM。 原始碼編譯。   1.1 軟體包概述 軟體包的組成部分:

java 標準輸出標準錯誤 out err 區別 用法 聯絡 java中的outerr區別 System.out和System.err的區別 System.out.println和System.err.println的區別 Java重定向S

/** * The "standard" output stream. This stream is already * open and ready to accept output data. Typically this stream * corresponds

StringBuffer StringBuilder 區別聯絡及原始碼分析

StringBuffer和StringBuilder的共同點: 1、都是用於操作字串,使用這兩個而不使用String的原因是因為String是Final型別,當對字串操作較多時採用StringBuffer或者StringBuilder。 St

C++中char型別string區別聯絡

C++中內建了一些基本型別,包含算數型別和空型別。 算數型別(arithmetic type)包含字元、整數型、布林型和浮點數。其中基本的字元型別是char型別,最小尺寸為8位位元組。 C++除了內建型別外,還有抽象資料型別庫,而string則是其中重要的一個標準庫型別。S

感知器、logisticsvm 區別聯絡

從感知器談起 對於典型的二分類問題,線性分類器的目的就是找一個超平面把正負兩類分開。對於這個超平面,我們可以用下面的式子來表示, ωTx+b=0 感知器是最簡單的一種線性分類器。用f(x)表示分類函式,感知器可以如下來表示。 f(x)=sign(ωTx+

JVMJREJDK區別聯絡

JVM:字面意思是java虛擬機器,它是用來載入並執行.class檔案的軟體JRE:字面意思是java執行時環境,它包含JVM和一些常用的類庫,類庫就是我們在編寫好java程式後所依賴的核心類和支援檔

shell指令碼----[][[ ]]的區別聯絡

注意 [ 和test 是 Shell 的內部命令,而[[是Shell的關鍵字。 且 shell 以0作為true返回 #!/bin/bash if [ 0 ];then     echo "0" fi   輸出 0 一、 [  ] 單雙括號 基本要素:   

SessionCookie區別聯絡

關於Cookie Cookie,也稱為HTTPcookie,Web cookie或瀏覽器cookie,是從網站傳送到伺服器並存儲在使用者的Web瀏覽器中的一小部分資料。Cookie用於向網站建立者傳送關於上次訪問網站時使用者以前的活動的資訊。會話是兩個通訊裝置(如使用者計算

iOS中conststatic區別聯絡

const就是隻讀的意思,只在宣告中使用; static一般有2個作用,規定作用域和儲存方式.對於區域性變數,static規定其為靜態儲存方式,每次呼叫的初始值為上一次呼叫的值,呼叫結束後儲存空間不釋放; 對於全域性變數,如果以檔案劃分作用域的話,此變數只在當前檔案可見;對

《Android源代碼設計模式解析實戰》讀書筆記二十

apt 通過 rip idv ber list adaptee 無法 技術分享 第二十章、適配器模式 適配器模式是結構型設計模式之中的一個,它在我們的開發中使用率極高,比方ListView、GridView以及RecyclerView都須要使用A

《Linux內核設計實現》讀書筆記十二- 內存管理

enable vmalloc 緩沖 turn lean png border 編譯 不一致 內核的內存使用不像用戶空間那樣隨意,內核的內存出現錯誤時也只有靠自己來解決(用戶空間的內存錯誤可以拋給內核來解決)。 所有內核的內存管理必須要簡潔而且高效。 主要內容: 內