MFC筆記——GetSafeHwnd()和GetSafeHandle()的主要區別
GetSafeHwnd()和GetSafeHandle()的主要區別:
1.使用者不同:
(1)窗體使用:
GetSafeHwnd()用於獲取窗體的安全控制代碼(即HWND),有了HWND我們就可以方便的對HWND指向的窗體進行所需的操作了;
(2)GDI物件使用:
GetSafeHandle(),用於獲取GDI物件的控制代碼。
注意:在使用指標時強烈建議這麼做:
// pSomeWnd 為一個窗體的指標
if ( NULL != pSomeWnd && NULL != pSomeWnd->GetSafeHwnd())
{
// do something.
}
//////////////////////////////////////////////////////////////////////
補充知識:
記憶體控制代碼與指標的區別:
(1).控制代碼其實就是指標,但是他和指標最大的不同是:給你一個指標,你可以通過這個指標做任何事情,也許是好事,也許是通過這個指標破壞記憶體,幹一些搗亂的事情。這個我想大家都會碰到過,因為亂用指標可能會導致程式崩潰。 (2).控制代碼是一些表的索引也就是指向指標的指標。 控制代碼和指標都是地址,控制代碼是windows 由於windows是一個多工作業系統,它可以同時執行多個程式或一個程式的多個副本。這些執行的程式稱為一個例項。為了對同一程式的多個副本進行管理,windows 1.HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName);
HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter,
LPCTSTR lpszClass, LPCTSTR lpszWindow ); 2.HWND WindowFromPoint( 3.BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lParam);
BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam ); BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam ); BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ); 補充知識:指標和控制代碼之間的轉換 a.由指標獲得控制代碼 b.由控制代碼得到指標: mfc類中有的還提供了標準方法,比如window 控制代碼 : 對於點陣圖: 控制代碼是個指標,指向一塊記憶體,但至於這塊記憶體跟控制代碼所標識的物件是怎麼聯絡起來的,呼叫者不需要清楚,呼叫者只需要知道,這個控制代碼聯絡著一個win32物件。 作業系統在建立一個物件(如gdi, file)等的時候,它會為這個物件上下文context保留一塊資料結構,然後把它放在一張全域性表中。控制代碼就是這塊資料結構在表中的索引。 |