Click here to load reader
Upload
chanda-kim
View
158
Download
9
Embed Size (px)
DESCRIPTION
面向对象程序设计. 第六章 MFC 原理与方法. MFC (Microsoft Foundation Class) 微软基础类 是一个由 Microsoft 公司设计的类库。 MFC 框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员要做的就是通过接口把具体应用程序特有的东西填入这个轮廓。 MFC 的目的是让应用程序员在应用程序框架的基础上建立 Windows 下的应用程序,这种方法相对于 SDK 来说更为简单。 采用 MFC 方式编程提高了 Windows 应用程序的开发效率。 认识 MFC 只是一个过程、一个手段,最终目的是为了良好并熟练地运用 MFC。. - PowerPoint PPT Presentation
Citation preview
MFC
MFCMicrosoft Foundation ClassMicrosoftMFCMFCWindowsSDKMFCWindowsMFCMFC
WindowsMFCMFCMFCMFCMFCMFC
Windows WindowsWindowsDOSDOSWindowsMessageWindowsWindows
Windows API ?Windows()(Application)Application Programming InterfaceAPI Windows APIWindowsWindows
Windows APIWindows APIWindows Windows Windows APIWindowsWindows API Windows APIDLLDLLUser32.dllGdi32.dllKernel32.dll
Windows APIAPI(API) API
Windows SDKSDKsoftware develope kitWindowsAPIAPIAPISDKVisual C++VC++WindowsWindowsSDK
SDK VC++SDKSDKVC++WindowsSDKMFCOWLObject Window Library, Borland C++ VBDelphiSDKSDKWindowsMFC
Visual C++SDK
Win32 ApplicationWindows
1File|NewNewProjectWin32 ApplicationHello1 A typital Hello world! applicationFinish2WndProc()switch-caseWM_LBUTTONDOWN case WM_LBUTTONDOWN: MessageBox(NULL, "You pressed the left button of mouse !","Message",NULL); break; 1 HelloSDKAPI
Windows?
SDKAPIWindowsWindowsWindowsWindows
WinMain()WindowswhileWinMain()WndProcswitchcase
Windows HICON)HCURSORHWNDHINSTANCEWindowsAPIAPIWindowsMFCWindowsMFC
MFCpublicCWndm_hWndMFCAttach()MFCMFCDetach()CWnd myWnd; HWND hWnd; myWnd.Attach(hWnd); . . . . . . myWnd.Detach();
WindowsWindowsWM_WM_COMMANDWM_MOVE WM_PAINTControl NotificationWM_COMMANDWM_COMMANDCommandWM_COMMAND
typedef struct tagMSG { HWND hWnd; // UINT message;// WPARAM wParam;// 116 LPARAM lParam;// 232 DWORD time;// POINT pt; // } MSG;MSG
2 HelloAa HelloHello.cppWndProc()switch case WM_KEYDOWN: // if(wParam==0x41) // Aa0x41HMessageBox(NULL, "The key you pressed is A or a !","KEYDOWN",NULL); else MessageBox(NULL, "The key you pressed is not A or a !","KEYDOWN",NULL); break;
MFC Windows APIWindowsWindowsWindows Visual C++MFCWindows
MFCC++MFCWindows200Windows MFCMicrosoft Windows/MFCH
MFCVisual C++MFCMFC AppWizardMFCClassWizardWindowsMFCWindows C5%MFCWindows APIWindows
MFCMFCMFCMFCMFCMFCCObjectWindowsMFC MFCAfxafx
MFCWindowsAPIWindows API Visual C++MFCMFCMFCMFC MFCMFCMFC MFCWizard
MFC MFCMFC theAppWinMain()MFCWinMain()MFC
MDI
MFC
MFC
MFC MFCCWinApptheAppMFCtheApptheAppMFCAfxWinMain() AfxWinMain()AfxGetApp()theApppApppAppRun()WM_PAINTOnPaint()Run()WM_QUITExitInstance()
WinMain
MFC InitInstance()
MFC
MFC MFCMFCMFCMFCSDKMFCWindowsMFCAPIMFC
MFC MFCMessage MapC/C++switch-caseMFC,WindowsDECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP()END_MESSAGE_MAP()ON_COMMAND:ID ON_COMMAND(ID_FILE_NEWCWinApp::OnFile New)MFC ClassWizard
AppWizard //{{AFX_MSG(CTttApp)afx_msg void OnAppAbout();//}}AFX_MSGDECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(CTApp, CWinApp)//{{AFX_MSG_MAP(CTttApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)//}}AFX_MSG_MAPEND_MESSAGE_MAP() ID_APP_ABOUTOnAppAbout
MFCMESSAGE_MAPBEGIN_MESSAGE_MAP(theclass, baseclass)//{{AFX_MSG_MAP(theclass)ON_ . . . . . . // MFCON_MESSAGE(message , memberFxn) // . . . . . . //}}AFX_MSG_MAPEND_MESSAGE_MAP()//{{AFX_MSG_MAPClassWizard
ClassWizardWM_CLOSEWM_DESTROYEdit|CopyClassWizard ClassWizardClassWizard BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() // MFC AppWizard ON_WM_CLOSE() // ClassWizard ON_WM_DESTROY() ON_COMMAND(ID_EDIT_COPY, OnEditCopy) //}}AFX_MSG_MAP END_MESSAGE_MAP()
ClassWizardclass CMainFrame : CFrameWnd{public: CMainFrame();protected: //{{AFX_MSG(CMainFrame) // afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // afx_msg void OnClose(); // ClassWizard afx_msg void OnDestroy(); afx_msg void OnEditCopy(); //}}AFX_MSG DECLARE_MESSAGE_MAP() // };
SendPostWindowsAPISendMessage() PostMessage()SendDlgItemMessage()
MFCCWndpMyView->SendMessage()pMyViewPostSend
:IDMFCWM_USER0x0400WM_USER#define#define WM_USER1 WM_USER+0#define WM_USER2 WM_USER+1
BEGIN_MESSAGE_MAP()END_MESSAGE_MAP() ON_MESSAGE(message, memberFxn) messagememberFxn afx_msg afx_msg LRESULT memberFxn (WPARAM wParam , LPARAM lParam);wParamlParamCWnd::SendMessage()CWnd:: PostMessage()
WM_TIMER 1MFC AppWizard[exe]RotateClassWizardCRotateViewWM_CREATEWM_TIMER SetTimer(1,200,NULL); // 2RotateView.cpp#define WM_MYMESSAGE WM_USER+1 ClassWizardCRotateViewWM_TIMESendMessage(WM_MYMESSAGE);
3CRotateViewafx_msg LRESULT OnMyMessage( WPARAM wParam, LPARAM lParam); RotateView.cppBEGIN_MESSAGE_MAP END_MESSAGE_MAPON_MESSAGE(WM_MYMESSAGE,OnMyMyessage) 4CRotateViewprivateintm_dEscapementCRotateViewm_dEscapement=0; 5RotateView.cpp6ClassWizardWM_DESTROYKillTimer(1);
MFC #defineMFCMFCMFCMFCAfxwin.hAfx.hAfxmsg_.hMFCMFC
MFC
MFC CRuntimeClass CRuntimeClassMFCCRuntimeClassCObjectRTTICRuntimeClass CObjectCRuntimeClassCRuntimeClassRUNTIME_CLASS()MFC
CObjectMFCCObjectCObjectMFCCObject MFCAssertValid()Dump() GetRuntimeClass()IskindOf()
CCmdTargetCCmdTargetCObjectMFCCCmdTarget3BeginWaitCursor()EndWaitCursor()BeginWait- Cursor()RestoreWaitCursor() void CMyView::OnSomeCommand(){BeginWaitCursor(); // . . . . . . // EndWaitCursor(); // }
CWinAppMFCCWinAppWinMain()SDKSDKWinMain()CWinAppInitApplication()InitInstance()Run()MFCCWinApp
CWndCWndCCmdTargetCWndMFCGUIMFCCWnd
CFrameWndCFrameWndCWndSDKWndProc()CFrameWndCFrameWndSDIMDICMDIFrameWndCMDIChildWndCFrameWnd
CDocumentCViewCDocumentCDocument CDocument CViewMFCMFC
631HelloSDKHELPMessage,Message _itoa()632Win32 Application WizardWindows1 A empty projectHello MFC! 633 SDIAPISetTimer()APILineDDA()635HelloSDKAPIWM_CHARXx 638 639WM_TIMER645: SDI2
hwndVCHWNDmessageVCWM_xxxxxxWM_MOUSEMOVEWM_KEYDOWNWM_CHARWM_xxxWM_xxxWM_xxxgoto definitionwParamlParammessagewParamlParam17