getsafehwnd()和getsafehandle()的主要區別:
1.使用者不同:
(1)窗體使用:
getsafehwnd()用於獲取窗體的安全控制代碼(即hwnd),有了hwnd我們就可以方便的對hwnd指向的窗體進行所需的操作了;
(2)gdi物件使用:
getsafehandle(),用於獲取gdi物件的控制代碼。
注意:在使用指標時強烈建議這麼做:
// psomewnd 為乙個窗體的指標
if ( null != psomewnd && null != psomewnd->getsafehwnd())
// do something.
記憶體控制代碼與指標的區別:
(1).控制代碼其實就是指標,但是他和指標最大的不同是:給你乙個指標,你可以通過這個指標做任何事情,也許是好事,也許是通過這個指標破壞記憶體,幹一些搗亂的事情。這個我想大家都會碰到過,因為亂用指標可能會導致程式崩潰。
控制代碼就沒有這個缺點,通過控制代碼,你只能幹一些windows允許你幹的事情(例如呼叫一些api函式等等),沒有了指標的隨意。
(2).控制代碼是一些表的索引也就是指向指標的指標。 控制代碼和指標都是位址,控制代碼是windows程式設計的乙個關鍵性的概念,編寫windows應用程式總是要和各種控制代碼打交道。
所謂控制代碼,就是乙個唯一的數,用以標識許多不同的物件型別,如視窗、選單、記憶體、畫筆、畫刷等。在win32裡,控制代碼是指向乙個「無型別物件」(void)的指標,也就是乙個4位元組長的資料。
無論它的本質是什麼,控制代碼並不是乙個真正意義上的指標。
從構造上看,控制代碼是乙個指標,儘管它沒有指向用於儲存某個物件的記憶體位置。事實上,控制代碼指向乙個包含了對該物件進行引用的位置。
控制代碼的宣告是這樣的:
typedef void handle
由於windows是乙個多工作業系統,它可以同時執行多個程式或乙個程式的多個副本。這些執行的程式稱為乙個例項。為了對同一程式的多個副本進行管理,windows引入了例項控制代碼。windows為每個應用程式建立一張表,例項控制代碼就好象是這張表的乙個索引。
不同之處還在於:
1、控制代碼所指的可以是乙個很複雜的結構,並且很有可以是與系統有關的,比如說上面所說的執行緒的控制代碼,它指向的就是乙個類或者結構,他和系統有很密切的關係,當乙個執行緒由於不可預料的原因而終止時,系統就可以**它所占用的資源,如cpu,記憶體等等。反過來想可以知道,這個控制代碼中的某一些項,是與系統進行互動的。由於windows系統是乙個多工的系統,它隨時都可能要分配記憶體,**記憶體,重組記憶體等。
2、指標它也可以指向乙個複雜的結構,但是通常是使用者定義的,所有的必需的工作都需使用者完成,特別是在刪除的時候。 但在vc++6.0中也有一些指標,它們都是在處理一些小問題才用的,如最常見的字元的指標 它也是需要使用者處理的,譬如你動態分配了記憶體;但是cstring就不要使用者處理了,它其實是vc++中的乙個類,所有的操作都由成員函式完成,產生(分配)由建構函式,刪除(**)由析構函式完成。
補充知識:指標和控制代碼之間的轉換
a.由指標獲得控制代碼
cwnd* pwnd ;
hwnd hwnd ;
hwnd = pwnd-> getsafehwnd();
b.由控制代碼得到指標:
cwnd* pwnd = fromehandle(hmyhandle);
pwnd-> setwindowtext(" hello world!" ) ;
mfc類中有的還提供了標準方法,比如window 控制代碼 :
static cwnd pascal fromhandle( hwnd hwnd )
hwnd getsafehwnd( ) const
getdc函式對系統的相對開銷比較大,如果你的程式裡使用了幾百個getdc函式而又不通過releasedc函式釋放的話,那你機器執行速度將是龜速。
attach在於將hdc與cdc的物件關聯起來,並且在map表中建立一條記錄
detach在於將hdc與cdc的物件去除關聯,當然會在map表中刪除這條記錄
另外:函式功能:該函式確定給定的視窗控制代碼是否標識乙個已存在的視窗。
函式原型:bool iswindow(hwnd hwnd);
模組控制代碼(例項控制代碼)和控制代碼的區別
解釋一 1 模組的概念 乙個模組代表的是乙個執行中的exe檔案或dll檔案,用來代表這個檔案中所有的 和資源,磁碟上的檔案不是模組,裝入記憶體後執行時就叫做模組。乙個應用程式呼叫其他dll中的api時,這些dll檔案被裝入記憶體,就產生了不同的模組,為了區分位址空間中的不同模組,每個模組都有乙個惟一...
New Pythoner即學即會的常見函式集結
1 abs 求絕對值 print abs 54 542 round m,n 四捨五入 m為需要四捨五入的數,n為保留小數 print round 2.45676583,3 2.457 3 max 求最大值 print max 23 43,75 16,89 3,2 88 894 min 求最小值 pr...
控制代碼的本質
handle就是pvoid,也就是無型別指標,上面這些資源的控制代碼handles都不過是指向struct的指標,至於這個struct的用處,連m 都說unused了,現在解釋下m 這麼做的意義,這就是所謂資料封裝,你可以在你的程式中把m 的內部結構指標傳來傳去,可是你卻不知道它到底指向的內容是什麼...