Jan 02, 2016
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