第六章 MFC 原理与方法
-
Upload
chanda-kim -
Category
Documents
-
view
158 -
download
9
description
Transcript of 第六章 MFC 原理与方法
-
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()
- 1 Insert|New ClassCObjectCHumanCHumanAssertValid()ASSERT void CHuman::AssertValid() const{ CObject::AssertValid(); ASSERT(m_year>0); ASSERT(m_year
- 2 CHumanDump()m_year void CHuman::Dump(CDumpContext &dc ) const{CObject::Dump(dc); dc
-
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