生活随笔
收集整理的這篇文章主要介紹了
                                
VS2010中如何实现自定义MFC控件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            本文簡要講解在VS2010中怎樣實現自定義MFC控件的知識,以下是分步驟說明。
 
???????一、自定義一個空白控件
 
???????1、先創建一個MFC工程
 
?????? NEW Project-->MFC-->MFC Application-->name:? “CustomCtr”-->Application Type選擇“Dialog based”。
 
???????2、在窗口中添加一個自定義控件
 
?????? Toolbox-->“Custom Control”-->屬性-->class隨便填寫一個控件類名“CMyWin”, 這個名字用于以后注冊控件用的,注冊函數為RegisterWindowClass()。
 
???????3、創建一個類
 
?????? 在窗口中,右擊custom control 控件-->ClassWizard-->ClassWizard-->Add Class-->類名CMyTest(以C開頭)-->Base class:CWnd。
 
????????4、注冊自定義控件MyWin
 
?????? 在MyTest類.h文件中聲明注冊函數BOOL???RegisterWindowClass(HINSTANCE hInstance = NULL)。
 
C++代碼
 
BOOL?CMyTest::RegisterWindowClass(HINSTANCE?hInstance) ??{ ????????LPCWSTR?className?=?L"CMyWin";//"CMyWin"控件類的名字??????????WNDCLASS?windowclass;?????? ??? ?????????if(hInstance) ????????????????hInstance?=?AfxGetInstanceHandle(); ????????? ?????????if?(!(::GetClassInfo(hInstance,?className,?&windowclass))) ?????????{????????????? ????????????????windowclass.style?=?CS_DBLCLKS; ????????????????windowclass.lpfnWndProc?=?::DefWindowProc; ????????????????windowclass.cbClsExtra?=?windowclass.cbWndExtra?=?0; ????????????????windowclass.hInstance?=?hInstance; ????????????????windowclass.hIcon?=?NULL; ????????????????windowclass.hCursor?=?AfxGetApp()->LoadStandardCursor(IDC_ARROW); ????????????????windowclass.hbrBackground=\'#\'"?> ????????????????windowclass.lpszMenuName?=?NULL; ????????????????windowclass.lpszClassName?=?className; ??? ????????????????if?(!AfxRegisterClass(&windowclass)) ????????????????{ ???????????????????????AfxThrowResourceException(); ???????????????????????return?FALSE; ????????????????} ?????????} ??? ?????????return?TRUE; ??}??
???????5、在MyTest類的構造器中調用 RegisterWindowClass()。
 
C++代碼
 
CMyTest::CMyTest() ??{ ?????????RegisterWindowClass(); ??}??
???????6、控件與對話框數據交換
 
?????? 在CustomCtrDlg.h中定義一個變量:
 
???????CMyTest??? m_draw;
 
?????? 在對話框類的CustomCtrDlg.cpp的DoDataExchange函數中添加DDX_Control(pDX,IDC_CUSTOM1,m_draw)。
 
C++代碼
 
void?CCustomCtrDlg::DoDataExchange(CDataExchange*?pDX) ??{ ?????????CDialogEx::DoDataExchange(pDX); ?????????DDX_Control(pDX,IDC_CUSTOM1,m_draw); ??}??
?????? 以上是自定義一個空白控件。
 ?
 ???????二、在控件上繪圖
 
???????1、在CMyTest類中添加一個繪圖消息
 
?????? 在VS2010最左側Class View中右擊CMyTest類-->ClassWizard-->Messages-->WM_PAINT-->雙擊,開發環境自動添加OnPaint()函數及消息隊列。
 
???????2、編寫OnPaint()函數
 
???????例如:畫一條直線
 
C++代碼
 
void?CMykk::OnPaint() ??{ ?????????CPaintDC?dc(this);?//?device?context?for?painting??????????//?TODO:?Add?your?message?handler?code?here??????????//?Do?not?call?CWnd::OnPaint()?for?painting?messages??????????CRect?rect; ?????????this->GetClientRect(rect); ??????? ?????????dc.MoveTo(0,0); ?????????dc.LineTo(rect.right,rect.bottom); ??}??
來自:http://6208051.blog.51cto.com/6198051/1058634
 
轉自:http://www.jizhuomi.com/software/181.html
                            總結
                            
                                以上是生活随笔為你收集整理的VS2010中如何实现自定义MFC控件的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。