• MFC¶ÔÏóµÄ´´½¨

    Ç°Ãæ¼¸Õ½éÉÜÁËMFCµÄºËÐĸÅÄîºÍ˼Ï룬¼´½éÉÜÁËMFC¶ÔWindows¶ÔÏóµÄ·â×°·½·¨ºÍÌØµã£»MFC¶ÔÏóµÄ¶¯Ì¬´´½¨¡¢ÐòÁл¯£»MFCÏûÏ¢Ó³Éä»úÖÆ¡£

    ÏÖÔÚ£¬¿¼²éMFCµÄÓ¦ÓóÌÐò½á¹¹Ìåϵ£¬¼´ÒÔÎĵµ-ÊÓΪºËÐĵıà³Ìģʽ¡£Ñ§Ï°±¾Õ£¬Ó¦¸ÃŪÇå³þÒÔÏÂÎÊÌ⣺

    MFCÖÐÖî¶àMFC¶ÔÏóµÄ¹ØÏµ£ºÓ¦ÓóÌÐò¶ÔÏó£¬Îĵµ¶ÔÏ󣬱߿ò´°¿Ú¶ÔÏó£¬Îĵµ±ß¿ò´°¿Ú¶ÔÏó£¬ÊÓ¶ÔÏó£¬ÎĵµÄ£°å¶ÔÏóµÈ¡£

    MFC¶ÔÏóµÄ´´½¨ºÍÏú»Ù£ºÓÉʲô¶ÔÏó´´½¨»òÏú»Ùʲô¶ÔÏ󣬺Îʱ´´½¨£¬ºÎʱÏú»Ù£¿

    MFCÌṩÁËÄÇЩ½Ó¿ÚÀ´Ö§³ÖÆä±à³Ìģʽ£¿

    1. MFC¶ÔÏóµÄ¹ØÏµ

      1. ´´½¨¹ØÏµ

        ÕâÀïÌÖÂÛÓ¦ÓóÌÐò¡¢ÎĵµÄ£°å¡¢±ß¿ò´°¿Ú¡¢ÊÓ¡¢ÎĵµµÈµÄ´´½¨¹ØÏµ¡£Í¼5-1´óÂԵرíʾÁË´´½¨Ë³Ðò£¬µ«±í5-1¸üÖ±½ÓµØÏÔʾÁË´´½¨Óë±»´´½¨µÄ¹ØÏµ¡£

        ¡¡

        ±í5-1 MFC¶ÔÏóµÄ´´½¨¹ØÏµ

        ´´½¨Õß

        ±»´´½¨µÄ¶ÔÏó

        Ó¦ÓóÌÐò¶ÔÏó

        ÎĵµÄ£°å

        ÎĵµÄ£°å

        Îĵµ

        ÎĵµÄ£°å

        ±ß¿ò´°¿Ú

        ±ß¿ò´°¿Ú

        ÊÓ

        ¡¡

      2. ½»»¥×÷ÓùØÏµ

      Ó¦ÓóÌÐò¶ÔÏóÓÐÒ»¸öÎĵµÄ£°åÁÐ±í£¬´æ·ÅÒ»¸ö»ò¶à¸öÎĵµÄ£°å¶ÔÏó£»ÎĵµÄ£°å¶ÔÏóÓÐÒ»¸ö´ò¿ªÎĵµÁÐ±í£¬´æ·ÅÒ»¸ö»ò¶à¸öÒѾ­´ò¿ªµÄÎĵµ¶ÔÏó£»Îĵµ¶ÔÏóÓÐÒ»¸öÊÓÁÐ±í£¬´æ·ÅÏÔʾ¸ÃÎĵµÊý¾ÝµÄÒ»¸ö»ò¶à¸öÊÓ¶ÔÏó£»»¹ÓÐÒ»¸öÖ¸ÕëÖ¸Ïò´´½¨¸ÃÎĵµµÄÎĵµÄ£°å¶ÔÏó£»ÊÓÓÐÒ»¸öÖ¸ÏòÆä¹ØÁªÎĵµµÄÖ¸Õ룬ÊÓÊÇÒ»¸ö×Ó´°¿Ú£¬Æä¸¸´°¿ÚÊDZ߿ò´°¿Ú£¨»òÕßÎĵµ±ß¿ò´°¿Ú£©£»Îĵµ±ß¿ò´°¿ÚÓÐÒ»¸öÖ¸ÏòÆäµ±Ç°»î¶¯ÊÓµÄÖ¸Õ룻Îĵµ±ß¿ò´°¿ÚÊDZ߿ò´°¿ÚµÄ×Ó´°¿Ú¡£

      Windows ¹ÜÀíËùÓÐÒѾ­´ò¿ªµÄ´°¿Ú£¬°ÑÏûÏ¢»òʼþ·¢Ë͸øÄ¿±ê´°¿Ú¡£Í¨³££¬ÃüÁîÏûÏ¢·¢Ë͸øÖ÷±ß¿ò´°¿Ú¡£

      ͼ5-2´óÂԵرíʾÁËÉÏÊö¹ØÏµ£º

      MFCÌṩÁËһЩº¯ÊýÀ´Î¬»¤ÕâЩ¹ØÏµ¡£

      ±í5-2ÁгöÁË´ÓÒ»¸ö¶ÔÏóµÃµ½Ïà¹Ø¶ÔÏóµÄ·½·¨¡£

      ±í5-2 ´ÓÒ»¸ö¶ÔÏóµÃµ½ÁíÒ»¸ö¶ÔÏóµÄ·½·¨

      ±¾¶ÔÏó

      ÒªµÃµ½µÄ¶ÔÏó

      ʹÓõijÉÔ±º¯Êý

      CDocument¶ÔÏó

      ÊÓÁбí

      GetFirstViewPosition

      GetNextView

      ÎĵµÄ£°å

      GetDocTemplate

      CView¶ÔÏó

      Îĵµ¶ÔÏó

      GetDocument

      ±ß¿ò´°¿Ú

      GetParentFrame

      CMDIChildWnd»ò

      CFrameWnd¶ÔÏó

      »î¶¯ÊÓ

      GetActiveView

      »î¶¯ÊÓµÄÎĵµ

      GetActiveDocument

      CMDIFrameWnd¶ÔÏó

      »î¶¯Îĵµ±ß¿ò´°¿Ú

      MDIGetActive

      ¡¡

      ±í5-3 ´ÓÒ»¸ö¶ÔÏó֪ͨÁíÒ»¸ö¶ÔÏóµÄ·½·¨£º

      ±¾¶ÔÏó

      Ҫ֪ͨµÄ¶ÔÏó/¶¯×÷

      ʹÓõijÉÔ±º¯Êý

      CView¶ÔÏó

      ֪ͨÎĵµ¸üÐÂËùÓÐÊÓ

      CDocument::UpdateAllViews

      CDocument¶ÔÏó

      ¸üÐÂÒ»¸öÊÓ

      CView::OnUpdate

      CFrameWnd»ò

      CMDIFrameWnd¶ÔÏó

      ֪ͨһ¸öÊÓΪ»î¶¯ÊÓ

      CView::OnActivateView

      ÉèÖÃÒ»¸öÊÓΪ»î¶¯ÊÓ

      SetActivateView

      ¿ÉÒÔͨ¹ý±í5-2µÃµ½Ïà¹Ø¶ÔÏó£¬ÔÙµ÷Óñí5-3ÖÐÏàÓ¦µÄº¯Êý¡£ÀýÈ磺ÊÓÔÚ½ÓÊÜÁËÐÂÊý¾Ý»òÕßÊý¾Ý±»ÐÞ¸ÄÖ®ºó£¬Ê¹Óñí5-2Öеĺ¯ÊýGetDocumentµÃµ½¹ØÁªÎĵµ¶ÔÏó£¬È»ºóµ÷Óñí5-3ÖеÄÎĵµº¯ÊýUpdateAllViews¸üÐÂÆäËûºÍÎĵµ¶ÔÏó¹ØÁªµÄÊÓ¡£

      ÔÚ±í5-2ºÍ±í5-3ÖУ¬CView¶ÔÏóÖ¸CView»òÅÉÉúÀàµÄʵÀý£»³ÉÔ±º¯ÊýÁÐÖÐÈç¹ûûÓÐÖ¸¶¨ÀàÊô£¬¾ÍÊǵÚÒ»ÁжÔÏóµÄÀàµÄ³ÉÔ±º¯Êý¡£

    2. MFCÌṩµÄ½Ó¿Ú

      MFC±à³Ì¾ÍÊǰÑһЩӦÓóÌÐòÌØÓеĶ«Î÷ÌîÈëMFC¿ò¼Ü¡£MFCÌṩÁËÁ½ÖÖÌîÈëµÄ·½·¨£ºÒ»ÖÖ¾ÍÊÇʹÓÃǰһÕÂÂÛÊöµÄÏûÏ¢Ó³É䣬ÏûÏ¢Ó³É䏸ӦÓóÌÐòµÄ¸÷ÖÖ¶ÔÏó´¦Àí¸÷ÖÖÏûÏ¢µÄ»ú»á£»ÁíÒ»ÖÖ¾ÍÊÇʹÓÃÐéÄ⺯Êý£¬MFCÔÚʵÏÖÐí¶à¹¦ÄÜ»òÕß´¦ÀíÏûÏ¢¡¢Ê¼þµÄ¹ý³ÌÖУ¬µ÷ÓÃÁËÐéÄ⺯ÊýÀ´Íê³ÉһЩÈÎÎñ£¬ÕâÑù¾Í¸øÁËÅÉÉúÀา¸ÇÕâЩÐéÄ⺯ÊýʵÏÖÌØ¶¨´¦ÀíµÄ»ú»á¡£

      ÏÂÃæÁ½½Ú½«ÁгöÁ½Àà½Ó¿Ú£¬ÓÐÁ½¸öÄ¿µÄ£ºÒ»ÊÇΪÁËÈöÁÕß»ñµÃÕûÌåÓ¡Ï󣬶þÊǺóÎĽ«Éæ¼°µ½»òÕßÌÖÂÛÆäÖеÄÐí¶àº¯Êýʱ£¬²»ÏÔµÃͻأ¡£

      1. ÐéÄ⺯Êý½Ó¿Ú

        ¼¸ºõÿһ¸öMFCÀà¶¼¶¨ÒåºÍʹÓÃÁËÐéÄâ³ÉÔ±º¯Êý£¬³ÌÐòÔ±¿ÉÒÔÔÚÅÉÉúÀàÖи²¸ÇËüÃÇ¡£Ò»°ã£¬MFCÌṩÁËÕâЩº¯ÊýµÄȱʡʵÏÖ£¬ËùÒÔ¸²¸Çº¯ÊýÓ¦¸Ãµ÷ÓûùÀàµÄʵÏÖ¡£ÕâÀï¸ø³öÒ»¸öMFC³£ÓÃÐéÄ⺯ÊýµÄ×ÜÀÀ±í(¼û±í5-4)£¬¸üÏêϸµÄÐÅÏ¢»òËüÃǵÄȱʡʵÏÖ¶¯×÷²Î¼ûMFCÎĵµ¡£ÓÉÓÚ»ùÀàµÄÐéÄ⺯Êý±»ÅÉÉúÀà¼Ì³Ð£¬ËùÒÔÔÚÅÉÉúÀàÖв»×÷ÖØ¸´ËµÃ÷¡£

        ¸²¸Ç»ùÀàµÄÐéÄ⺯Êý¿ÉÒÔͨ¹ýClassWizard½øÐУ¬²»¹ý£¬²¢·ÇËùÓеĺ¯Êý¶¼¿ÉÒÔÕâÑù£¬ÓеıØÐëÊÖ¹¤¼ÓÈ뺯ÊýÉùÃ÷ºÍʵÏÖ¡£

        ±í5-4 ³£¼ûMFCÀàµÄÐéÄ⺯Êý½Ó¿Ú

        Àà

        ÐéÄ⺯Êý

        ¸²¸ÇµÄÄ¿µÄºÍ¹¦ÄÜ

        CCmdTarget

        OnCmdMsg

        ·¢ËÍ¡¢ÅÉ·¢ÃüÁîÏûÏ¢

        OnFinalRelease

        OLEÓÃ;£¬ÒýÓÃΪ0ʱ×÷ÇåÀí¹¤×÷

        CWinThread

        ExitInstance

        ÔÚÏß³ÌÍ˳öʱ×÷ÇåÀí¹¤×÷

        InitInstance

        ÔÚÏ߳̿ªÊ¼Ê±×÷³õʼ»¯

        OnIdle

        Ö´ÐÐthread-specific idle-time´¦Àí

        PreTranslateMessage

        ÔÚÏûÏ¢Ë͸øWindowsº¯ÊýTranslateMessage and DispatchMessage.֮ǰ½øÐÐÏûÏ¢¹ýÂË

        IsIdleMessage

        ¼ì²éÊÇ·ñÊÇij¸öÌØ±ðµÄÏûÏ¢

        ProcessWndProcException

        ½Ø»ñÏß³ÌÏûÏ¢/ÃüÁî´¦ÀíÖеÄÀýÍâ

        ProcessMessageFilter

        Ïß³ÌÏûÏ¢¹ýÂË

        Run

        ʵÏÖÏß³ÌÌØ¶¨µÄÏûϢѭ»·

        CWinApp

        HideApplication

        ¹Ø±ÕËùÓеĴ°¿Ú֮ǰÒþ²ØÓ¦ÓóÌÐò

        CloseAllDocument

        Í˳ö³ÌÐò֮ǰ¹Ø±ÕËùÓÐÎĵµ

        תÏÂÒ³

        ¡¡

        Ðø±í

        ¡¡

        SaveModifiedDocument

        ¿ò¼Ü´°¿Ú¹Ø±ÕʱÓÃÀ´±£´æÎĵµ

        DoMessageBox

        ʵÏÖ¿Í»§»¯µÄmessagebox

        DoWaitCursor

        ¹Ø±Õ»ò´ò¿ªµÈ´ý¹â±ê

        OnDDeCommand

        ÏìÓ¦DDEÃüÁî

        WinHelp

        µ÷ÓÃWinHelpº¯Êý

        CWnd

        WindowProc

        Ìṩһ¸ö´°¿Ú¹ý³Ì

        DefWindowProc

        ΪӦÓóÌÐò²»´¦ÀíµÄÏûÏ¢Ìṩȱʡ´¦Àí

        PostNcDestroy

        ÔÚ´°¿ÚÏú»ÙÖ®ºó±»ÏûÏ¢´¦Àíº¯ÊýOnNcDestroyµ÷ÓÃ

        OnNotify

        ´¦Àí֪ͨÏûÏ¢WM_NOTIFY

        OnChildNotify

        ¸¸´°¿Úµ÷ÓÃËü¸ø¿ØÖÆ×Ó´°¿ÚÒ»¸ö»ú»áÀ´´¦Àí֪ͨ·´ÉäÏûÏ¢

        DoDataExchange

        Updataµ÷ÓÃËüÀ´½øÐжԻ°¿òÊý¾Ý½»»»ºÍÑéÖ¤

        CFrameWnd

        GetMessageBar

        ·µ»ØÒ»¸öÖ¸Ïò¿ò¼Ü´°¿ÚµÄ״̬ÌõµÄÖ¸Õë

        OnCreateClient

        ´´½¨¿ò¼ÜµÄ¿Í»§´°¿Ú

        OnSetPreviewMode

        ÉèÖóÌÐòµÄÖ÷¿ò¼Ü´°¿Ú½øÈë»òÍ˳ö´òÓ¡Ô¤ÀÀģʽ

        NegotiateBorderSpace

        Эµ÷±ß¿ò´°¿ÚµÄ±ß¿ò¿Õ¼äµÄ´óС(OLEÓÃ;)

        CMDIFrameWnd

        CreateClient

        ´´½¨CMDIFrameWndµÄMDICLIENT´°£¬±»CWndµÄÏûÏ¢´¦Àíº¯ÊýOnCreateµ÷ÓÃ.

        תÏÂÒ³

        ¡¡

        Ðø±í

        ¡¡

        GetWindowMenuPopup

        ·µ»Ø´°¿ÚµÄµ¯³öʽ²Ëµ¥

        CDialog

        OnInitDialog

        ¶Ô»°¿ò´°¿ÚµÄ³õʼ»¯

        OnSetFont

        ÉèÖöԻ°¿ò¿ØÖƵÄÎı¾×ÖÌå

        OnOK

        ģʽ¶Ô»°¿òµÄOK°´Å¥°´Ïºó½øÐеĴ¦Àí

        OnCancel

        ģʽ¶Ô»°¿òµÄCANCEL°´Å¥°´Ïºó½øÐеĴ¦Àí

        CView

        IsSelected

        ²âÊÔÊÇ·ñÓÐÒ»¸öÎĵµ±»Ñ¡Ôñ(OLEÖ§³Ö)

        OnActivateView

        ÊÓ´°¿Ú¼¤»îʱµ÷ÓÃ

        OnActivateFrame

        µ±°üº¬ÊÓ´°¿ÚµÄ¿ò¼Ü´°¿Ú±ä³É»î¶¯»ò·Ç»î¶¯´°¿Úʱµ÷ÓÃ

        OnBeginPrinting

        ´òÓ¡¹¤×÷¿ªÊ¼Ê±µ÷Óã¬ÓÃÀ´·ÖÅäGDI×ÊÔ´

        OnDraw

        ÓÃÀ´ÆÁÄ»ÏÔʾ¡¢´òÓ¡¡¢´òÓ¡Ô¤ÀÀÎĵµÄÚÈÝ

        OnEndPrinting

        ´òÓ¡¹¤×÷½áÊøÊ±µ÷Óã¬ÊÍ·ÅGDI×ÊÔ´

        OnEndPrintPreview

        Í˳ö´òÓ¡Ô¤ÀÀģʽʱµ÷ÓÃ

        OnPrepareDC

        OnDraw»òOnPrint֮ǰµ÷Óã¬ÓÃÀ´×¼±¸É豸ÃèÊö±í

        OnPreparePrinting

        Îĵµ´òÓ¡»òÕß´òÓ¡Ô¤ÀÀǰµ÷Ó㬿ÉÓÃÀ´³õʼ»¯´òÓ¡¶Ô»°¿ò

        OnPrint

        ÓÃÀ´´òÓ¡»ò´òÓ¡Ô¤ÀÀÎĵµ

        OnUpdate

        ÓÃÀ´Í¨ÖªÒ»¸öÊӵĹØÁªÎĵµÄÚÈÝÒѾ­±ä»¯

        CDocTemplate

        MatchDocType

        È·¶¨ÎĵµÀàÐͺÍÎĵµÄ£°åÆ¥ÅäʱµÄ¿ÉÐų̶È

        תÏÂÒ³

        ¡¡

        Ðø±í

        ¡¡

        CreateNewDocument

        ´´½¨Ò»¸öеÄÎĵµ

        CreateNewFrame

        ´´½¨Ò»¸ö°üº¬ÎĵµºÍÊӵĿò¼Ü´°¿Ú

        InitialUpdateFrame

        ³õʼ»¯¿ò¼Ü´°¿Ú£¬±ØÒªÊ±Ê¹Ëü¿É¼û

        SaveAllModified

        ±£´æËùÓкÍÄ£°åÏà¹ØµÄ¶øÇÒÐÞ¸ÄÁ˵ÄÎĵµ

        CloseAllDocuments

        ¹Ø±ÕËùÓкÍÄ£°åÏà¹ØµÄÎĵµ

        OpenDocumentFile

        ´ò¿ªÖ¸¶¨Â·¾¶µÄÎļþ

        SetDefaultTitle

        ÉèÖÃÎĵµ´°¿ÚȱʡÏÔʾµÄ±êÌâ

        CDocument

        CanCloseFrame

        ÔڹرÕÏÔʾ¸ÃÎĵµµÄ±ß¿ò´°¿Ú֮ǰµ÷ÓÃ

        DeleteContents

        ÓÃÀ´Çå³ýÎĵµµÄÄÚÈÝ

        OnChangedViewList

        ÔÚÓëÎĵµ¹ØÁªµÄÊÓͼ±»ÒÆ×ß»òмÓÈëʱµ÷ÓÃ

        OnCloseDocument

        ÓÃÀ´¹Ø±ÕÎĵµ

        OnNewDocument

        ÓÃÀ´´´½¨ÐÂÎĵµ

        OnOpenDocument

        ÓÃÀ´´ò¿ªÎĵµ

        OnSaveDocument

        ÒÔÀ´±£´æÎĵµ

        ReportSaveLoadException

        ´¦Àí´ò¿ª¡¢±£´æÎĵµ²Ù×÷ʧ°ÜʱµÄÀýÍâ

        GetFile

        ·µ»ØÒ»¸öÖ¸ÏòCfile¶ÔÏóµÄÖ¸Õë

        ReleaseFile

        ÊÍ·ÅÒ»¸öÎļþÒÔ±ãÆäËûÓ¦ÓóÌÐò¿ÉÒÔʹÓÃ

        SaveModified

        ÓÃÀ´Ñ¯ÎÊÓû§ÎĵµÊÇ·ñÐèÒª±£´æ

        PreCloseFrame

        ÔÚ¿ò¼Ü´°¿Ú¹Ø±Õ֮ǰµ÷ÓÃ

        ¡¡

      2. ÏûÏ¢Ó³Éä·½·¨ºÍ±ê×¼ÃüÁîÏûÏ¢

      ´°¿Ú¶ÔÏó¿ÉÒÔÏìÓ¦ÒÔ¡°WM_¡±ÎªÇ°×ºµÄ±ê×¼WindowsÏûÏ¢£¬ÏûÏ¢´¦Àíº¯ÊýÃû³ÆÒÔ¡°ON¡±ÎªÇ°×º¡£²»Í¬ÀàÐ͵ÄWindows´°¿Ú´¦ÀíµÄWindowsÏûÏ¢ÊÇÓÐËù²»Í¬µÄ£¬Òò´Ë£¬²»Í¬ÀàÐ͵ÄMFC´°¿ÚʵÏÖµÄÏûÏ¢´¦Àíº¯ÊýÒ²ÓÐËù²»Í¬¡£ÀýÈ磬¶àÎĵµ±ß¿ò´°¿ÚÄÜ´¦ÀíWM_MDIACTIVATEÏûÏ¢£¬ÆäËûÀàÐÍ´°¿Ú¾Í²»ÄÜ¡£³ÌÐòÔ±´ÓÒ»¶¨µÄMFC´°¿ÚÅÉÉú×Ô¼ºµÄ´°¿ÚÀ࣬¶Ô¸ÐÐËȤµÄÏûÏ¢£¬¸²¸Ç»ùÀàµÄÏûÏ¢´¦Àíº¯Êý£¬ÊµÏÖ×Ô¼ºµÄÏûÏ¢´¦Àíº¯Êý¡£

      ËùÓеÄÃüÁîÄ¿±ê£¨CCmdTarger»òµ¼³öÀà¶ÔÏ󣩿ÉÒÔÏìÓ¦ÃüÁîÏûÏ¢£¬³ÌÐòÔ±¿ÉÒÔÖ¸¶¨Ó¦ÓóÌÐò¶ÔÏ󡢿ò¼Ü´°¿Ú¶ÔÏó¡¢ÊÓ¶ÔÏó»òÎĵµ¶ÔÏóµÈÀ´´¦ÀíijÌõÃüÁîÏûÏ¢¡£Ò»°ãµØ£¬¾¡Á¿ÓÉÓëÃüÁîÏûÏ¢¹ØÏµÃÜÇеĶÔÏóÀ´´¦Àí£¬ÀýÈçÒþ²Ø/ÏÔʾ¹¤¾ßÀ¸ÓÉ¿ò¼Ü´°¿Ú´¦Àí£¬´ò¿ªÎļþÓÉÓ¦ÓóÌÐò¶ÔÏó´¦Àí£¬Êý¾Ý±ä»¯µÄ²Ù×÷ÓÉÎĵµ¶ÔÏó´¦Àí¡£

      ¶Ô»°¿òµÄ¿ØÖÆ×Ó´°¿Ú¿ÉÒÔÏìÓ¦¸÷Àà֪ͨÏûÏ¢¡£

      ¶ÔÓÚÃüÁîÏûÏ¢£¬MFCʵÏÖÁËһϵÁбê×¼ÃüÁîÏûÏ¢´¦Àíº¯Êý¡£±ê×¼ÃüÁîIDÔÚafxres.hÖж¨Òå¡£±í5-5ÁгöÁËMFC±ê×¼ÃüÁîµÄʵÏÖ£¬´ÓID»òÕߺ¯ÊýÃû¿ÉÒÔ´óÖµؿ´³ö¸Ãº¯ÊýµÄÄ¿µÄ¡¢¹¦Ó㬾ßÌåµÄʵÏÖÓеĺóÐøÕ½ڻὲ½â£¬Ïêϸ²Î¼ûMFC¼¼ÊõÎĵµ¡£

      ³ÌÐòÔ±¿ÉÒÔ×Ô¼ºÀ´´¦ÀíÕâЩ±ê×¼ÏûÏ¢£¬Ò²¿ÉÒÔͨ¹ý²»Í¬µÄÀà»ò´Ó²»Í¬µÄÀർ³ö×Ô¼ºµÄÀàÀ´´¦ÀíÕâЩÏûÏ¢£¬²»¹ý×îºÃ×ñÑ­MFCµÄȱʡʵÏÖ¡£±ÈÈç´¦ÀíID_FILE_NEWÃüÁ×îºÃÓÉCWinAppµÄÅÉÉúÀà´¦Àí¡£

      ¡¡

      ±í5-5 ±ê×¼ÃüÁîÏûÏ¢´¦Àíº¯Êý

      ID

      º¯Êý

      ʵÏÖº¯ÊýµÄÀà

      ID_FILE_NEW

      OnFileNew

      CWinApp

      ID_FILE_OPEN

      OnFileOpen

      CWinApp

      ID_FILE_CLOSE

      OnFileClose

      CDocument

      ID_FILE_SAVE

      OnFileSave

      CDocument

      ID_FILE_SAVE_AS

      OnFileSaveAs

      CDocument

      ID_FILE_SAVE_COPY_AS

      OnFileSaveCopyAs

      COleServerDoc

      ID_FILE_UPDATE

      OnUpdateDocument

      COleServerDoc

      ID_FILE_PAGE_SETUP

      OnFilePrintSetup

      CWinApp

      תÏÂÒ³

      ¡¡

      Ðø±í

      ID_FILE_PRINT

      OnFilePrint

      CView

      ID_FILE_PRINT_PREVIEW

      OnFilePrintPreview

      CView

      ID_FILE_MRU_FILE1...FILE16

      OnUpdateRecentFileMenu

      CWinApp

      ID_EDIT_CLEAR

      CViewûÓÐʵÏÖ£¬

      ID_EDIT_CLEAR_ALL

      µ«ÊÇ£¬Èç¹ûÓÐʵÏÖ

      ID_EDIT_COPY

      º¯Êý£¬¾ÍÊÇÅÉÉúÀà

      ID_EDIT_CUT

      CEditViewµÄ

      ID_EDIT_FIND

      ʵÏÖº¯Êý

      ID_EDIT_PASTE_LINK

      ID_EDIT_PASTE_SPECIAL

      ID_EDIT_REPEAT

      ID_EDIT_REPLACE

      ID_EDIT_SELET_ALL

      ID_EDIT_UNDO

      ID_WINDOW_NEW

      OnWindowNew

      CMDIFrameWnd

      ID_WINDOW_ARRANGE

      OnMDIWindowCmd

      CMDIFrameWnd

      ID_WINDOW_CASCADE

      ID_WINDOW_TILE_HORZ

      ID_WINDOW_TILE_VERT

      ID_WINDOW_SPLIT

      CSplitterWnd

      ID_APP_ABOUT

      ID_APP_EXIT

      OnAppExit

      CWinApp

      ID_HELP_INDEX

      OnHelpIndex

      CWinApp

      ID_HELP_USING

      OnHelpUsing

      CWinApp

      ID_CONTEXT_HELP

      OnContextHelp

      CWinApp

      תÏÂÒ³

      ¡¡

      Ðø±í

      ID_HELP

      OnHelp

      CWinApp

      ID_DEFAULT_HELP

      OnHelpIndex

      CWinApp

      ID_NEXT_PANE

      OnNextPaneCmd

      CSplitterWnd

      ID_PREV_PANE

      OnNextPaneCmd

      CSplitterWnd

      ID_OLE_INSERT_NEW

      ID_OLE_EDIT_LINKS

      ID_OLE_VERB_FIRST...LAST

      ID_VIEW_TOOLBAR

      CFrameWnd

      ID_VIEW_STATUS_BAR

      CFrameWnd

      ID_INDICATOR_CAPS

      ID_INDICATOR_NUM

      ID_INDICATOR_SCRL

      ID_INDICATOR_KANA

      OnUpdateKeyIndicator

      CFrameWnd

      ¡¡

    3. MFC¶ÔÏóµÄ´´½¨¹ý³Ì

      Ó¦ÓóÌÐòʹÓÃMFCµÄ½Ó¿ÚÊǰÑһЩ×Ô¼ºµÄÌØÊâ´¦ÀíÌîÈëMFC¿ò¼Ü£¬ÕâЩ´¦Àí»òÕßÔÚÓ¦ÓóÌÐòÆô¶¯ºÍ³õʼ»¯µÄʱºò±»µ÷Ó㬻òÕßÔÚ³ÌÐòÆô¶¯Ö®ºóºÍÓû§½»»¥µÄ¹ý³ÌÖб»µ÷Ó㬻òÕßÔÚ³ÌÐòÍ˳öºÍ×÷ÇåÀí¹¤×÷µÄʱºò±»µ÷Óá£ÕâÈý¸ö½×¶ÎÖУ¬ºÍÓû§½»»¥½×¶ÎÊǸ÷¸ö³ÌÐò×Ô¼ºµÄÊÂÇ飬×ÔÈ»¶¼²»Ò»Ñù£¬µ«ÊdzÌÐòµÄÆô¶¯ºÍÍ˳öÁ½¸ö½×¶ÎÊÇMFC¿ò¼ÜËùʵÏֵģ¬ÊÇMFC¿ò¼ÜµÄÒ»²¿·Ö£¬¸÷¸ö³ÌÐò¶¼×ñѭͬÑùµÄ²½ÖèºÍ¹æÔò¡£ÏÔÈ»£¬Çå³þMFC¿ò¼Ü¶ÔÕâÁ½¸ö½×¶ÎµÄ´¦ÀíÊǺÜÓбØÒªµÄ£¬Ëü¿ÉÒÔ°ïÖúÉîÈëÀí½âMFC¿ò¼Ü£¬¸üºÃµØÊ¹ÓÃMFC¿ò¼Ü£¬¸üÓÐЧµØÊµÏÖÓ¦ÓóÌÐòÌØ¶¨µÄ´¦Àí¡£

      MFC³ÌÐòÆô¶¯ºÍ³õʼ»¯¹ý³Ì¾ÍÊÇ´´½¨MFC¶ÔÏóºÍWindows¶ÔÏó¡¢½¨Á¢¸÷ÖÖ¶ÔÏóÖ®¼äµÄ¹ØÏµ¡¢°Ñ´°¿ÚÏÔʾÔÚÆÁÄ»ÉϵĹý³Ì£¬Í˳ö¹ý³Ì¾ÍÊǹرմ°¿Ú¡¢Ïú»ÙËù´´½¨µÄWindows¶ÔÏóºÍMFC¶ÔÏóµÄ¹ý³Ì¡£ËùÒÔ£¬ÏÂÃæÒªÌÖÂÛ¼¸ÖÖ³£ÓÃMFC¶ÔÏóµÄ½á¹¹£¬ËüÃÇÊǹ¹³ÉÒ»¸öÎĵµ-ÊÓģʽӦÓóÌÐòµÄÖØÒª²¿¼þ¡£

      1. Ó¦ÓóÌÐòÖеäÐͶÔÏóµÄ½á¹¹

        ±¾½Ú½«Ö÷Òª·ÖÎöÓ¦ÓóÌÐò¶ÔÏó¡¢Îĵµ¶ÔÏó¡¢ÎĵµÄ£°åµÈµÄÊý¾Ý½á¹¹¡£Í¨¹ý¿¼²ìÀàµÄ½á¹¹£¬ÌرðÊdzÉÔ±±äÁ¿½á¹¹£¬ÅªÇåËüµÄ¹¦ÄÜ¡¢Ä¿µÄÒÔ¼°ºÍÆäËûÀàµÄ¹ØÏµ£»ÁíÍ⣬ÔÚºóÐøÓйطÖÎöÖбض¨»áÌáµ½ÕâЩ³ÉÔ±±äÁ¿£¬ÕâÀïÏÈ×÷¸ö˵Ã÷£¬µ½Ê±Ò²²»»áÏÔµÃͻأ¡£

        ÏÂÃæ¼¸½ÚÒÔ±í¸ñµÄÐÎʽÀ´ÃèÊö¸÷¸öÀàµÄ³ÉÔ±±äÁ¿¡£±í¸ñÖУ¬µÚÒ»Áдò¹³µÄ±íʾÊÇMFCÀà¿âÎĵµÓÐ˵Ã÷µÄ£»Ã»´ò¹³µÄÔÚÎĵµÖÐûÓÐ˵Ã÷£¬Èç¹ûÊÇpublic£¬Ôò¿ÉÒÔÖ±½Ó·ÃÎÊ£¬µ«Ëæ×ÅMFC°æ±¾µÄ±ä»¯£¬ÒÔºóMFC¿ÉÄܲ»Ö§³ÖÕâЩ³ÉÔ±£»µÚ¶þÁÐÊÇ·ÃÎÊÊôÐÔ£»µÚÈýÁÐÊdzÉÔ±±äÁ¿Ãû³Æ£»µÚËÄÁÐÊdzÉÔ±±äÁ¿µÄÊý¾ÝÀàÐÍ£»µÚÎåÁÐÊǶԳÉÔ±±äÁ¿µÄ¹¦ÄÜ¡¢ÓÃ;µÄ¼òÒªÃèÊö¡£

        1. Ó¦ÓóÌÐòÀàµÄ³ÉÔ±±äÁ¿

          Ó¦ÓóÌÐò¶ÔÏóµÄÊý¾Ý³ÉÔ±±íÓÉÁ½²¿·Ö×é³É£¬µÚÒ»²¿·ÖÊÇCWinThreadµÄ³ÉÔ±±äÁ¿£¬Èç±í5-6Ëùʾ£¬CWinApp¼Ì³ÐÁËCWinThreadµÄÊý¾Ý³ÉÔ±¡£µÚ¶þ²¿·ÖÊÇCWinApp×Ô¼º¶¨ÒåµÄ³ÉÔ±±äÁ¿£¬Èç±í5-7Ëùʾ¡£

          ±í5-6 CwinThreadµÄ³ÉÔ±±äÁ¿

          ¡¡

          ·ÃÎÊÏÞÖÆ

          ±äÁ¿Ãû³Æ

          ÀàÐÍ

          ½âÊÍ

          ¡Ì

          public

          m_bAutoDelete

          BOOL

          Ö¸¶¨Ï߳̽áÊøÊ±ÊÇ·ñÏú»ÙÏ̶߳ÔÏó±¾Éí

          ¡Ì

          public

          m_hThread

          HANDLE

          µ±Ç°Ï̵߳ľä±ú

          ¡Ì

          public

          m_nThreadID

          UINT

          µ±Ç°Ï̵߳ÄID

          ¡Ì

          public

          m_pMainWnd

          CWnd*

          Ö¸ÏòÓ¦ÓóÌÐòÖ÷´°¿ÚµÄÖ¸Õë

          ¡Ì

          public

          m_pActiveWnd

          CWnd*

          µ±OLE SERVER¾ÍµØ¼¤»îʱָÏò¿Í»§³ÌÐòÖ÷´°¿ÚµÄÖ¸Õë

          ¡¡

          public

          m_msgCur

          MSG

          µ±Ç°ÏûÏ¢(MSG½á¹¹)

          ¡¡

          public

          m_pThreadParams

          LPVOID

          ´«µÝ¸øÏ߳̿ªÊ¼º¯ÊýµÄ²ÎÊý

          ¡¡

          public

          m_pfnThreadProc

          º¯ÊýÖ¸Õë1

          Ï߳̿ªÊ¼º¯Êý£¬AFX_THREADPROCÀàÐÍ

          ¡¡

          public

          m_lpfnOleTermOrFreeLib

          º¯ÊýÖ¸Õë2

          OLEÓÃ;£¬void (AFXAPI * fn)(BOOL,BOOL)

          ¡¡

          public

          m_pMessageFilter

          Ö¸Õë

          OLEÏûÏ¢¹ýÂË£¬Ö¸ÏòCOleMessageFilter¶ÔÏó

          ¡¡

          protected

          m_ptCursorLast

          CPoint

          ×îÐÂÊó±êλÖÃ

          ¡¡

          protected

          m_nMsgLast

          UINT

          ÏûÏ¢¶ÓÁÐÖÐ×îнÓÊÕµ½µÄÏûÏ¢

          ¡¡

          ±í5-7 CWinAppµÄ³ÉÔ±±äÁ¿

          ¡¡

          ·ÃÎÊÏÞÖÆ

          ±äÁ¿Ãû³Æ

          ÀàÐÍ

          ½âÊÍ

          ¡Ì

          public

          m_pszAppName

          LPCTSTR

          Ó¦ÓóÌÐòÃû³Æ

          ¡Ì

          public

          m_hInstance

          HINSTANCE

          ±êÖ¾Ó¦ÓóÌÐòµ±Ç°ÊµÀý¾ä±ú

          ¡Ì

          public

          m_hPrevInstance

          HINSTANCE

          32λ³ÌÐòÉèΪ¿Õ

          ¡Ì

          public

          m_lpCmdLine

          LPTSTR

          Ö¸ÏòÓ¦ÓóÌÐòµÄÃüÁîÐÐ×Ö·û´®

          ¡Ì

          public

          m_nCmdShow

          int

          Ö¸¶¨´°¿Ú¿ªÊ¼µÄÏÔʾ·½Ê½

          ¡Ì

          public

          m_bHelpMode

          BOOL

          ±êʶÓû§ÊÇ·ñÔÚÉÏÏÂÎİïÖúģʽ

          ¡Ì

          public

          m_pszExeName

          LPCTSTR

          Ó¦ÓóÌÐòµÄÄ£¿éÃû

          ¡Ì

          public

          m_pszHelpFilePath

          LPCTSTR

          Ó¦ÓóÌÐòµÄ°ïÖúÎļþÃû£¬È±Ê¡Ê±Í¬Ä£¿éÃû

          ¡Ì

          public

          m_pszProfileName

          LPCTSTR

          Ó¦ÓóÌÐòµÄINIÎļþÃû£¬È±Ê¡Ê±Í¬Ó¦ÓóÌÐòÃû

          ¡Ì

          public

          m_pszRegistryKey

          LPCTSTR

          RegisterÈë¿Ú£¬Èç¹û²»Ö¸¶¨£¬Ê¹ÓÃINIÎļþ¡£

          ¡¡

          public

          m_pDocManager;

          CDocManager *

          Ö¸ÏòÒ»¸öÎĵµÄ£°å¹ÜÀíÆ÷

          ¡¡

          protected

          m_hDevMode

          HGLOBAL

          ´òÓ¡É豸ģʽ

          ¡¡

          protected

          m_hDevNames

          HGLOBAL

          ´òÓ¡É豸Ãû³Æ

          ¡¡

          protected

          m_dwPromptContext

          DWORD

          ±»MESSAGE BOX¸²¸ÇµÄ°ïÖúÉÏÏÂÎÄ

          ¡¡

          protected

          m_nWaitCursorCount

          int

          µÈ´ý¹â±ê¼ÆÊý

          ¡¡

          protected

          m_hcurWaitCursorRestore

          HCURSOR

          ±£´æµÄ¹â±ê£¬Ôڵȴý¹â±êÖ®ºó»Ö¸´

          ¡¡

          protected

          m_pRecentFileList

          Ö¸Õë

          Ö¸ÏòCRecentFileList¶ÔÏó£¬×î½ü´ò¿ªµÄÎļþÁбí

          ¡¡

          public

          m_atomApp

          ATOM

          DDEÓÃ;

          ¡¡

          public

          m_atomSystemTopic

          m_atomApp

          DDEÓÃ;

          ¡¡

          public

          m_nNumPreviewPages

          UINT

          ȱʡ±»´òÓ¡µÄÒ³Ãæ

          ¡¡

          public

          m_nSafetyPoolSize

          size_t

          ÀíÏë³ß´ç

          ¡¡

          public

          m_lpfnDaoTerm

          º¯ÊýÖ¸Õë

          DAO³õʼ»¯ÉèÖÃʱʹÓÃ

        2. CDocumentµÄ³ÉÔ±±äÁ¿

          ±í5-8 Îĵµ¶ÔÏóµÄÊôÐÔ¡£

          ¡¡

          ·ÃÎÊÏÞÖÆ

          ±äÁ¿Ãû³Æ

          ÀàÐÍ

          ½âÊÍ

          ¡¡

          protected

          m_strTitle

          CString

          Îĵµ±êÌâ

          ¡¡

          protected

          m_strPathName

          CString

          ÎĵµÂ·¾¶

          ¡¡

          protected

          m_pDocTemplate

          CDocTemplate*

          Ö¸ÏòÎĵµÄ£°åµÄÖ¸Õë

          ¡¡

          protected

          m_viewList

          CPtrList

          ¹ØÁªµÄÊÓ´°¿ÚÁбí

          ¡¡

          protected

          m_bModified

          BOOL

          ÎĵµÊÇ·ñÓб仯¡¢ÐèÒª´æÅÌ

          ¡¡

          public

          m_bAutoDelete

          BOOL

          ¹ØÁªÊÓ¶¼¹Ø±ÕʱÊÇ·ñɾ³ýÎĵµ¶ÔÏó

          ¡¡

          public

          m_bEmbedded

          BOOL

          ÎĵµÊÇ·ñÓÉOLE´´½¨

        3. ÎĵµÄ£°åµÄÊôÐÔ

        ±í5-9ÁгöÁËÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿£¬5-10ÁгöÁ˵¥ÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿£¬5-11ÁгöÁ˶àÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿¡£µ¥¡¢¶àÎĵµÄ£°å¼Ì³ÐÁËÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿¡£

        ±í5-9 ÎĵµÄ£°åµÄÊý¾Ý³ÉÔ±

        ¡¡

        ·ÃÎÊÏÞÖÆ

        ±äÁ¿Ãû³Æ

        ÀàÐÍ

        ½âÊÍ

        ¡¡

        public

        m_bAutoDelete

        BOOL

        ¡¡
        ¡¡

        public

        m_pAttachedFactory

        CObject *

        ¡¡
        ¡¡

        public

        m_hMenuInPlace

        HMENU

        ¾ÍµØ¼¤»îʱ£¬OLE¿Í»§³ÌÐòµÄ²Ëµ¥

        ¡¡

        public

        m_hAccelInPlace

        HACCEL

        ¾ÍµØ¼¤»îʱ£¬OLE¿Í»§³ÌÐòµÄ¿ì½Ý¼ü

        ¡¡

        public

        m_hMenuEmbedding

        HMENU

        ¡¡
        ¡¡

        public

        m_hAccelEmbedding

        HACCEL

        ¡¡
        ¡¡

        public

        m_hMenuInPlaceServer

        HMENU

        ¡¡
        ¡¡

        public

        m_hAccelInPlaceServer

        HACCEL

        ¡¡
        ¡¡

        protected

        m_nIDResource

        UINT

        ¿ò¼Ü¡¢²Ëµ¥¡¢¿ì½Ý¼üµÈµÄ×ÊÔ´ID

        ¡¡

        protected

        m_nIDServerResource

        UINT

        ¡¡
        ¡¡

        public

        m_nIDEmbeddingResource

        UINT

        ¡¡
        ¡¡

        public

        m_nIDContainerResource

        UINT

        ¡¡
        ¡¡

        public

        m_pDocClass

        CRuntimeClass*

        Ö¸ÏòÎĵµÀàµÄ¶¯Ì¬´´½¨ÐÅÏ¢

        ¡¡

        public

        m_pFrameClass

        CRuntimeClass*

        Ö¸Ïò¿ò¼ÜÀàµÄ¶¯Ì¬´´½¨ÐÅÏ¢

        ¡¡

        public

        m_pViewClass

        CRuntimeClass*

        Ö¸ÏòÊÓÀàµÄ¶¯Ì¬´´½¨ÐÅÏ¢£¬ÓÉ×Ö·û´®m_nIDResourceÃèÊö

        ¡¡

        public

        m_pOleFrameClass

        CRuntimeClass*

        Ö¸ÏòOLD¿ò¼ÜÀàµÄ¶¯Ì¬´´½¨ÐÅÏ¢

        ¡¡

        public

        m_pOleViewClass

        CRuntimeClass*

        ¡¡
        ¡¡

        public

        m_strDocStrings

        CString

        ÃèÊö¸ÃÎĵµÀàÐ͵Ä×Ö·û´®

        ±í5-10 µ¥ÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿

        ¡¡

        ·ÃÎÊÏÞÖÆ

        ±äÁ¿Ãû³Æ

        ÀàÐÍ

        ½âÊÍ

        ¡¡

        protected

        m_pOnlyDoc

        CDocment*

        Ö¸ÏòΨһµÄÎĵµ¶ÔÏó

        ±í5-11 µ¥ÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿

        ¡¡

        ·ÃÎÊÏÞÖÆ

        ±äÁ¿Ãû³Æ

        ÀàÐÍ

        ½âÊÍ

        ¡¡

        public

        m_hMenuShared

        HMENU

        ¸ÃÄ£°åµÄMDI×Ó´°¿ÚµÄ²Ëµ¥

        ¡¡

        public

        m_hAccelTable

        HACCEL

        ¸ÃÄ£°åµÄMDI×Ó´°¿ÚµÄ¿ì½Ý¼ü

        ¡¡

        protected

        m_docList

        CPtrList

        ¸ÃÄ£°åµÄÎĵµÁбí

        ¡¡

        protected

        m_nUntitledCount

        UINT

        ÓÃÀ´Éú³ÉÎļþÃûµÄÊý×Ö£¬È硱untitled0¡±µÄ0¡£

      2. WinMainÈë¿Úº¯Êý

        1. WinMainÁ÷³Ì

          ÏÖÔÚÌÖÂÛMFCÓ¦ÓóÌÐòÈçºÎÆô¶¯¡£

          WinMainº¯ÊýÊÇMFCÌṩµÄÓ¦ÓóÌÐòÈë¿Ú¡£½øÈëWinMainǰ£¬È«¾ÖÓ¦ÓóÌÐò¶ÔÏóÒѾ­Éú³É¡£WinMainÁ÷³ÌÈçͼ5-3Ëùʾ¡£Í¼ÖУ¬»ÒÉ«¿òÊǶԱ»µ÷ÓõÄÐéÄ⺯ÊýµÄ×¢ÊÍ£¬³ÌÐòÔ±¿ÉÒÔ»ò±ØÐ븲¸ÇËüÒÔʵÏÖMFCÒªÇóµÄ»òÓû§Ï£ÍûµÄ¹¦ÄÜ£»´óÀ¨ºÅËù°üº¬µÄͼʾÊÇÏàÓ¦º¯ÊýÁ÷³ÌµÄϸ»¯£¬ÓÐÓ¦ÓóÌÐò¶ÔÏóAppµÄ³õʼ»¯¡¢Runº¯ÊýµÄʵÏÖ¡¢PumpMessageµÄÁ÷³Ì£¬µÈµÈ¡£

          ´ÓͼÖпÉÒÔ¿´³ö£º

          £¨1£©Ò»Ð©ÐéÄ⺯Êý±»µ÷ÓõÄʱ»ú

          ¶ÔÓ¦ÓóÌÐòÀࣨÏß³ÌÀࣩµÄInitIntance¡¢ExitInstance¡¢Run¡¢ProcessMessageFilter¡¢OnIdle¡¢PreTranslateMessageÀ´Ëµ£¬InitInstanceÔÚÓ¦ÓóÌÐò³õʼ»¯Ê±µ÷Óã¬ExitInstanceÔÚ³ÌÐòÍ˳öʱµ÷Óã¬RunÔÚ³ÌÐò³õʼ»¯Ö®ºóµ÷Óõ¼Ö³ÌÐò½øÈëÏûϢѭ»·£¬ProcessMessageFilter¡¢OnIdle¡¢PreTranslateMessageÔÚÏûϢѭ»·Ê±±»µ÷Ó㬷ֱðÓÃÀ´¹ýÂËÏûÏ¢¡¢½øÐÐIdle´¦Àí¡¢Èô°¿ÚÔ¤´¦ÀíÏûÏ¢¡£

          £¨2£©Ó¦ÓóÌÐò¶ÔÏóµÄ½ÇÉ«

          Ê×ÏÈ£¬Ó¦ÓóÌÐò¶ÔÏóµÄ³ÉÔ±º¯ÊýInitInstance±»WinMainµ÷Ó᣶ԳÌÐòÔ±À´Ëµ£¬Ëü¾ÍÊdzÌÐòµÄÈë¿Úµã£¨ÕæÕýµÄÈë¿ÚµãÊÇWinMain£¬µ«MFCÏò³ÌÐòÔ±Òþ²ØÁËWinMainµÄ´æÔÚ£©¡£ÓÉÓÚMFCûÓÐÌṩInitInstanceµÄȱʡʵÏÖ£¬Óû§±ØÐë×Ô¼ºÊµÏÖËü¡£ÉÔºó½«ÌÖÂ۸ú¯ÊýµÄʵÏÖ¡£

          Æä´Î£¬Í¨¹ýÓ¦ÓóÌÐò¶ÔÏóµÄRunº¯Êý£¬³ÌÐò½øÈëÏûϢѭ»·¡£Êµ¼ÊÉÏ£¬ÏûϢѭ»·µÄʵÏÖÊÇͨ¹ýCWinThread::RunÀ´ÊµÏֵģ¬Í¼ÖÐËùʾµÄÊÇCWinThread::RunµÄʵÏÖ£¬ÒòΪCWinAppûÓи²¸ÇRunµÄʵÏÖ£¬³ÌÐòÔ±µÄÓ¦ÓóÌÐòÀàÒ»°ãÒ²²»Óø²¸Ç¸Ãº¯Êý¡£

          £¨3£©RunËùʵÏÖµÄÏûϢѭ»·

          Ëüµ÷ÓÃPumpMessageÀ´ÊµÏÖÏûϢѭ»·£¬Èç¹ûûÏûÏ¢£¬Ôò½øÐпÕÏÐ(Idle)´¦Àí¡£Èç¹ûÊÇWM_QUITÏûÏ¢£¬Ôòµ÷ÓÃExitInstanceºóÍ˳öÏûϢѭ»·¡£

          £¨4£©CWinThread::PumpMessage

          ¸Ãº¯ÊýÔÚMFCº¯ÊýÎĵµÀïûÓÐÃèÊö£¬µ«ÊÇMFC½¨ÒéÓû§Ê¹Óá£ËüʵÏÖ»ñÈ¡ÏûÏ¢£¬×ª»»(Translate)ÏûÏ¢£¬·¢ËÍÏûÏ¢µÄÏûϢѭ»·¡£ÔÚת»»ÏûϢ֮ǰ£¬µ÷ÓÃÐéÄ⺯ÊýPreTranslateMessage¶ÔÏûÏ¢½øÐÐÔ¤´¦Àí£¬¸Ãº¯ÊýµÃµ½ÏûϢĿµÄ´°¿Ú¶ÔÏóÖ®ºó£¬Ê¹ÓÃCWndµÄWalkPreTranslateTreeÈÃÄ¿µÄ´°¿Ú¼°ÆäËùÓи¸´°¿ÚµÃµ½Ò»¸öÔ¤´¦Àíµ±Ç°ÏûÏ¢µÄ»ú»á¡£¹ØÓÚÏûÏ¢Ô¤´¦Àí£¬¼ûÏûÏ¢Ó³ÉäµÄÓйØÕ½ڡ£Èç¹ûÊÇWM_QUITÏûÏ¢£¬PumpMessage·µ»ØFALSE£»·ñÔò·µ»ØTRUE¡£

        2. MFC¿ÕÏд¦Àí

    MFCʵÏÖÁËÒ»¸öIdle´¦Àí»úÖÆ£¬¾ÍÊÇÔÚûÓÐÏûÏ¢¿ÉÒÔ´¦Àíʱ£¬½øÐÐIdle´¦Àí¡£Idle´¦ÀíµÄÒ»¸öÓ¦ÓÃÊǸüÐÂÓû§½Ó¿Ú¶ÔÏóµÄ״̬¡£¸üÐÂÓû§½Ó¿Ú״̬µÄÄÚÈݼûÏûÏ¢Ó³ÉäµÄÕ½ڡ£

    1. ¿ÕÏд¦ÀíÓɺ¯ÊýOnIdleÍê³É£¬ÆäÔ­ÐÍΪBOOL OnIdle£¨int£©¡£²ÎÊýµÄº¬ÒåÊǵ±Ç°¿ÕÏд¦ÀíÖÜÆÚÒѾ­Íê³ÉÁ˶àÉÙ´ÎOnIdleµ÷Óã¬Ã¿¸ö¿ÕÏд¦ÀíÖÜÆÚµÄµÚÒ»´Îµ÷Ó㬸òÎÊýÉèΪ0£¬Ã¿µ÷ÓÃÒ»´Î¼Ó1£»·µ»ØÖµ±íʾµ±Ç°¿ÕÏд¦ÀíÖÜÆÚÊÇ·ñ¼ÌÐøµ÷ÓÃOnIdle¡£

    2. MFCµÄȱʡʵÏÖÀCWinThread::OnIdleÍê³ÉÁ˹¤¾ßÀ¸µÈµÄ״̬¸üС£Èç¹û¸²¸ÇOnIdle£¬ÐèÒªµ÷ÓûùÀàµÄʵÏÖ¡£

    3. ÔÚ´¦ÀíÍêÒ»¸öÏûÏ¢»ò½øÈëÏûϢѭ»·Ê±£¬Èç¹ûÏûÏ¢¶ÓÁÐÖÐûÓÐÏûÏ¢Òª´¦Àí£¬ÔòMFC¿ªÊ¼Ò»¸öеĿÕÏд¦ÀíÖÜÆÚ£»

    4. µ±OnIdle·µ»ØFASLE£¬»òÕßÏûÏ¢¶ÓÁÐÖÐÓÐÏûÏ¢Òª´¦Àíʱ£¬µ±Ç°µÄ¿ÕÏд¦ÀíÖÜÆÚ½áÊø¡£

    ´Óͼ5-3ÖÐRunµÄÁ÷³ÌÉÏ¿ÉÒÔÇå³þµÄ¿´µ½MFC¿ÕÏд¦ÀíµÄÇé¿ö¡£

    ±¾½ÚÃèÊöÁËÓ¦ÓóÌÐò´ÓInitInstance¿ªÊ¼³õʼ»¯¡¢´ÓRun½øÈëÏûϢѭ»·µÄ¹ý³Ì£¬ÏÂÃæ½«¾ÍSDIÓ¦ÓóÌÐòµÄÀý×ÓÃèÊö¸Ã¹ý³ÌÖд´½¨¸÷¸öËùÐèMFC¶ÔÏóµÄÁ÷³Ì¡£

        1. SDIÓ¦ÓóÌÐòµÄ¶ÔÏó´´½¨

          Èçǰһ½ÚËùÊö£¬³ÌÐò´ÓInitInstance¿ªÊ¼¡£ÔÚSDIÓ¦ÓóÌÐòµÄInitInstanceÀÖÁÉÙÓÐÒÔÏÂÓï¾ä£º

          //µÚÒ»²¿·Ö£¬´´½¨ÎĵµÄ£°å¶ÔÏó²¢°ÑËüÌí¼Óµ½Ó¦ÓóÌÐòµÄÄ£°åÁ´±í

          CSingleDocTemplate* pDocTemplate;

          pDocTemplate = new CSingleDocTemplate(

          IDR_MAINFRAME,

          RUNTIME_CLASS(CTDoc),

          RUNTIME_CLASS(CMainFrame), // main SDI frame window

          RUNTIME_CLASS(CTView));

          AddDocTemplate(pDocTemplate);

          //µÚ¶þ²¿·Ö£¬¶¯Ì¬´´½¨Îĵµ¡¢ÊÓ¡¢±ß¿ò´°¿ÚµÈMFC¶ÔÏóºÍ¶ÔÓ¦µÄWindows¶ÔÏó

          //Parse command line for standard shell commands, DDE, file open

          CCommandLineInfo cmdInfo;

          ParseCommandLine(cmdInfo);

          // Dispatch commands specified on the command line

          if (!ProcessShellCommand(cmdInfo))

          return FALSE;

          //µÚÈý²¿·Ö£¬·µ»ØTRUE£¬WinMainÏÂÒ»²½µ÷ÓÃRun¿ªÊ¼ÏûϢѭ»·£¬

          //·ñÔò£¬ÖÕÖ¹³ÌÐò

          return TRUE;

          ¶ÔÓÚµÚ¶þ²¿·Ö£¬ÓÖ¿ÉÒÔ·Ö½â³ÉÐí¶à²½Öè¡£

          ÏÂÃæ½«½âÊÍÿһ²½¡£

          1. ÎĵµÄ£°åµÄ´´½¨

            µÚÒ»²½ÊÇ´´½¨ÎĵµÄ£°å¡£

            ÎĵµÄ£°åµÄ×÷ÓÃÊǶ¯Ì¬´´½¨ÆäËûMFC¶ÔÏó£¬Ëü±£´æÁËÒª¶¯Ì¬´´½¨ÀàµÄ¶¯Ì¬´´½¨ÐÅÏ¢ºÍ¸ÃÎĵµÀàÐ͵Ä×ÊÔ´ID¡£ÕâЩÐÅÏ¢±£´æÔÚÎĵµÄ£°åµÄ³ÉÔ±±äÁ¿Àm_nIDResource(×ÊÔ´ID)¡¢m_pDocClass(ÎĵµÀද̬´´½¨ÐÅÏ¢)¡¢m_pFrameClass(±ß¿ò´°¿ÚÀද̬´´½¨ÐÅÏ¢)¡¢m_pViewClass(ÊÓÀද̬´´½¨ÐÅÏ¢)¡£

            ×ÊÔ´ID°üÀ¨²Ëµ¥¡¢Ïñ±ê¡¢¿ì½Ý¼ü¡¢×Ö·û´®×ÊÔ´µÄID£¬ËüÃǶ¼Ê¹ÓÃͬһ¸öIDÖµ£¬ÈçIDR_MAINFRAME¡£ÆäÖУ¬×Ö·û´®×ÊÔ´ÃèÊöÁËÎĵµÀàÐÍ£¬Óɯߏö±»¡°\n¡±·Ö¸ôµÄ×Ó×Ö·û´®×é³É£¬¸÷¸ö×Ó´®¿ÉÒÔͨ¹ýCDocTemplateµÄ³ÉÔ±º¯ÊýGetDocString(CString& rString, enum DocStringIndex index)À´»ñÈ¡¡£DocStringIndexÊÇCDocTemplateÀඨÒåµÄö¾Ù±äÁ¿ÒÔÇø·ÖÆß¸ö×Ó´®£¬ÃèÊöÈçÏ£¨Ó¢ÎÄÊÇö¾Ù±äÁ¿Ãû³Æ£©¡£

            WindowTitle Ó¦ÓóÌÐò´°¿ÚµÄ±êÌâ¡£½ö½ö¶ÔSDI³ÌÐòÖ¸¶¨¡£

            DocName ÓÃÀ´¹¹ÔìȱʡÎĵµÃûµÄ×Ö·û´®¡£µ±ÓÃFile²Ëµ¥µÄ²Ëµ¥Ïînew´´½¨ÐÂÎĵµÊ±£¬È±Ê¡ÎĵµÃûÓɸÃ×Ö·û´®¼ÓÒ»¸öÊý×Ö¹¹³É¡£Èç¹û¿Õ£¬Ê¹Óá°unitled¡±¡£

            FileNewName ÎĵµÀàÐ͵ÄÃû³Æ£¬ÔÚ´ò¿ªFile New¶Ô»°¿òʱÏÔʾ¡£

            FilterName Æ¥Åä¹ýÂË×Ö·û´®£¬ÔÚFile Open¶Ô»°¿òÓÃÀ´¹ýÂËÒªÏÔʾµÄÎļþ¡£Èç¹û²»Ö¸¶¨£¬File Open¶Ô»°¿òµÄÎļþÀàÐÍ(file style)²»¿É·ÃÎÊ¡£

            FilterExt ¸ÃÀàÐÍÎĵµµÄÀ©Õ¹Ãû¡£Èç¹û²»Ö¸¶¨£¬Ôò²»¿É·ÃÎʶԻ°¿òµÄÎļþÀàÐÍ(File Style)¡£

            RegFileTypeId ÎĵµÀàÐÍÔÚWindows ×¢²á¿âÖеĴ洢±êʶ¡£

            RegFileTypeName ÎĵµÀàÐÍÔÚWindows ×¢²á¿âÖеÄÀàÐÍÃû³Æ¡£

            ÎĵµÄ£°å±»Ó¦ÓóÌÐò¶ÔÏó´´½¨ºÍ¹ÜÀí¡£Ó¦ÓóÌÐòÀàCWinAppÓÐÒ»¸öCDocManagerÀàÐ͵ijÉÔ±±äÁ¿m_pDocManager£¬Í¨¹ý¸Ã±äÁ¿À´¹ÜÀíÓ¦ÓóÌÐòµÄÎĵµÄ£°åÁÐ±í£¬°ÑһЩÏà¹ØµÄ²Ù×÷ίÅɸøCDocManager¶ÔÏó´¦Àí¡£

            CDocManagerʹÓÃCPtrListÀàÐ͵Äm_templateList±äÁ¿À´´æ´¢ÎĵµÄ£°å£¬²¢ÌṩÁ˲Ù×÷ÎĵµÄ£°åÁбíµÄϵÁк¯Êý¡£

            ´ÓÓï¾äpDocTemplate = new CSingleDocTemplate(¡­)¿ÉÒÔ¿´³öÓ¦ÓóÌÐò¶ÔÏó´´½¨Ä£°åʱ´«µÝÒ»¸ö×ÊÔ´IDºÍÈý¸öÀàµÄ¶¯Ì¬´´½¨ÐÅÏ¢¸øËü£º

            IDR_MAINFRAME£¬×ÊÔ´ID

            RUNTIME_CLASS(CTDoc)£¬ÎĵµÀද̬´´½¨ÐÅÏ¢

            RUNTIME_CLASS(CMainFrame),±ß¿ò´°¿ÚÀද̬´´½¨ÐÅÏ¢

            RUNTIME_CLASS(CTView)£¬ÊÓÀද̬´´½¨ÐÅÏ¢

            ÎĵµÄ£°å¶ÔÏó½ÓÊÕÕâЩÐÅÏ¢²¢°ÑËüÃDZ£´æµ½¶ÔÓ¦µÄ³ÉÔ±±äÁ¿ÀïÍ·¡£È»ºóAddDocTemplateʵ¼Êµ÷ÓÃm_pDocManager->AddDocTemplate£¬°Ñ´´½¨µÄÄ£°å¶ÔÏó¼ÓÈëµ½ÎĵµÄ£°å¹ÜÀíÆ÷µÄÄ£°åÁбíÖУ¬Ò²¾ÍÊÇÓ¦ÓóÌÐò¶ÔÏóµÄÎĵµÄ£°åÁбíÖС£

          2. ÎļþµÄ´´½¨»òÕß´ò¿ª

    µÚ¶þ²½ÊÇ´´½¨»òÕß´ò¿ªÎļþ¡£

    ¶ÔÓÚSDI³ÌÐò£¬MFC¶ÔÏóµÄ¶¯Ì¬´´½¨¹ý³ÌÊÇÔÚ´´½¨»òÕß´ò¿ªÎļþÖз¢ÉúµÄ¡£µ«ÊÇΪʲôûÓп´µ½Îļþ²Ù×÷Ïà¹ØµÄÓï¾äÄØ£¿

    1. CCommandLineInfo

      Ê×ÏÈ£¬ÐèҪŪÇå³þÀàCcommandLineInfo£¬ËüÊÇÓÃÀ´´¦ÀíÃüÁîÐÐÐÅÏ¢µÄÀ࣬CWinApp::PareCommandLineµ÷ÓÃCCommandLineInfoµÄ³ÉÔ±º¯ÊýParseParm·ÖÎöÆô¶¯³ÌÐòʱµÄ²ÎÊý£¬°Ñ·ÖÎö½á¹û±£´æÔÚCCommandLineInfo¶ÔÏóµÄ³ÉÔ±±äÁ¿Àï¡£CCommandLineInfoµÄ¶¨ÒåÈçÏ£º

      class CCommandLineInfo : public CObject

      {

      BOOL m_bShowSplash;

      BOOL m_bRunEmbedded;

      BOOL m_bRunAutomated;

      enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE,

      AppUnregister, FileNothing = -1 } m_nShellCommand;

      // not valid for FileNew

      CString m_strFileName;

      // valid only for FilePrintTo

      CString m_strPrinterName;

      CString m_strDriverName;

      CString m_strPortName;

      };

      ÓÉÉÏÊö¶¨Òå¿ÉÒÔ¿´³ö£¬·ÖÎö½á¹û·Ö¼¸ÀࣺÊÇ·ñOLE¼¤»î£»Ó¦¸ÃÖ´ÐÐʲô¶¯×÷£¨FileNew¡¢FileOpenµÈ£©£»´«µÝµÄ²ÎÊý£¨´ò¿ª»ò´òÓ¡µÄÎļþÃû£¬´òÓ¡É豸¡¢¶Ë¿ÚµÈ£©¡£

      µ±ÃüÁîÐпÕʱ£¬Ö´ÐÐFileNewÃüÁî¡£Ô­ÒòÔÚÓÚCCommandLineInfoµÄȱʡ¹¹Ô캯Êý£º

      CCommandLineInfo::CCommandLineInfo()

      {

      m_bShowSplash = TRUE;

      m_bRunEmbedded = FALSE;

      m_bRunAutomated = FALSE;

      m_nShellCommand = FileNew;//Ö¸¶¨ÁËSHELLÃüÁî²Ù×÷

      }

      ȱʡ¹¹Ôì°ÑÓ¦¸ÃÖ´Ðе͝×÷Ö¸¶¨ÎªFileNew¡£

    2. ´¦ÀíÃüÁîÐÐÃüÁî

      Æä´Î£¬·ÖÎö CWinApp::ProcessShellCommand(CCommandLineInfo& rCmdInfo)µÄÁ÷³Ì£¬Ëü´¦ÀíÃüÁîÐеÄÃüÁÁ÷³ÌÈçͼ5-3Ëùʾ¡£

      ͼ5-4µÚÈý²ã±íʾ¸ù¾ÝÃüÁîÀàÐͽøÒ»²½µ÷Óõĺ¯Êý£¬¶¼ÊÇCWinApp»òÕßÅÉÉúÀàµÄ³ÉÔ±º¯Êý¡£¶ÔÓÚFILEDDEÀàÐÍûÓнøÒ»²½µÄµ÷Óá£

      ÃüÁîÀàÐÍÊÇFILENEWʱ£¬µ÷Óõĺ¯Êý¾ÍÊDZê×¼ÃüÁîID_FILE_NEW¶ÔÓ¦µÄ´¦Àíº¯ÊýOnFileNew£»ÃüÁîÀàÐÍÊÇFILEOPENʱµ÷Óõĺ¯ÊýÊÇOpenDocumentFile£¬±ê×¼ÃüÁîID_FILE_OPENµÄ´¦Àíº¯ÊýOnFileOpenµÄ¹¤×÷ʵ¼ÊÉϾÍÊÇÓÉOpenDocumentFileÍê³ÉµÄ¡£º¯ÊýFileNew¡¢OpenDocumentFileµ¼ÖÂÁË´°¿Ú¡¢ÎĵµµÄ´´½¨¡£

    3. OnFileNew

      ½Ó×Å£¬·ÖÎö CWinApp::OnFileNewÁ÷³Ì£¬Èçͼ5-5Ëùʾ¡£

      ͼ5-5µÄ˵Ã÷£º

      Ó¦ÓóÌÐò¶ÔÏóµÃµ½ÎĵµÄ£°å¹ÜÀíÆ÷Ö¸Õ룬µ÷ÓÃÎĵµÄ£°å¹ÜÀíÆ÷µÄ³ÉÔ±º¯ÊýOnFileNew(m_pDocManager->OnFileNew())£»Ä£°å¹ÜÀíÆ÷»ñÈ¡ÎĵµÄ£°å¶ÔÏóÖ¸Õ룬µ÷ÓÃÎĵµÄ£°å¶ÔÏóµÄOpenDocumentFile º¯Êý£¨pTemplate->OpenDocumentFile(NULL)£©¡£Èç¹ûÄ£°å¹ÜÀíÆ÷·¢ÏÖÓжà¸öÎĵµÄ£°å£¬¾Íµ¯³öÒ»¸ö¶Ô»°¿òÈÃÓû§Ñ¡ÔñÎĵµÄ£°å¡£ÕâÀïºÍºóÃæµÄͼ½âÖÐÀàËÆÓÚCWinApp::¡¢CDocManager::¡¢CDocTemplate::µÈµÄº¯ÊýÀàÊôÏÞÖÆ²¢²»±íʾֱ½ÓÔ´ÂëÖÐÓÐÕâÑùµÄÏÞÖÆ£¬¶øÊÇͨ¹ýÖ¸Õë»òÕßÖ¸ÕëµÄ¶¯Ì¬Ô¼Êø¿ÉÒÔÈ϶¨µ÷ÓÃÁËij¸öÀàµÄ³ÉÔ±º¯Êý£¬ÆäÕýÈ·ÐÔ½ö½öÏÞÓÚ±¾Êéͼ½âµÄMFCµÄȱʡʵÏÖ¡£

      Èçͼ5-5Ëùʾ£¬³ÌÐòÔ±¿ÉÒÔ¸²¸ÇÓйØÐéÄ⺯Êý»òÃüÁî´¦Àíº¯Êý£ºÈç¹û³ÌÐòÔ±ÔÚ×Ô¼ºµÄÓ¦ÓóÌÐòÀàÖи²¸ÇÁËOnFileNew£¬Ôò¿ÉÒÔʵÏÖÍêÈ«²»Í¬µÄ´¦ÀíÁ÷³Ì£»Ò»°ãÇé¿öÏ£¬²»»á´ÓÎĵµÄ£°åÀàÅÉÉúÐÂÀ࣬Èç¹ûÅÉÉúµÄ»°£¬¿ÉÒÔ¸²¸ÇCDocTemplateµÄÐéÄ⺯Êý¡£

    4. OnFileOpen

      ·ÖÎöÁË OnFileNewºó£¬ÏÖÔÚ·ÖÎöCWinApp::OnFileOpen()£¬ÆäÁ÷³ÌÈçͼ5-6Ëùʾ¡£

      CWinApp::OnFileOpenºÍOnFileNewÀàËÆ£¬²»¹ý£¬µÚ¶þ²½ÐëµÃµ½Ò»¸öÒª´ò¿ªµÄÎļþµÄÃû³Æ£¬µÚÈý²½µ÷ÓõÄÊÇÓ¦ÓóÌÐò¶ÔÏóµÄOpenDocumentFile£¬¶ø²»ÊÇÎĵµÄ£°å¶ÔÏóµÄ¸Ãº¯Êý¡£

    5. Ó¦ÓóÌÐò¶ÔÏóµÄOpenDocumentFile

      ·ÖÎöÓ¦ÓóÌÐòµÄ´ò¿ªÎĵµº¯Êý£º CWinApp::OpenDocumentFile(LPCSTR name)£¬ÆäÁ÷³ÌÈçͼ5-7Ëùʾ¡£

      ¡¡

      Ó¦ÓóÌÐò¶ÔÏó°Ñ´ò¿ªÎļþ²Ù×÷ίÍиøÎĵµÄ£°å¹ÜÀíÆ÷£¬ºóÕßÓÖίÍиøÎĵµÄ£°å¶ÔÏóÀ´Ö´ÐС£Èç¹ûÊÇSDI³ÌÐò£¬ÔòίÍиøµ¥Îĵµ¶ÔÏó£»Èç¹ûÊÇMDI³ÌÐò£¬ÔòίÍиø¶àÎĵµ¶ÔÏ󩤩¤ÕâÊÇÓÉÖ¸ÕëËùÖ¸¶ÔÏóµÄʵ¼ÊÀàÐ;ö¶¨µÄ£¬ÒòΪ¸Ãº¯ÊýÊÇÒ»¸öÐéÄ⺯Êý¡£

    6. ÎĵµÄ£°åµÄOpenDocumentFile

      ²»ÂÛÊÇFileNew»¹ÊÇFileOpen£¬×îºóµÄ²Ù×÷¶¼¹é½áµ½ÓÉÎĵµÄ£°åÀ´´ò¿ªÎļþ£¨ÎļþÃû¿ÕÔò´´½¨Îļþ£©¡£

      CSingleDocTemplate::OpenDocumentFile(lpcstr name£¬BOOL visible)µÄÁ÷³Ì¼ûͼ5-8¡£ÓÐÒ»µãÐèÒªÖ¸³öµÄÊÇ£º´´½¨ÁËÒ»¸öÎĵµ¶ÔÏ󣬲¢²»µÈÓÚ´ò¿ªÁËÒ»¸öÎĵµ(¼þ)»òÕß´´½¨ÁËÒ»¸öÐÂÎĵµ(¼þ)¡£

      ͼ5-8ÏÔʾµÄÁ÷³Ì´óÖ¿ÉÒÔÃèÊöÈçÏ£º

      Èç¹ûÒѾ­ÓÐÎĵµ´ò¿ª£¬Ôò±£´æµ±Ç°µÄÎĵµ£»·ñÔò£¬Îĵµ¶ÔÏó»¹Ã»Óд´½¨£¬ÐèÒª´´½¨Ò»¸öеÄÎĵµ¶ÔÏó¡£ÒòΪÕâʱ±ß¿ò´°¿Ú»¹Ã»ÓÐÉú³É£¬ËùÒÔ»¹Òª´´½¨±ß¿ò´°¿Ú¶ÔÏó£¨MFC¶ÔÏ󣩺ͱ߿ò´°¿Ú¡£MFC±ß¿ò´°¿Ú¶ÔÏó¶¯Ì¬´´½¨£¬HWND±ß¿ò´°¿ÚÓÉLoadFrame´´½¨¡£MFC±ß¿ò´°¿Ú±»´´½¨Ê±£¬CFrameWndµÄȱʡ¹¹Ô캯Êý±»µ÷Óã¬Ëü°ÑÕý´´½¨µÄ¶ÔÏó(thisËùÖ¸)¼ÓÈ뵽ģ¿é-Ïß³Ì״̬µÄ±ß¿ò´°¿ÚÁбím_frameListÖ®Êס£

      ±ß¿ò´°¿Ú´´½¨¹ý³ÌÖÐÓÉCreateView¶¯Ì¬´´½¨MFCÊÓ¶ÔÏóºÍHWNDÊÓ´°¿Ú¡£

      ½Ó×Å£¬Èç¹ûûÓÐÖ¸¶¨Òª´ò¿ªµÄÎļþÃû£¬Ôò´´½¨Ò»¸öеÄÎļþ£»·ñÔò£¬Ôò´ò¿ªÎļþ£¬²¢Ê¹ÓÃÐòÁл¯»úÖÆ¶ÁÈëÎļþÄÚÈÝ¡£

      ͨ¹ýÉÏÊö¹ý³Ì£¬¶¯Ì¬µØ´´½¨ÁËMFC±ß¿ò´°¿Ú¶ÔÏó¡¢ÊÓ¶ÔÏó¡¢Îĵµ¶ÔÏóÒÔ¼°¶ÔÓ¦µÄWindows¶ÔÏ󣬲¢ÌîдÁËÓйضÔÏóµÄ³ÉÔ±±äÁ¿£¬½¨Á¢ÆðÕâЩMFC¶ÔÏóµÄ¹ØÏµ¡£

    7. ´ò¿ªÎļþ¹ý³ÌÖÐËùÉæ¼°µÄÏûÏ¢´¦Àíº¯ÊýºÍÐéÄ⺯Êý

    ͼ5-8ÃèÊöµÄÕû¸ö¹ý³ÌÖÐϵÁÐÏûÏ¢´¦Àíº¯ÊýºÍÐéÄ⺯Êý±»µ÷Óá£ÀýÈ磺ÔÚWindwos±ß¿ò´°¿ÚºÍÊÓ´°¿Ú±»´´½¨Ê±»á²úÉúWM_CREATEµÈÏûÏ¢£¬µ¼ÖÂOnCreateµÈÏûÏ¢´¦Àíº¯ÊýµÄµ÷Óã¬CFrameWndºÍCView¶¼¸²¸ÇÁ˸ú¯Êý£¬ËùÒÔÔڱ߿ò´°¿ÚºÍÊÓ´°¿ÚµÄ´´½¨ÖУ¬Í¬ÑùµÄÏûÏ¢µ÷ÓÃÁ˲»Í¬µÄ´¦Àíº¯ÊýCFrameWnd::OnCreateºÍCView::OnCreate¡£

    ͼ5-8Éæ¼°µÄ¼¸¸öÐéÄ⺯ÊýµÄÁ÷³Ì·Ö±ðÓÉͼ5-9¡¢Í¼5-10ͼ½â¡£Í¼5-9±íʾCDocumentµÄOnNewDocumentµÄÁ÷³Ì£»Í¼5-10±íʾCDocumentµÄOpenDocumentµÄÁ÷³Ì¡£ÕâÁ½¸öº¯Êý·Ö±ðÔÚ´´½¨ÐÂÎĵµ»òÕß´ò¿ªÒ»¸öÎĵµÊ±±»µ÷ÓᣴÓÁ÷³Ì¿ÉÒÔ¿´³ö£¬¶ÔÓÚOpenDocumentº¯Êý£¬MFCµÄȱʡʵÏÖÖ÷ÒªÓÃÀ´ÉèÖÃÐ޸ıêʶ¡¢ÐòÁл¯¶ÁÈë´ò¿ªÎĵµµÄÄÚÈÝ¡£Í¼5-10ÏÔʾÁËÐòÁл¯µÄ²Ù×÷¹ý³Ì£º

    Ê×ÏÈ£¬Ê¹ÓÃÎĵµ¶ÔÏó´ò¿ª»òÕß´´½¨µÄÎļþ¾ä±ú´´½¨Ò»¸öÓÃÓÚ¶Á³öÊý¾ÝµÄCArchive¶ÔÏóloadarchive£»È»ºóʹÓÃËüͨ¹ýSerialize½øÐÐÐòÁл¯²Ù×÷£¬Íê±Ï£¬CArchive¶ÔÏó±»×Ô¶¯Ïú»Ù£¬Îļþ¾ä±ú±»¹Ø±Õ¡£

    ´ÓÕâЩͼÖпÉÒÔ¿´µ½ºÎʱ¡¢ºÎ´¦µ÷ÓÃÁËʲôÏûÏ¢´¦Àíº¯ÊýºÍÐéÄ⺯Êý£¬ÕâЩº¯ÊýÓÃÀ´×÷ÁËʲôÊÂÇé¡£±ØÒªµÄ»°£¬³ÌÐòÔ±¿ÉÒÔÔÚÅÉÉúÀา¸ÇËüÃÇ¡£

    ÔÚ´´½¨¹¤×÷Íê³ÉÖ®ºó£¬½øÐгõʼ»¯£¬Ê¹ÓÃÎĵµ¶ÔÏóµÄÊý¾ÝÀ´¸üÐÂÊÓºÍÏÔʾ´°¿Ú¡£

    ÖÁ´Ë£¬±¾½ÚÃèÊöÁËMFCµÄSDI³ÌÐò´Ó·ÖÎöÃüÁîÐе½´´½¨»ò´ò¿ªÎļþµÄ´¦Àí¹ý³Ì£¬Îĵµ¶ÔÏóÒѾ­¶¯Ì¬´´½¨¡£×ܽáÈçÏ£º

    ÃüÁîÐзÖÎö¡úÓ¦ÓóÌÐòµÄFileNew¡úÎĵµÄ£°åµÄOpenDocumentFile(NULL)¡úÎĵµµÄOnNewDocument

    ÃüÁîÐзÖÎö¡úÓ¦ÓóÌÐòµÄFileOPen¡úÎĵµÄ£°åµÄOpenDocumentFile(filename)¡úÎĵµµÄOpenDocument

    ±ß¿ò´°¿Ú¶ÔÏó¡¢ÊÓ¶ÔÏóµÄ¶¯Ì¬´´½¨ºÍ¶ÔÓ¦ Windows¶ÔÏóµÄ´´½¨´ÓLoadFrame¿ªÊ¼£¬ÕâЩ½«ÔÚÏÂÒ»½ÚÂÛÊö¡£

          1. SDI±ß¿ò´°¿ÚµÄ´´½¨

    µÚÈý²½ÊÇ´´½¨SDI±ß¿ò´°¿Ú¡£

    ͼ5-8ÒѾ­·ÖÎöÁË´´½¨SDI±ß¿ò´°¿ÚµÄʱ»úºÍ´´½¨·½·¨£¬ÏÂÃæ£¬´ÓLoadFrame¿ªÊ¼·ÖÎöÕû¸ö´°¿Ú´´½¨¹ý³Ì¡£

    1. CFrameWnd::LoadFrame

      CFrameWnd::LoadFrameµÄÁ÷³ÌÈçͼ5-11Ëùʾ£¬ÆäÔ­ÐÍÈçÏ£º

      BOOL CFrameWnd::LoadFrame(UINT nIDResource,

      DWORD dwDefaultStyle,

      CWnd* pParentWnd,

      CCreateContext* pContext)

      µÚÒ»¸ö²ÎÊýÊǺ͸ÿò¼ÜÏà¹ØµÄ×ÊÔ´ID£¬°üÀ¨×Ö·û´®¡¢¿ì½Ý¼ü¡¢²Ëµ¥¡¢Ïñ±êµÈ£»

      µÚ¶þ¸ö²ÎÊýÖ¸¶¨¿ò¼Ü´°¿ÚµÄ¡°´°¿ÚÀࡱºÍ´°¿Ú·ç¸ñ£»´Ë´¦´´½¨SDI´°¿ÚʱºÍȱʡֵÏàͬ£¬ÎªWS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE£»

      µÚÈý¸ö²ÎÊýÖ¸¶¨¿ò¼Ü´°¿ÚµÄ¸¸´°¿Ú£¬´Ë´¦ºÍȱʡֵÏàͬ£¬ÎªNULL£»

      µÚËĸö²ÎÊýÖ¸¶¨´´½¨µÄÉÏÏÂÎÄ£¬Èçͼ5-8ËùʾÓÉCreateNewFrameÉú³ÉÁ˸ñäÁ¿²¢´«µÝ¸øLoadFrame¡£ÆäȱʡֵΪNULL¡£

      ´´½¨ÉÏÏÂÎĽṹµÄ¶¨Ò壺

      struct CCreateContext

      {

      CRuntimeClass* m_pNewViewClass; //ViewµÄ¶¯Ì¬´´½¨ÐÅÏ¢

      CDocument*m_pCurrentDoc;//Ö¸ÏòÒ»Îĵµ¶ÔÏ󣬽«ºÍд´½¨ÊÓ¹ØÁª

      //ÓÃÀ´´´½¨MDI×Ó´°¿ÚµÄÐÅÏ¢(C MDIChildFrame::LoadFrameʹÓÃ)

      CDocTemplate* m_pNewDocTemplate;

      // for sharing view/frame state from the original view/frame

      CView* m_pLastView;

      CFrameWnd* m_pCurrentFrame;

      };

      ÕâÀ´«µÝ¸øLoadFrameµÄCCreateContext±äÁ¿ÊÇ£º

      (ÊӵĶ¯Ì¬´´½¨ÐÅÏ¢£¬Ð´´½¨µÄÎĵµ¶ÔÏ󣬵±Ç°ÎĵµÄ£°å£¬NULL£¬NULL)¡£

      ÆäÖУ¬¡°Ð´´½¨µÄÎĵµ¶ÔÏó¡±¾ÍÊÇͼ 5-8Öд´½¨µÄÄǸöÎĵµ¶ÔÏó¡£´Ó´ËͼÖл¹¿ÉÒÔ¿´µ½£¬LoadFrame±»CreateNewFrameµ÷Óã¬CreateNewFrameÊÇÎĵµÄ£°åµÄ³ÉÔ±º¯Êý£¬±»ÎĵµÄ£°åµÄ³ÉÔ±º¯ÊýOpenDocumentFileËùµ÷Óã¬ËùÒÔ£¬LoadFrame¼ä½ÓµØ±»ÎĵµÄ£°åµ÷Ó㬡°µ±Ç°ÎĵµÄ£°å¡±¾ÍÊǵ÷ÓÃËüµÄÄ£°å¶ÔÏó¡£Ë³±ãÖ¸³ö£¬¶ÔSDI³ÌÐòÀ´ËµÊÇÕâÑùµÄ£¬¶ÔMDI³ÌÐòÓÐËù²»Í¬¡£¡°ÊӵĶ¯Ì¬´´½¨ÐÅÏ¢¡±Ò²ÊÇÎĵµÄ£°å´«µÝ¹ýÀ´µÄ¡£

      ¶Ôͼ5-11µÄ˵Ã÷£º

      ÔÚ´´½¨±ß¿ò´°¿Ú֮ǰ£¬ÏÈ×¢²á¡°´°¿ÚÀࡱ¡£LoadFrame×¢²áÁËÁ½¸ö¡°´°¿ÚÀࡱ£¬Ò»¸öΪ±ß¿ò´°¿Ú£¬Ò»¸öΪÊÓ´°¿Ú¡£¹ØÓÚ¡°´°¿ÚÀࡱע²á£¬¼û2.2.1½Ú¡£

      ×¢²á´°¿ÚÀàÖ®ºó£¬´´½¨±ß¿ò´°¿Ú£¬²¢¼ÓÔØ×ÊÔ´¡£´´½¨±ß¿ò´°¿ÚʹÓÃÁËCFrameWndµÄCreateÐéÄ⺯Êý£¬×îÖÕµ÷ÓÃ::CreateEx´´½¨´°¿Ú¡£::CreateExÓÐ11¸ö²ÎÊý£¬Æä×îºóÒ»¸ö²ÎÊý¾ÍÊÇÎĵµÄ£°å´«µÝ¸øLoadFrameµÄCCreateContextÀàÐ͵ÄÖ¸Õ룬¸ÃÖ¸Õ뽫±»´«µÝ¸ø´°¿Ú¹ý³Ì£¬½øÒ»²½ÓÉWindows´«µÝ¸øOnCreateº¯Êý¡£Ë³±ãÖ¸³ö£¬´´½¨Íê±ÏµÄ±ß¿ò´°¿ÚµÄ´°¿Ú¹ý³ÌÊÇͳһµÄMFC´°¿Ú¹ý³Ì¡£

      ´´½¨±ß¿ò´°¿Úʱ£¬·¢ËÍÏûÏ¢WM_NCCREATEºÍWM_CREATE£¬µ¼Ö¶ÔÓ¦µÄÏûÏ¢´¦Àíº¯ÊýOnNcCreateºÍOnCreate±»µ÷Óá£CWndÌṩÁËOnNcCreate´¦Àí·Ç¿Í»§Çø´´½¨ÏûÏ¢£¬CFrameWndûÓд¦Àí¸ÃÏûÏ¢£¬µ«ÊÇÌṩÁËOnCreate´¦ÀíÏûÏ¢WM_CREATE¡£OnCreate½«´´½¨ÊÓ¶ÔÏóºÍÊÓ´°¿Ú¡£

    2. CFrameWnd::OnCreate

    °´´´½¨¹¤×÷µÄ½ø¶È£¬ÏÖÔÚÒªÌÖÂ۱߿ò´°¿Ú´´½¨ÏûÏ¢£¨WM_CREATE£©µÄ´¦ÀíÁË£¬´¦Àíº¯ÊýÊÇCFrameWndµÄOnCreate£¬ÆäÔ­ÐÍÈçÏ£º

    int CFrameWnd::OnCreate(LPCREATESTRUCT lpcs)

    ÆäÖУ¬²ÎÊýÖ¸ÏòÒ»¸öCreateStruct½á¹¹£¨¹ØÓÚCreateStructµÄÃèÊö¼û4.4.1½Ú£©£¬Ëü°üº¬ÁË´°¿Ú´´½¨²ÎÊýµÄ¸±±¾£¬Ò²¾ÍÊÇ˵CreaeEx´°¿Ú´´½¨º¯ÊýµÄ11¸ö²ÎÊý±»¶ÔÓ¦µØ¸´ÖƵ½¸Ã½á¹¹µÄ11¸öÓò£¬ÀýÈçËüµÄµÚÒ»¸ö³ÉÔ±¾Í¿ÉÒÔת»»³ÉCCreateContextÀàÐ͵ÄÖ¸Õë¡£

    º¯ÊýOnCreate´¦ÀíWM_CREATEÏûÏ¢£¬Ëü´ÓlpcsÖ¸ÏòµÄ½á¹¹ÖзÖÀë³ölpCreateParams²¢°ÑËüת»»³ÉΪCCreateContextÀàÐ͵ÄÖ¸ÕëpContext£¬È»ºó£¬µ÷ÓÃOnCreateHelp(lpcs£¬pContext)£¬°Ñ´´½¨¹¤×÷ίÅɸøËüÍê³É¡£

    CFrameWnd::OnCreateHelpµÄÔ­ÐÍÈçÏ£¬Á÷³Ì¼ûͼ5-11¡£

    int CFrameWnd::OnCreateHelp(LPCREATESTRUCT lpcs,

    CCreateContext* pContext)

    ˵Ã÷£ºÓÉÓÚCFrameWnd¸²¸ÇÁËÏûÏ¢´¦Àíº¯ÊýOnCreateÀ´´¦ÀíWM_CREATEÏûÏ¢£¬ËùÒÔCWnd¾ÍʧȥÁË´¦Àí¸ÃÏûÏ¢µÄ»ú»á£¬³ý·ÇCFrameWnd::OnCreateÖ÷¶¯µ÷ÓûùÀàµÄ¸ÃÏûÏ¢´¦Àíº¯Êý¡£Í¼5-11չʾÁ˶ÔCWnd::OnCreateµÄµ÷Óá£

    Ôڱ߿ò´°¿Ú±»´´½¨Ö®ºó£¬µ÷ÓÃÐéÄ⺯ÊýOnCreateClient(lpcs£¬pContext)£¬ËüµÄȱʡʵÏÖ½«´´½¨ÊÓ¶ÔÏóºÍÊÓ´°¿Ú¡£

    ×îºó£¬ÔÚ״̬À¸ÏÔʾ¡°Ready¡±×ÖÑù£¬µ÷ÓÃRecalcLayout°²Åʤ¾ßÀ¸µÈµÄλÖ᣹ØÓÚWM_SETMESSAGESTRINGÏûÏ¢ºÍRecalcLayoutº¯Êý£¬¼û¹¤¾ßÀ¸ÓйØ13.2.3½Ú¡£

    µ½´Ë£¬SDIµÄ±ß¿ò´°¿ÚÒѾ­±»´´½¨¡£ÏÂÒ»½Ú½«ÃèÊöÊӵĴ´½¨¡£

          1. ÊӵĴ´½¨

            µÚËIJ½£¬´´½¨ÊÓ¡£

            Èçǰһ½ÚËùÊö£¬ÈôCFrameWnd::OnCreateClient(lpcs£¬pContext)ÅжÏpContext°üº¬ÁËÊӵĶ¯Ì¬´´½¨ÐÅÏ¢£¬Ôòµ÷Óú¯ÊýCreateView´´½¨ÊÓ¶ÔÏóºÍÊÓ´°¿Ú¡£CreateViewµÄÔ­ÐÍÈçÏ£¬ÆäÁ÷³ÌÈçͼ5-13Ëùʾ¡£

            CWnd * CFrameWnd::CreateView(CCreateContext* pContext, UINT nID)

            ÆäÖУº

            µÚÒ»¸ö²ÎÊýÊÇ´´½¨ÉÏÏÂÎÄ£»

            µÚ¶þ¸ö²ÎÊýÊÇ´´½¨ÊÓ (×Ó´°¿Ú)µÄID£¬È±Ê¡ÊÇAFX_IDW_PANE_FIRST£¬ÕâÀïµÈͬȱʡֵ¡£

            ˵Ã÷£º

            CreateViewµ÷ÓÃÁËCWndµÄCreateº¯Êý´´½¨HWNDÊÓ´°¿Ú£¬ÊÓµÄ×Ó´°¿ÚIDÊÇAFX_IDW_PANE_FIRST£¬¸¸´°¿ÚÊÇ´´½¨ËüµÄ±ß¿ò´°¿Ú¡£´´½¨ÊÓ´°¿ÚʱµÄWM_CREATE¡¢WM_NCCREATEÏûÏ¢·Ö±ð±»CView¡¢CWndµÄÏà¹ØÏûÏ¢´¦Àíº¯Êý´¦Àí¡£´¦ÀíÇé¿öÈçͼ5-13ËùÊö£¬ÕâÀï²»×÷½øÒ»²½µÄÌÖÂÛ¡£

            µ½´Ë£¬Îĵµ¶ÔÏ󡢱߿ò´°¿Ú¶ÔÏó¡¢ÊÓ´°¿Ú¶ÔÏóÒѾ­´´½¨£¬ÎļþÒѾ­´ò¿ª»òÕß´´½¨£¬±ß¿ò´°¿Ú¡¢ÊÓ´°¿ÚÒѾ­´´½¨¡£ÏÖÔÚ£¬ÊÇÏÔʾºÍ¶¨Î»´°¿Ú¡¢ÏÔʾÎĵµÊý¾ÝµÄʱºòÁË£¬ÕâЩͨ¹ýµ÷ÓÃCFrameWndµÄÐéÄ⺯ÊýInitialUpdateFrameÍê³É£¬Èçͼ5-8Ëùʾ¡£

          2. ´°¿Ú³õʼ»¯

            ÕâÊǵÚÎå²½£¬³õʼ»¯±ß¿ò´°¿Ú¡¢ÊÓ´°¿ÚµÈ¡£

            InitialUpdateFrameµÄÔ­ÐÍÈçÏ£º

            void CFrameWnd::InitialUpdateFrame(CDocument* pDoc, BOOL bMakeVisible)

            ÆäÖУº

            µÚÒ»¸ö²ÎÊýÊǵ±Ç°µÄÎĵµ¶ÔÏó£»

            µÚ¶þ¸ö²ÎÊý±íʾ±ß¿ò´°¿ÚÊÇ·ñÓ¦¸Ã¿É¼û²¢¼¤»î¡£

            ¸Ãº¯ÊýÊÇÔÚÎĵµÄ£°åµÄOpenDocumentFileÖе÷Óõ쬴«µÝ¹ýÀ´µÄµÚÒ»¸ö²ÎÊýÊǸղŴ´½¨µÄÎĵµ£¬µÚ¶þ¸ö²ÎÊýÊÇTRUE£¬¼ûͼ5-8¡£

            InitialUpdateFrameµÄ´¦Àí¹ý³Ì²Î¼ûͼ5-14£¬½âÊÍÈçÏ£º

            Ê×ÏÈ£¬Èç¹ûµ±Ç°±ß¿ò´°¿ÚûÓлÊÓ£¬Ôò»ñÈ¡IDΪAFX_IDW_PANE_FIRSTµÄÊÓpView¡£Èç¹û¸ÃÊÓ²»´æÔÚ£¬ÔòpView=NULL£»·ñÔò(pView!=NULL)£¬µ÷ÓóÉÔ±º¯ÊýSetActiveView(pView£¬FALSE)°ÑËüÉèÖÃΪ»î¶¯ÊÓ£¬²ÎÊý2ΪFALSE±íʾ²¢²»Í¨ÖªËü³ÉΪ»î¶¯ÊÓ£¨¼ûͼ5-14£©¡£

            È»ºó£¬Èç¹ûInitialUpdateFrameµÄ²ÎÊýbMakeVisibleΪTRUE£¬Ôò¸øËùÓб߿ò´°¿ÚµÄÊÓ·¢ËÍWM_INITIALUPDATEÏûÏ¢£¬Í¨ÖªËüÃÇÔÚÏÔʾ֮ǰʹÓÃÎĵµÊý¾ÝÀ´³õʼ»¯ÊÓ¡£Õâµ¼ÖÂÊÓÀàµÄÐéÄ⺯ÊýOnInitUpdate±»µ÷Ó㬸ú¯ÊýÓÖµ÷ÓÃOnUpdateÀ´Íê³É³õʼ»¯¡£ÆäËû×Ó´°¿Ú£¨Èç״̬À¸¡¢¹¤¾ßÀ¸£©Ò²½«ÊÕµ½WM_INITIALUPDATEÏûÏ¢£¬µ¼ÖÂËüÃǸüÐÂ״̬¡£

            ÆäÈý£¬µ÷ÓÃpView->OnActivateFrame£¨WA_INACTIVE£¬this£©¸ø»î¶¯ÊÓ£¨Èô´æÔڵϰ£©Ò»¸ö»ú»áÀ´±£´æµ±Ç°½¹µã¡£ÕâÀ½âÊÍÕâ¸öº¯Êý£º

            void CView::OnActivateFrame( UINT nState,CFrameWnd* pFrameWnd );

            ÆäÖУ¬²ÎÊý1ȡֵΪWA_INACTIVE/WA_ACTIVE/WA_CLICKACTIVE£¬¾ßÌå¼ûÏûÏ¢WM_ACTIVEµÄ½âÊÍ£»²ÎÊý2Ö¸Ïò±»¼¤»îµÄ¿ò¼Ü´°¿Ú¡£

            ÊÓ¶ÔÏóͨ¹ý¸ÃÐéÄ⺯ÊýÔÚËüËùÊôµÄ±ß¿ò´°¿Ú±»¼¤»î»òÕßʧȥ¼¤»îʱ×÷Ò»Ð©ÌØ±ðµÄ´¦Àí£¬ÀýÈ磬CFormViewÓÃËüÀ´±£´æ»òÕ߻ָ´ÊäÈë½¹µã¿ØÖÆ¡£

            ÆäËÄ£¬ÔÚOnActivateFrameÖ®ºó£¬µ÷ÓóÉÔ±º¯ÊýActivateFrame¼¤»î¿ò¼Ü´°¿Ú¡£Õâ¸ö¹ý³Ì½«²úÉúÒ»¸öÏûÏ¢WM_ACTIVE£¨´¦Àí¸ÃÏûÏ¢µÄ¹ý³ÌÔÚÏÂÒ»½Ú×÷½âÊÍ)£¬Ëüµ¼ÖÂOnActiveTopLevelºÍOnActive±»µ÷Ó᣽Ó×Å£¬Èç¹û»î¶¯Êӷǿգ¬Ôòµ÷ÓóÉÔ±º¯ÊýOnActivateView¼¤»îËü¡£

            ÖÁ´Ë£¬²ÎÊýbMakeVisibleΪTRUEʱÏÔʾ´°¿ÚµÄ´¦ÀíÍê±Ï¡£

            ×îºó£¬Èç¹û²ÎÊýpDoc·Ç¿Õ£¬Ôò¸üб߿ò´°¿Ú¼ÆÊý£¬¸üб߿ò´°¿ÚµÄ±êÌâ¡£¸üб߿ò´°¿Ú¼ÆÊýÊÇΪÁËÔÚÒ»¸öÎĵµ¶ÔÓ¦¶à¸öÊÓµÄÇé¿öÏ£¬¸øÏÔʾͬһÎĵµµÄ²»Í¬Îĵµ±ß¿ò´°¿Ú±àºÅ£¬±àºÅ´Ó1¿ªÊ¼£¬±£´æÔڱ߿ò´°¿ÚµÄ³ÉÔ±±äÁ¿m_nWindowÀï¡£ÀýÈçÓÐÁ½¸ö±ß¿ò¶ÔÓ¦Ò»¸öÎĵµtt1£¬ÔòËüÃǵıêÌâ·Ö±ðΪ¡°tt1:1¡±¡¢¡°tt1:2¡±¡£Èç¹ûÖ»ÓÐÒ»¸öÎĵµÖ»¶ÔÓ¦Ò»¸ö±ß¿ò´°¿Ú£¬Ôò³ÉÔ±±äÁ¿m_nWindowµÈÓÚ-1£¬±êÌâ²»º¬±àºÅ£¬Èç¡°tt1¡±¡£

            µ±È»£¬¶ÔÓÚSDIÓ¦ÓóÌÐò£¬²»´æÔÚÒ»¸öÎĵµ¶ÔÓ¦¶à¸öÊÓµÄÇé¿ö¡£ÉÏÊöÇé¿öÊÇÕë¶ÔMDIÓ¦ÓóÌÐò¶øÑԵġ£SDIÓ¦ÓóÌÐòÖ´Ðиùý³Ìʱ£¬Ï൱ÓÚMDI³ÌÐòµÄÒ»¸öÌØÀý¡£

            ͼ 5-14Éæ¼°µÄһЩº¯ÊýÓÉͼ5-15¡¢5-15ͼ½â¡£

            ¡¡

            ͼ5-14Öеĺ¯ÊýSetActiveViewµÄͼ½âÈçͼ5-15Ëùʾ£¬ÆäÔ­ÐÍÈçÏ£¬£º

            void CFrameWnd::SetActiveView(CView * pViewNew, BOOL bNotify = TRUE)

            ÆäÖУº

            ²ÎÊý1Ö¸Ïò±»ÉèÖõÄÊÓ¶ÔÏó£¬Èô·ÇÊÓÀàÐ͵ĶÔÏó£¬ÔòΪNULL£»

            ²ÎÊý 2±íʾÊÇ·ñ֪ͨ±»ÉèÖõÄÊÓ¡£

            ͼ5-15ÖеıäÁ¿m_pViewActiveÊÇCFrameWndµÄ³ÉÔ±±äÁ¿£¬ÓÃÀ´±£´æ±ß¿ò´°¿ÚµÄ»î¶¯ÊÓ¡£

            ͼ5-15ÖеÄÁ÷³Ì¿ÉÒÔ¸ÅÀ¨Îª£ºDeactivateµ±Ç°ÊÓ£¨m_pViewActive·Ç¿Õʱ£©£»ÉèÖõ±Ç°»î¶¯ÊÓ£»Èô²ÎÊýbNotifyΪTRUE£¬Í¨ÖªpViewNew±»¼¤»î¡£

            ͼ5-14Öеĺ¯ÊýActivateFrameͼ½âÈçͼ5-16Ëùʾ£¬ÆäÔ­ÐÍÈçÏ£¬£º

            void CFrameWnd::ActivateFrame(UINT nCmdShow)

            ²ÎÊýnCmdShowÓÃÀ´´«µÝ¸øCWnd::ShowWindow£¬Ö¸¶¨ÏÔʾ´°¿ÚµÄ·½Ê½¡£²ÎÊýȱʡΪ1£¬Í¼5-14µ÷ÓÃʱÉèÖÃΪ-1¡£

            ¸Ãº¯ÊýÓÃÀ´¼¤»î(Activate)ºÍ»Ö¸´(Restore)±ß¿ò´°¿Ú£¬Ê¹µÃËü¶ÔÓû§¿É¼û¿ÉÓá£ÔÚ³õʼ»¯¡¢OLEʼþ¡¢DDEʼþµÈÐèÒªÏÔʾ±ß¿ò´°¿ÚµÄµØ·½µ÷Óá£Í¼5-16±íʾµÄMFCȱʡʵÏÖÊǼ¤»î±ß¿ò´°¿Ú²¢°ÑËü·Åµ½¶¥²ã¡£

            ³ÌÐòÔ±¿ÉÒÔ¸²¸Ç¸ÃÐéÄ⺯ÊýActivateFrameÀ´¿ØÖƱ߿ò´°¿ÚÔõÑù±»¼¤»î¡£

            ͼ5-16Öеĺ¯ÊýBringToTopÊÇCFrameWndÄÚ²¿Ê¹ÓõijÉÔ±º¯Êý(protected)¡£Ëüµ÷ÓÃ::BringWindowToTop°Ñ´°¿Ú·Åµ½ZÖáÉϵĶ¥²ã¡£

            ÖÁ´Ë£¬±ß¿ò´°¿Ú³õʼ»¯µÄ¹ý³ÌÒѾ­ÃèÊöÇå³þ£¬Êӵijõʼ»¯¼ûÏÂÒ»½Ú¡£

          3. Êӵijõʼ»¯

            µÚÁù²½£¬Ôڱ߿ò´°¿Ú³õʼ»¯Ö®ºó£¬³õʼ»¯ÊÓ¡£

            Èçͼ5-14Ëùʾ£¬ÊÓ¡¢¹¤¾ßÌõ´°¿Ú´¦ÀíÏûÏ¢WM_INITAILUPDATE(MFCÄÚ²¿ÏûÏ¢)£¬Íê³É³õʼ»¯¡£ÕâÀïÖ»ÌÖÂÛÊÓµÄÏûÏ¢´¦Àíº¯Êý£¬ÆäÔ­ÐÍÈçÏ£º

            void CView::OnInitialUpdate()

            ͼ5-14¶Ô¸Ãº¯ÊýµÄ×¢ÊÍ˵Ã÷Á˸ú¯ÊýµÄÌØÊâÖ®´¦¡£ÆäȱʡʵÏÖÊǵ÷ÓÃOnUpdate(NULL, 0, NULL)¸üÐÂÊÓ¡£¿ÉÒÔ¸²¸ÇOnInitialUpdateʵÏÖ×Ô¼ºµÄ³õʼ»¯¡£

            OnUpdateÊÇÒ»¸öÐéÄ⺯Êý£¬ÆäÔ­ÐÍÈçÏ£º

            void CView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)

            ÆäÖУº

            ²ÎÊý1Ö¸ÏòÐÞ¸ÄÎĵµÊý¾ÝµÄÊÓ£»Èô¸üÐÂËùÓеÄÊÓ£¬ÉèΪNULL£»

            ²ÎÊý2ÊÇÒ»¸ö°üº¬ÁËÐÞ¸ÄÐÅÏ¢µÄlongÐͱäÁ¿£»

            ²ÎÊý3Ö¸ÏòÒ»¸ö°üº¬ÐÞ¸ÄÐÅÏ¢µÄ¶ÔÏ󣨴ÓCObjectÅÉÉúµÄ¶ÔÏ󣩡£

            ²ÎÊý2¡¢²ÎÊý3ÊÇÔÚÎĵµ¸üжÔÓ¦ÊÓµÄʱºò´«µÝ¹ýÀ´µÄ¡£

            ¸Ãº¯ÊýÓÃÀ´¸üÐÂÏÔʾÊÓ´°¿Ú£¬·´Ó³ÎĵµµÄ±ä»¯£¬ÔÚMFCÖУ¬ËüΪº¯ÊýCView::OnInitialUpdateºÍCDocument::UpdateAllViewsËùµ÷Óá£ÆäȱʡʵÏÖÊÇʹÕû¸ö¿Í»§ÇøÎÞЧ¡£ÔÚÏÂÒ»´ÎÊÕµ½WM_PAINTÏûϢʱ£¬ÖØ»æÎÞÐ§Çø¡£

            ¹¤¾ßÌõµÄ³õʼ»¯¼ûÌÖÂÛµÚ13Õ¡£

          4. ¼¤»î±ß¿ò´°¿Ú(´¦ÀíWM_ACTIVE)

    µÚÆß²½£¬ÔÚ´°¿Ú³õʼ»¯Íê³ÉÖ®ºó£¬¼¤»î²¢ÏÔʾ³öÀ´¡£

    ÏÂÃæÌÖÂ۱߿ò´°¿Ú¼¤»îʱµÄ´¦Àí£¨¶ÔWM_ACTIVEµÄ´¦Àí£©¡£

    1. WM_ACTIVEµÄÏûÏ¢²ÎÊý

      wParamµÄµÍ½×wordָʾ´°¿ÚÊDZ»¼¤»î»¹ÊÇʧȥ¼¤»î£ºWA_ACTIVE£¬±»Êó±êµã»÷ÒÔÍâµÄ·½·¨¼¤»î£»WA_CLICKACTIVE£¬ÓÉÊó±êµã»÷¼¤»î£»WA_INACTIVE£¬Ê§È¥¼¤»î£»

      wParamµÄ¸ß½×wordָʾ´°¿ÚÊÇ·ñ±»×îС»¯£»·ÇÁã±íʾ×îС»¯£»

      lPararm±íʾ½«¼¤»îµÄ´°¿Ú¾ä±ú(WA_INACTIVE)£¬»òÕß½«Ê§È¥¼¤»îµÄ´°¿Ú¾ä±ú(WA_CLICKACTIVE¡¢WA_ACTIVE)¡£

      ÔÚ±ê×¼WindowsÏûÏ¢´¦ÀíµÄÕ½ÚÖУ¬ÔøÖ¸³ö´¦ÀíWM_ACTIVEÏûϢʱ£¬ÏÈÒªµ÷ÓÃÒ»¸öº¯Êý_AfxHandleActivate£¬´Ëº¯ÊýµÄÔ­ÐÍÈçÏ£º

      static void AFXAPI _AfxHandleActivate(CWnd* pWnd,

      WPARAM nState,CWnd* pWndOther)

      ÆäÖУº

      ²ÎÊý1ÊǽÓÊÕÏûÏ¢µÄ´°¿Ú£»

      ²ÎÊý2ÊÇ´°¿Ú״̬£¬ÎªWM_ACTIVEµÄÏûÏ¢²ÎÊýwParam;

      ²ÎÊý3ÊÇWM_ACTIVEµÄÏûÏ¢²ÎÊýlParam±íʾµÄ´°¿Ú¡£

      _AfxHandleActivateÊÇMFCÄÚ²¿Ê¹Óõĺ¯Êý£¬ÉùÃ÷ºÍʵÏÖ¾ùÔÚWinCore.CPPÎļþÖС£ÊµÏÖÈçÏ£º

      Èç¹ûpWndÖ¸ÏòµÄ´°¿Ú²»ÊÇ×Ó´°¿Ú£¬¶øÇÒpWndºÍpWndOther´°¿ÚµÄ¶¥¼¶¸¸´°¿Ú(TopLevelParent)²»ÊÇͬһ´°¿Ú£¬Ôò·¢ËÍMFC¶¨ÒåµÄÏûÏ¢WM_ACTIVATETOPLEVEL¸øpWndµÄ¶¥¼¶´°¿Ú£¬ÏûÏ¢²ÎÊýwParamÊÇnState£¬ÏûÏ¢²ÎÊýlParamÖ¸ÏòÒ»¸ö³¤¶ÈΪ¶þµÄÊý×飬Êý×éÀï´æ·ÅpWndºÍpWndOtherËùÖ¸´°¿ÚµÄ¾ä±ú¡£·ñÔò£¬_AfxHandleActivate²»×÷ʲô¡£

      ´ÓÕâÀï¿ÉÒÔ¿´³ö£ºÖ»Óж¥²ãµÄÖ÷±ß¿ò´°¿ÚÄÜ´¦ÀíWM_ACTIVEÏûÏ¢£¬ÊÂʵÉÏ£¬Windowsϵͳֻ»á¸ø¶¥²ãµÄ·Ç×Ó´°¿Ú·¢ËÍWM_ACTIVEÏûÏ¢¡£

    2. WM_ACTIVATETOPLEVELÏûÏ¢µÄ´¦Àí

      CWnd¼°ÅÉÉúÀàCFrameWndʵÏÖÁ˶ÔWM_ACTIVATETOPLEVELÏûÏ¢µÄ´¦Àí£¬·Ö±ð½âÊÍÈçÏ£º

      ÏûÏ¢´¦Àíº¯ÊýCWnd::OnActivateTopLevelÈç¹ûʧȥ¼¤»î£¬ÔòÈ¡Ïû¹¤¾ßÀ¸µÄÌáʾ£¨TOOLTIP£©¡£

      ÏûÏ¢´¦Àíº¯ÊýCFrameWnd::OnActivateTopLevelµ÷ÓÃCWndµÄOnActivateTopLevel£»Èç¹û½ÓÊÕWM_ACTIVEÏûÏ¢µÄ´°¿ÚÊÇÏß³ÌÖ÷´°¿Ú£¬ÔòʹµÃÆä»î¶¯µÄÊÓ´°¿Ú±ä³É·Ç»î¶¯µÄ£¨OnActive(FALSE, pActiveView,pActiveView)¡£

      ´ÓÕâÀï¿ÉÒÔÖªµÀ£¬ÔÚ¶¥²ã´°¿Ú½ÓÊÕµ½WM_ACTIVEÏûÏ¢ºó£¬MFC»á½øÐÐһЩ¹Ì¶¨µÄ´¦Àí£¬È»ºó²Åµ÷ÓÃWM_ACTIVEÏûÏ¢´¦Àíº¯Êý¡£

    3. WM_ACTIVEÏûÏ¢µÄ´¦Àí

    ÔÚ_AfxHandleActivateºÍWM_ACTIVATETOPLEVELÏûÏ¢´¦ÀíÍêÖ®ºó£¬²ÅÊǶÔWM_ACTIVEµÄ´¦Àí¡£CWndºÍCFrameWnd¶¼ÊµÏÖÁËÏûÏ¢´¦Àí¡£

    CWndµÄÏûÏ¢´¦Àíº¯Êý£º

    void CWnd::OnActive(UINT nState, CWnd* pWndOther, BOOL bMinimized)

    ÆäÖУº

    ²ÎÊý1ȡֵΪWA_INACTIVE/WA_ACTIVE/WA_CLICKACTIVE£»

    ²ÎÊý2Ö¸Ïò¼¤»î»òÕßʧȥ¼¤»îµÄ´°¿Ú£¬¾ßÌåͬWM_ACTIVEÏûÏ¢£»

    ²ÎÊý3±íʾÊÇ·ñ×îС»¯¡£

    ´Ëº¯ÊýµÄʵÏÖÊǵ÷ÓÃDefault()£¬×÷ȱʡ´¦Àí¡£

    CFrameWndµ