Ç°Ãæ¼¸Õ½éÉÜÁËMFCµÄºËÐĸÅÄîºÍ˼Ï룬¼´½éÉÜÁËMFC¶ÔWindows¶ÔÏóµÄ·â×°·½·¨ºÍÌØµã£»MFC¶ÔÏóµÄ¶¯Ì¬´´½¨¡¢ÐòÁл¯£»MFCÏûÏ¢Ó³Éä»úÖÆ¡£
ÏÖÔÚ£¬¿¼²éMFCµÄÓ¦ÓóÌÐò½á¹¹Ìåϵ£¬¼´ÒÔÎĵµ-ÊÓΪºËÐĵıà³Ìģʽ¡£Ñ§Ï°±¾Õ£¬Ó¦¸ÃŪÇå³þÒÔÏÂÎÊÌ⣺
MFCÖÐÖî¶àMFC¶ÔÏóµÄ¹ØÏµ£ºÓ¦ÓóÌÐò¶ÔÏó£¬Îĵµ¶ÔÏ󣬱߿ò´°¿Ú¶ÔÏó£¬Îĵµ±ß¿ò´°¿Ú¶ÔÏó£¬ÊÓ¶ÔÏó£¬ÎĵµÄ£°å¶ÔÏóµÈ¡£
MFC¶ÔÏóµÄ´´½¨ºÍÏú»Ù£ºÓÉʲô¶ÔÏó´´½¨»òÏú»Ùʲô¶ÔÏ󣬺Îʱ´´½¨£¬ºÎʱÏú»Ù£¿
MFCÌṩÁËÄÇЩ½Ó¿ÚÀ´Ö§³ÖÆä±à³Ìģʽ£¿
ÕâÀïÌÖÂÛÓ¦ÓóÌÐò¡¢ÎĵµÄ£°å¡¢±ß¿ò´°¿Ú¡¢ÊÓ¡¢ÎĵµµÈµÄ´´½¨¹ØÏµ¡£Í¼5-1´óÂԵرíʾÁË´´½¨Ë³Ðò£¬µ«±í5-1¸üÖ±½ÓµØÏÔʾÁË´´½¨Óë±»´´½¨µÄ¹ØÏµ¡£
¡¡
±í5-1 MFC¶ÔÏóµÄ´´½¨¹ØÏµ
|
´´½¨Õß |
±»´´½¨µÄ¶ÔÏó |
|
Ó¦ÓóÌÐò¶ÔÏó |
ÎĵµÄ£°å |
|
ÎĵµÄ£°å |
Îĵµ |
|
ÎĵµÄ£°å |
±ß¿ò´°¿Ú |
|
±ß¿ò´°¿Ú |
ÊÓ |
¡¡
Ó¦ÓóÌÐò¶ÔÏóÓÐÒ»¸öÎĵµÄ£°åÁÐ±í£¬´æ·ÅÒ»¸ö»ò¶à¸öÎĵµÄ£°å¶ÔÏó£»ÎĵµÄ£°å¶ÔÏóÓÐÒ»¸ö´ò¿ªÎĵµÁÐ±í£¬´æ·ÅÒ»¸ö»ò¶à¸öÒѾ´ò¿ªµÄÎĵµ¶ÔÏó£»Îĵµ¶ÔÏóÓÐÒ»¸öÊÓÁÐ±í£¬´æ·ÅÏÔʾ¸ÃÎĵµÊý¾ÝµÄÒ»¸ö»ò¶à¸öÊÓ¶ÔÏó£»»¹ÓÐÒ»¸öÖ¸ÕëÖ¸Ïò´´½¨¸ÃÎĵµµÄÎĵµÄ£°å¶ÔÏó£»ÊÓÓÐÒ»¸öÖ¸ÏòÆä¹ØÁªÎĵµµÄÖ¸Õ룬ÊÓÊÇÒ»¸ö×Ó´°¿Ú£¬Æä¸¸´°¿ÚÊ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»òÅÉÉúÀàµÄʵÀý£»³ÉÔ±º¯ÊýÁÐÖÐÈç¹ûûÓÐÖ¸¶¨ÀàÊô£¬¾ÍÊǵÚÒ»ÁжÔÏóµÄÀàµÄ³ÉÔ±º¯Êý¡£
MFC±à³Ì¾ÍÊǰÑһЩӦÓóÌÐòÌØÓеĶ«Î÷ÌîÈëMFC¿ò¼Ü¡£MFCÌṩÁËÁ½ÖÖÌîÈëµÄ·½·¨£ºÒ»ÖÖ¾ÍÊÇʹÓÃǰһÕÂÂÛÊöµÄÏûÏ¢Ó³É䣬ÏûÏ¢Ó³É䏸ӦÓóÌÐòµÄ¸÷ÖÖ¶ÔÏó´¦Àí¸÷ÖÖÏûÏ¢µÄ»ú»á£»ÁíÒ»ÖÖ¾ÍÊÇʹÓÃÐéÄ⺯Êý£¬MFCÔÚʵÏÖÐí¶à¹¦ÄÜ»òÕß´¦ÀíÏûÏ¢¡¢Ê¼þµÄ¹ý³ÌÖУ¬µ÷ÓÃÁËÐéÄ⺯ÊýÀ´Íê³ÉһЩÈÎÎñ£¬ÕâÑù¾Í¸øÁËÅÉÉúÀา¸ÇÕâЩÐéÄ⺯ÊýʵÏÖÌØ¶¨´¦ÀíµÄ»ú»á¡£
ÏÂÃæÁ½½Ú½«ÁгöÁ½Àà½Ó¿Ú£¬ÓÐÁ½¸öÄ¿µÄ£ºÒ»ÊÇΪÁËÈöÁÕß»ñµÃÕûÌåÓ¡Ï󣬶þÊǺóÎĽ«Éæ¼°µ½»òÕßÌÖÂÛÆäÖеÄÐí¶àº¯Êýʱ£¬²»ÏÔµÃͻأ¡£
¼¸ºõÿһ¸ö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 |
ÔÚ¿ò¼Ü´°¿Ú¹Ø±Õ֮ǰµ÷Óà |
|
¡¡
´°¿Ú¶ÔÏó¿ÉÒÔÏìÓ¦ÒÔ¡°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 |
¡¡
Ó¦ÓóÌÐòʹÓÃMFCµÄ½Ó¿ÚÊǰÑһЩ×Ô¼ºµÄÌØÊâ´¦ÀíÌîÈëMFC¿ò¼Ü£¬ÕâЩ´¦Àí»òÕßÔÚÓ¦ÓóÌÐòÆô¶¯ºÍ³õʼ»¯µÄʱºò±»µ÷Ó㬻òÕßÔÚ³ÌÐòÆô¶¯Ö®ºóºÍÓû§½»»¥µÄ¹ý³ÌÖб»µ÷Ó㬻òÕßÔÚ³ÌÐòÍ˳öºÍ×÷ÇåÀí¹¤×÷µÄʱºò±»µ÷Óá£ÕâÈý¸ö½×¶ÎÖУ¬ºÍÓû§½»»¥½×¶ÎÊǸ÷¸ö³ÌÐò×Ô¼ºµÄÊÂÇ飬×ÔÈ»¶¼²»Ò»Ñù£¬µ«ÊdzÌÐòµÄÆô¶¯ºÍÍ˳öÁ½¸ö½×¶ÎÊÇMFC¿ò¼ÜËùʵÏֵģ¬ÊÇMFC¿ò¼ÜµÄÒ»²¿·Ö£¬¸÷¸ö³ÌÐò¶¼×ñÑͬÑùµÄ²½ÖèºÍ¹æÔò¡£ÏÔÈ»£¬Çå³þMFC¿ò¼Ü¶ÔÕâÁ½¸ö½×¶ÎµÄ´¦ÀíÊǺÜÓбØÒªµÄ£¬Ëü¿ÉÒÔ°ïÖúÉîÈëÀí½âMFC¿ò¼Ü£¬¸üºÃµØÊ¹ÓÃMFC¿ò¼Ü£¬¸üÓÐЧµØÊµÏÖÓ¦ÓóÌÐòÌØ¶¨µÄ´¦Àí¡£
MFC³ÌÐòÆô¶¯ºÍ³õʼ»¯¹ý³Ì¾ÍÊÇ´´½¨MFC¶ÔÏóºÍWindows¶ÔÏó¡¢½¨Á¢¸÷ÖÖ¶ÔÏóÖ®¼äµÄ¹ØÏµ¡¢°Ñ´°¿ÚÏÔʾÔÚÆÁÄ»ÉϵĹý³Ì£¬Í˳ö¹ý³Ì¾ÍÊǹرմ°¿Ú¡¢Ïú»ÙËù´´½¨µÄWindows¶ÔÏóºÍMFC¶ÔÏóµÄ¹ý³Ì¡£ËùÒÔ£¬ÏÂÃæÒªÌÖÂÛ¼¸ÖÖ³£ÓÃMFC¶ÔÏóµÄ½á¹¹£¬ËüÃÇÊǹ¹³ÉÒ»¸öÎĵµ-ÊÓģʽӦÓóÌÐòµÄÖØÒª²¿¼þ¡£
±¾½Ú½«Ö÷Òª·ÖÎöÓ¦ÓóÌÐò¶ÔÏó¡¢Îĵµ¶ÔÏó¡¢ÎĵµÄ£°åµÈµÄÊý¾Ý½á¹¹¡£Í¨¹ý¿¼²ìÀàµÄ½á¹¹£¬ÌرðÊdzÉÔ±±äÁ¿½á¹¹£¬ÅªÇåËüµÄ¹¦ÄÜ¡¢Ä¿µÄÒÔ¼°ºÍÆäËûÀàµÄ¹ØÏµ£»ÁíÍ⣬ÔÚºóÐøÓйطÖÎöÖбض¨»áÌáµ½ÕâЩ³ÉÔ±±äÁ¿£¬ÕâÀïÏÈ×÷¸ö˵Ã÷£¬µ½Ê±Ò²²»»áÏÔµÃͻأ¡£
ÏÂÃæ¼¸½ÚÒÔ±í¸ñµÄÐÎʽÀ´ÃèÊö¸÷¸öÀàµÄ³ÉÔ±±äÁ¿¡£±í¸ñÖУ¬µÚÒ»Áдò¹³µÄ±íʾÊÇMFCÀà¿âÎĵµÓÐ˵Ã÷µÄ£»Ã»´ò¹³µÄÔÚÎĵµÖÐûÓÐ˵Ã÷£¬Èç¹ûÊÇpublic£¬Ôò¿ÉÒÔÖ±½Ó·ÃÎÊ£¬µ«Ëæ×ÅMFC°æ±¾µÄ±ä»¯£¬ÒÔºóMFC¿ÉÄܲ»Ö§³ÖÕâЩ³ÉÔ±£»µÚ¶þÁÐÊÇ·ÃÎÊÊôÐÔ£»µÚÈýÁÐÊdzÉÔ±±äÁ¿Ãû³Æ£»µÚËÄÁÐÊdzÉÔ±±äÁ¿µÄÊý¾ÝÀàÐÍ£»µÚÎåÁÐÊǶԳÉÔ±±äÁ¿µÄ¹¦ÄÜ¡¢ÓÃ;µÄ¼òÒªÃèÊö¡£
Ó¦ÓóÌÐò¶ÔÏóµÄÊý¾Ý³ÉÔ±±íÓÉÁ½²¿·Ö×é³É£¬µÚÒ»²¿·ÖÊÇ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³õʼ»¯ÉèÖÃʱʹÓà |
±í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´´½¨ |
±í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¡£ |
ÏÖÔÚÌÖÂÛ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¡£
MFCʵÏÖÁËÒ»¸öIdle´¦Àí»úÖÆ£¬¾ÍÊÇÔÚûÓÐÏûÏ¢¿ÉÒÔ´¦Àíʱ£¬½øÐÐIdle´¦Àí¡£Idle´¦ÀíµÄÒ»¸öÓ¦ÓÃÊǸüÐÂÓû§½Ó¿Ú¶ÔÏóµÄ״̬¡£¸üÐÂÓû§½Ó¿Ú״̬µÄÄÚÈݼûÏûÏ¢Ó³ÉäµÄÕ½ڡ£
´Óͼ5-3ÖÐRunµÄÁ÷³ÌÉÏ¿ÉÒÔÇå³þµÄ¿´µ½MFC¿ÕÏд¦ÀíµÄÇé¿ö¡£
±¾½ÚÃèÊöÁËÓ¦ÓóÌÐò´ÓInitInstance¿ªÊ¼³õʼ»¯¡¢´ÓRun½øÈëÏûϢѻ·µÄ¹ý³Ì£¬ÏÂÃæ½«¾ÍSDIÓ¦ÓóÌÐòµÄÀý×ÓÃèÊö¸Ã¹ý³ÌÖд´½¨¸÷¸öËùÐèMFC¶ÔÏóµÄÁ÷³Ì¡£
Èçǰһ½ÚËùÊö£¬³ÌÐò´Ó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;
¶ÔÓÚµÚ¶þ²¿·Ö£¬ÓÖ¿ÉÒÔ·Ö½â³ÉÐí¶à²½Öè¡£
ÏÂÃæ½«½âÊÍÿһ²½¡£
µÚÒ»²½ÊÇ´´½¨ÎĵµÄ£°å¡£
ÎĵµÄ£°åµÄ×÷ÓÃÊǶ¯Ì¬´´½¨ÆäËû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£¬°Ñ´´½¨µÄÄ£°å¶ÔÏó¼ÓÈëµ½ÎĵµÄ£°å¹ÜÀíÆ÷µÄÄ£°åÁбíÖУ¬Ò²¾ÍÊÇÓ¦ÓóÌÐò¶ÔÏóµÄÎĵµÄ£°åÁбíÖС£
µÚ¶þ²½ÊÇ´´½¨»òÕß´ò¿ªÎļþ¡£
¶ÔÓÚSDI³ÌÐò£¬MFC¶ÔÏóµÄ¶¯Ì¬´´½¨¹ý³ÌÊÇÔÚ´´½¨»òÕß´ò¿ªÎļþÖз¢ÉúµÄ¡£µ«ÊÇΪʲôûÓп´µ½Îļþ²Ù×÷Ïà¹ØµÄÓï¾äÄØ£¿
Ê×ÏÈ£¬ÐèҪŪÇå³þÀà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¡£
Æä´Î£¬·ÖÎö 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µ¼ÖÂÁË´°¿Ú¡¢ÎĵµµÄ´´½¨¡£
½Ó×Å£¬·ÖÎö CWinApp::OnFileNewÁ÷³Ì£¬Èçͼ5-5Ëùʾ¡£
ͼ5-5µÄ˵Ã÷£º
Ó¦ÓóÌÐò¶ÔÏóµÃµ½ÎĵµÄ£°å¹ÜÀíÆ÷Ö¸Õ룬µ÷ÓÃÎĵµÄ£°å¹ÜÀíÆ÷µÄ³ÉÔ±º¯ÊýOnFileNew(m_pDocManager->OnFileNew())£»Ä£°å¹ÜÀíÆ÷»ñÈ¡ÎĵµÄ£°å¶ÔÏóÖ¸Õ룬µ÷ÓÃÎĵµÄ£°å¶ÔÏóµÄOpenDocumentFile º¯Êý£¨pTemplate->OpenDocumentFile(NULL)£©¡£Èç¹ûÄ£°å¹ÜÀíÆ÷·¢ÏÖÓжà¸öÎĵµÄ£°å£¬¾Íµ¯³öÒ»¸ö¶Ô»°¿òÈÃÓû§Ñ¡ÔñÎĵµÄ£°å¡£ÕâÀïºÍºóÃæµÄͼ½âÖÐÀàËÆÓÚCWinApp::¡¢CDocManager::¡¢CDocTemplate::µÈµÄº¯ÊýÀàÊôÏÞÖÆ²¢²»±íʾֱ½ÓÔ´ÂëÖÐÓÐÕâÑùµÄÏÞÖÆ£¬¶øÊÇͨ¹ýÖ¸Õë»òÕßÖ¸ÕëµÄ¶¯Ì¬Ô¼Êø¿ÉÒÔÈ϶¨µ÷ÓÃÁËij¸öÀàµÄ³ÉÔ±º¯Êý£¬ÆäÕýÈ·ÐÔ½ö½öÏÞÓÚ±¾Êéͼ½âµÄMFCµÄȱʡʵÏÖ¡£
Èçͼ5-5Ëùʾ£¬³ÌÐòÔ±¿ÉÒÔ¸²¸ÇÓйØÐéÄ⺯Êý»òÃüÁî´¦Àíº¯Êý£ºÈç¹û³ÌÐòÔ±ÔÚ×Ô¼ºµÄÓ¦ÓóÌÐòÀàÖи²¸ÇÁËOnFileNew£¬Ôò¿ÉÒÔʵÏÖÍêÈ«²»Í¬µÄ´¦ÀíÁ÷³Ì£»Ò»°ãÇé¿öÏ£¬²»»á´ÓÎĵµÄ£°åÀàÅÉÉúÐÂÀ࣬Èç¹ûÅÉÉúµÄ»°£¬¿ÉÒÔ¸²¸ÇCDocTemplateµÄÐéÄ⺯Êý¡£
·ÖÎöÁË OnFileNewºó£¬ÏÖÔÚ·ÖÎöCWinApp::OnFileOpen()£¬ÆäÁ÷³ÌÈçͼ5-6Ëùʾ¡£
CWinApp::OnFileOpenºÍOnFileNewÀàËÆ£¬²»¹ý£¬µÚ¶þ²½ÐëµÃµ½Ò»¸öÒª´ò¿ªµÄÎļþµÄÃû³Æ£¬µÚÈý²½µ÷ÓõÄÊÇÓ¦ÓóÌÐò¶ÔÏóµÄOpenDocumentFile£¬¶ø²»ÊÇÎĵµÄ£°å¶ÔÏóµÄ¸Ãº¯Êý¡£
·ÖÎöÓ¦ÓóÌÐòµÄ´ò¿ªÎĵµº¯Êý£º CWinApp::OpenDocumentFile(LPCSTR name)£¬ÆäÁ÷³ÌÈçͼ5-7Ëùʾ¡£
¡¡
Ó¦ÓóÌÐò¶ÔÏó°Ñ´ò¿ªÎļþ²Ù×÷ίÍиøÎĵµÄ£°å¹ÜÀíÆ÷£¬ºóÕßÓÖίÍиøÎĵµÄ£°å¶ÔÏóÀ´Ö´ÐС£Èç¹ûÊÇSDI³ÌÐò£¬ÔòίÍиøµ¥Îĵµ¶ÔÏó£»Èç¹ûÊÇMDI³ÌÐò£¬ÔòίÍиø¶àÎĵµ¶ÔÏ󩤩¤ÕâÊÇÓÉÖ¸ÕëËùÖ¸¶ÔÏóµÄʵ¼ÊÀàÐ;ö¶¨µÄ£¬ÒòΪ¸Ãº¯ÊýÊÇÒ»¸öÐéÄ⺯Êý¡£
²»ÂÛÊÇ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¶ÔÏóµÄ¹ØÏµ¡£
ͼ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¿ªÊ¼£¬ÕâЩ½«ÔÚÏÂÒ»½ÚÂÛÊö¡£
µÚÈý²½ÊÇ´´½¨SDI±ß¿ò´°¿Ú¡£
ͼ5-8ÒѾ·ÖÎöÁË´´½¨SDI±ß¿ò´°¿ÚµÄʱ»úºÍ´´½¨·½·¨£¬ÏÂÃæ£¬´Ó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½«´´½¨ÊÓ¶ÔÏóºÍÊÓ´°¿Ú¡£
°´´´½¨¹¤×÷µÄ½ø¶È£¬ÏÖÔÚÒªÌÖÂ۱߿ò´°¿Ú´´½¨ÏûÏ¢£¨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µÄ±ß¿ò´°¿ÚÒѾ±»´´½¨¡£ÏÂÒ»½Ú½«ÃèÊöÊӵĴ´½¨¡£
µÚË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Ëùʾ¡£
ÕâÊǵÚÎå²½£¬³õʼ»¯±ß¿ò´°¿Ú¡¢ÊÓ´°¿ÚµÈ¡£
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õʼ»¯¼ûÏÂÒ»½Ú¡£
µÚÁù²½£¬Ôڱ߿ò´°¿Ú³õʼ»¯Ö®ºó£¬³õʼ»¯ÊÓ¡£
Èçͼ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Õ¡£
µÚÆß²½£¬ÔÚ´°¿Ú³õʼ»¯Íê³ÉÖ®ºó£¬¼¤»î²¢ÏÔʾ³öÀ´¡£
ÏÂÃæÌÖÂ۱߿ò´°¿Ú¼¤»îʱµÄ´¦Àí£¨¶Ô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ÏûÏ¢¡£
CWnd¼°ÅÉÉúÀàCFrameWndʵÏÖÁ˶ÔWM_ACTIVATETOPLEVELÏûÏ¢µÄ´¦Àí£¬·Ö±ð½âÊÍÈçÏ£º
ÏûÏ¢´¦Àíº¯ÊýCWnd::OnActivateTopLevelÈç¹ûʧȥ¼¤»î£¬ÔòÈ¡Ïû¹¤¾ßÀ¸µÄÌáʾ£¨TOOLTIP£©¡£
ÏûÏ¢´¦Àíº¯ÊýCFrameWnd::OnActivateTopLevelµ÷ÓÃCWndµÄOnActivateTopLevel£»Èç¹û½ÓÊÕWM_ACTIVEÏûÏ¢µÄ´°¿ÚÊÇÏß³ÌÖ÷´°¿Ú£¬ÔòʹµÃÆä»î¶¯µÄÊÓ´°¿Ú±ä³É·Ç»î¶¯µÄ£¨OnActive(FALSE, pActiveView,pActiveView)¡£
´ÓÕâÀï¿ÉÒÔÖªµÀ£¬ÔÚ¶¥²ã´°¿Ú½ÓÊÕµ½WM_ACTIVEÏûÏ¢ºó£¬MFC»á½øÐÐһЩ¹Ì¶¨µÄ´¦Àí£¬È»ºó²Åµ÷ÓÃ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µ