MFC常用知識歸納(1)


1、指針CWnd*wnd和句柄HWND hWnd
hWnd 表示窗口句柄
通俗地說,如果把一個到處跑的人當作指針的話,那麼HWND就是該人的身份證號碼
CWnd是MFC中所有組件對象的父類
GetDlgItem()可以通過組件的ID號得到組件對象的地址,這裏是以父類指針CWnd*返回

2、CWnd*wnd與HWND hWnd的相互轉換
//CWnd Object to HWND:
CWnd wnd;
HWND hWnd;
hWnd = wnd.m_hWnd;
// or
hWnd = wnd.GetSafeHwnd(); //推薦

// HWND to CWnd Object:
CWnd *pWnd;
HWND hWnd;
pWnd = CWnd::FromHandle(hWnd);
// or
pWnd->Attach(hWnd);
中間省略了必須要得初始化。

3、HINSTANCE\HWND\CWnd\HANDLE 的區別
HINSTANCE是應用程序實例句柄,
HWND是窗口對象句柄,
HANDLE是任意對象的句柄,
CWnd是MFC中的窗口類。

4、句柄HANDLE和控件ID的區別
以姓名和身份證號碼爲比喻:
控件ID是姓名,那麼一個家庭內同一個名字只對應一個成員,而不同家庭的成員可能重名
句柄是身份證號,整個國家所有的家庭的不同的成員的身份證號唯一。
而家庭可以當做MFC中的一個分立的窗口,同一個MFC程序中可能有多個不同的窗口(如多個分立的對話框),
那麼每個對話框有各自的控件,每個對話框又有屬於自己的對話框ID。


5、ID--HANDLE--HWND三者之間的互相轉換
id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id);
id->指針-----------CWnd::GetDlgItem();
句柄->id-----------int id = GetWindowLong(hWnd,GWL_ID);
句柄->指針--------CWnd *pWnd=CWnd::FromHandle(hWnd);
指針->ID----------int id = GetWindowLong(pWnd->GetSafeHwnd(),GWL_ID);
GetDlgCtrlID();
指針->句柄--------hWnd=cWnd.GetSafeHandle() or mywnd->m_hWnd;

6、獲取一個編輯框裏的內容
使用CWnd類的成員函數
int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
int GetDlgItemText( int nID, CString& rString ) const;
調用這個函數以獲得與對話框中的控件相關的標題或文本。GetDlgItemText成員函數將文本拷貝到lpStr指向的位置並返回拷貝的字節的數目。
nID 指定了要獲取其標題的控件的整數標識符ID。 lpStr 指向要接收控件的標題或文本的緩衝區。 nMaxCount 指定了要拷貝到lpStr的字符串的最大長度(以字節爲單位)。如果字符串比nMaxCount要長,它將被截斷。 rString 對一個CString對象的引用。

7、設置一個編輯框裏的內容
BOOL SetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);
hDlg:指定含有控件的對話框。
nlDDlgltem:標識帶有將被設置的標題和文本的控件。
IpString:指向一個以NULL結尾的字符串指針,該字符串指針包含了將被複制到控件的文本。

8、使用MessageBox進行調試
使用部分參數的MessageBox,是MFC對SDK的MessageBox的封裝,是CWnd類的成員函數,它利用了C++的特性,即可以不顯式地提供所有參數。因爲它有默認參數。
MessageBox("調試信息");
使用四個參數都要寫全的MessageBox函數,是SDK的MessageBox函數,必須顯式地指定四個參數,因爲C中沒有默認參數的概念;
MessageBox(NULL,"debug","debug",0);
或者使用AfxMessageBox("調試信息");也可以
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章