²©¿ÍÊ×Ò³ ×¢²á ½¨ÒéÓë½»Á÷ ÅÅÐаñ ¼ÓÈëÓÑÇéÁ´½Ó
ÍÆ¼ö ͶËß ËÑË÷£º °ïÖú

hardworkor

hardworkor.cublog.cn
mfc ÎĵµÊÓͼ½á¹¹µÄ´´½¨¹ý³Ì(µ¥Îĵµ)
mfc ÎĵµÊÓͼ½á¹¹µÄ´´½¨¹ý³Ì(µ¥Îĵµ)

MFCµ¥Îĵµ/ÊÓͼ½á¹¹Çî×·ÃÍ´ò

Ŀ¼

µÚÒ»ÕÂÕÒ»ØWinMainº¯Êý 2
µÚ¶þÕÂInitApplication()º¯Êý 2
µÚÈýÕÂInitInstance ()º¯Êý 3
µÚÒ»½Ú£ºnew CSingleDocTemplate 3
µÚ¶þ½Ú£ºAddDocTemplate(pDocTemplate); 5
µÚÈý½Ú£ºProcessShellCommand(cmdInfo) 5
µÚÒ»¶ÎAfxGetApp()->OnCmdMsg(¡­) 6
µÚ¶þ¶ÎOnFileNew(); 6
µÚËÄ½Ú £ºm_pMainWnd->ShowWindow(SW_SHOW); ///ÏÔʾ´°¿Ú 8
µÚÎå½Ú £ºm_pMainWnd-> UpdateWindow (); ///ÖØ»­´°¿Ú 8
µÚËÄÕÂpApp->Runº¯Êý 8
µÚÎåÕÂ×ܽá 8

  ±¾ÎĽ«Õë¶ÔÒ»¸öµ¥ÎĵµÀ´ÃèÊöMFCµÄÎĵµ/ÊÓͼ½á¹¹£¬ËûÖ±½Ó´ò¿ªMFCµÄÔ´´úÂë½øÐзÖÎö£¬ÔÚ·ÖÎö¹ý³ÌÖÐÈ¥µôÁËÎ޹صIJ¿·Ö¡£ËùÒÔµÚÒ»²½¾ÍÊÇÒª´´½¨Ò»¸ö³ÆÎªFirstµÃ¹¤³Ì£¬ÎĵµÀàÐÍÊǵ¥Îĵµ£¬ÏÂÎĽ«Î§ÈÆÕâ¸ö¹¤³ÌÀ´½²µÄ¡£
µÚÒ»ÕÂÕÒ»ØWinMainº¯Êý
Ê×ÏÈÔÚVCµÄ°²×°Â·¾¶ÖÐÕÒµ½WINMAIN.CPPÎļþ£¬AfxWinMainº¯Êý¾ÍÊÇVC±àÒëÆ÷µÄÈë¿Ú£¬È¥µôһЩ²»ÖØÒªµÄ¶«Î÷ºóµÃµ½ÈçϵóÌÐò¡£
int AFXAPI AfxWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{
int nReturnCode = -1;
CWinApp* pApp = AfxGetApp(); ///»ñȡӦÓóÌÐòÀàµÄÖ¸ÕëÓëÎĵµÊÓͼÎ޹ء£
AfxWinInit(hInstance, hPrevInstance,lpCmdLine,nCmdShow); ///ÓëÎĵµÊÓͼÎ޹ء£
pApp->InitApplication();  ///³õʼ»¯Ó¦ÓóÌÐòÏê¼ûÏÂÎÄ¡£
pApp->InitInstance();     ///×îÖØÒªÏÂÃæÏéÊö
nReturnCode = pApp->Run();///ÏûϢѭ»·Ö±µ½Ó¦ÓóÌÐò±»¹Ø±Õ¡£ÓëÎĵµÊÓͼÎ޹ء£
AfxWinTerm();      ///ÓëÎĵµÊÓͼÎ޹ء£
return nReturnCode;///Õû¸öÓ¦ÓýáÊø¡£
}
ÏÂÃæ·Ö½Ú½²Êö¡£
µÚ¶þÕÂInitApplication()º¯Êý
ÔÚÎļþAppcore.cppÎļþÖÐInitApplicationÈçÏ£º
BOOL CWinApp::InitApplication()
{
 if (CDocManager::pStaticDocManager != NULL)   ///Õâ¶ÎºÍÎÒÃǹØÏµ²»´ó,ÔÝʱ²»ÀíËü
 {
  if (m_pDocManager == NULL)
   m_pDocManager = CDocManager::pStaticDocManager;
  CDocManager::pStaticDocManager = NULL;
 }

 if (m_pDocManager != NULL)
  m_pDocManager->AddDocTemplate(NULL);
 else
  CDocManager::bStaticInit = FALSE;  /*ÎÒÃǵijÌÐò½«»áÖ´Ðе½Õâ¾ä,±íʾÎĵµÀàÓö¯Ì¬·½Ê½´´½¨,Ò²¾ÍÊÇ˵ÓÃRUNTIME_CLASSÀ´´´½¨µÄ(Ïê¼ûÏÂÎÄ)¡£*/
 return TRUE;
}
  ˵Ã÷£ºCDocManagerÀàÊÇÒ»¸ö²»¹«¿ªµÄÀ࣬ËûÖ÷ÒªÓÃÀ´¹ÜÀí¶àÎĵµÄ£°å¶ÔÏóµÄ£¬¶ÔÓÚµ¥ÎĵµÖ»ÓÐÒ»¸öÎĵµÄ£°åÕâ¸öÀ಻ÊǺÜÖØÒª£¬µ«»¹ÊÇÓÃËü¹ÜÀíÎĵµÄ£°åµÄ£»±¾ÎÄÖ»ÔÚÏà¹ØÖ®´¦×÷˵Ã÷¡£bStaticInitÊÇËüµÄÒ»¸ö¾²Ì¬³ÉÔ±¡£
µÚÈýÕÂInitInstance ()º¯Êý
  ËüÒ»°ã±»ÖØÔØ£¬ÔÚFirst¹¤³ÌÖУ¬InitInstanceÖкÍÎĵµÊÓͼÀàÓйصijÌÐòÓÐÏÂÃæµÄһЩ£º

 CSingleDocTemplate* pDocTemplate;  ///¶¨ÒåÖ¸Õë
 pDocTemplate = new CSingleDocTemplate(
  IDR_MAINFRAME,
  RUNTIME_CLASS(CFirstDoc),
  RUNTIME_CLASS(CMainFrame),
  RUNTIME_CLASS(CFirstView));    ///ÕâÌõÓï¾äµÄ×÷ÓüûµÚÒ»¶Î
 AddDocTemplate(pDocTemplate);

 CCommandLineInfo cmdInfo;    ///¶¨ÒåÒ»¸ö¶ÔÏó
 ParseCommandLine(cmdInfo);    ///½âÎöÃüÁîÐв¢·¢ËͲÎÊý£¬ÓëÎĵµÊÓͼÎÞ¹Ø

 if (!ProcessShellCommand(cmdInfo))   ///ÕâÊÇ×îÖØÒªµÄÏê¼ûµÄÈý¶Î
  return FALSE;

 m_pMainWnd->ShowWindow(SW_SHOW);      ///ÏÔʾ´°¿Ú
 m_pMainWnd->UpdateWindow();
µÚÒ»½Ú£ºnew CSingleDocTemplate
new CSingleDocTemplateÆäʵ¾ÍÊÇ´´½¨Ò»¸öCSingleDocTemplate¶ÔÏó²¢µ÷ÓÃËûµÄ¹¹Ô캯Êý£¬Òª½²Çå³þÕâ¾ä»°£¬Ê×ÏȱØÐëÃ÷°×RUNTIME_CLASS½á¹¹£¬RUNTIME_CLASS½á¹¹¶¨ÒåÈçÏ£º
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
ÓÚÊÇÕâ¾ä»°Õ¹¿ªºóÈçÏÂ(¹ØÓÚ·ûºÏ##µÄ¾ßÌåÒâÒå²Î¼ûMSDN)£º
 pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
(CRuntimeClass*)(&CFirstDoc::classCFirstDoc),
(CRuntimeClass*)(&CMainFrame::classCMainFrame),
(CRuntimeClass*)(&CFirstView::classCFirstView));
ÕâʱÎÒÃǻᷢÏÖCfirstDoc£¬CmainFrame£¬CfirstView¸÷»á¶àð³öÒ»¸ö¾²Ì¬³ÉÔ±³öÀ´£¬Ëü¾¿¾¹ÔÚÄÄÀïÄØ£¿²é¿´ÕâÈý¸öÀàµÄ¶¨ÒåÎÒÃǻᷢÏÖÿ¸öÀඨÒå¶¼ÓÐÒ»¸öºêDECLARE_DYNCREATE£¬ÔÚʵÏÖÎļþÖÐÓÐÁíÍâÒ»¸öºêIMPLEMENT_DYNCREATE¡£ÏÂÃæ°ÑÕâЩºêµÄÕ¹¿ªÇé¿öÁгöÈçÏ£º
£¨1£©ÎĵµÀà
DECLARE_DYNCREATE(CFirstDoc) Õ¹¿ªºóΪ£º
public: 
 static const CRuntimeClass classCFirstDoc; ///Õâ¾ÍÊÇÉÏÃæËù˵µÄÄǸö¾²Ì¬³ÉÔ±
 virtual CRuntimeClass* GetRuntimeClass() const;
 static CObject* PASCAL CreateObject();

IMPLEMENT_DYNCREATE(CFirstDoc, CDocument)  Õ¹¿ªºóΪ£º
 CObject* PASCAL CFirstDoc::CreateObject()
  { return new CFirstDoc; }
 const CRuntimeClass CFirstDoc::classCFirstDoc= {
  "CFirstDoc", sizeof(class CFirstDoc), 0xFFFF, CFirstDoc::CreateObject,    (CRu
ntimeClass*)(&CDocument::classCDocument), NULL };
 CRuntimeClass* CFirstDoc::GetRuntimeClass() const
  { return (CRuntimeClass*)(&CFirstDoc::classCFirstDoc); }
£¨2£©ÊÓͼÀà
DECLARE_DYNCREATE(CFirstView)  Õ¹¿ªºóΪ£º
public: 
 static const CRuntimeClass classCFirstView;
 virtual CRuntimeClass* GetRuntimeClass() const;
 static CObject* PASCAL CreateObject();

IMPLEMENT_DYNCREATE(CFirstView, CView)  Õ¹¿ªºóΪ£º
 CObject* PASCAL CFirstView::CreateObject()
  { return new CFirstView; }
 const CRuntimeClass CFirstView::classCFirstView = {
  " CFirstView ", sizeof(class CFirstView), 0xFFFF, CFirstView::CreateObject,    (CRu
ntimeClass*)(&CView::classCView), NULL };
 CRuntimeClass* CFirstView::GetRuntimeClass() const
  { return (CRuntimeClass*)(& CFirstView::classCFirstView); }
£¨3£©Ö÷¿ò¼ÜÀà
DECLARE_DYNCREATE(CMainFrame)  Õ¹¿ªºóΪ£º
public: 
 static const CRuntimeClass classCMainFrame;
 virtual CRuntimeClass* GetRuntimeClass() const;
 static CObject* PASCAL CreateObject();

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)  Õ¹¿ªºóΪ£º
 CObject* PASCAL CMainFrame::CreateObject()
  { return new CMainFrame; }
 const CRuntimeClass CMainFrame::classCMainFrame = {
  "CMainFrame", sizeof(class CMainFrame), 0xFFFF, CMainFrame::CreateObject,    (CRu
ntimeClass*)(& CFrameWnd::classCFrameWnd), NULL };
 CRuntimeClass* CMainFrame::GetRuntimeClass() const
  { return (CRuntimeClass*)(&CMainFrame::classCMainFrame); }

  ÕâЩºêÊ×ÏÈÔÚÄãµÄ¶¨ÒåÎļþÖж¨ÒåÒ»¸öÒÔclass+ÀàÃûΪÃû×ֵľ²Ì¬±äÁ¿¡£È»ºó¶¨ÒåÒ»¸ö·µ»ØÕâ¸ö¾²Ì¬±äÁ¿µÄº¯ÊýGetRuntimeClass²¢ÔÚʵÏÖÎļþÖÐʵÏÖÖ®¡£×îºó¶¨Ò岢ʵÏÖÒ»¸ö´´½¨¶ÔÏóµÄº¯ÊýCreateObject¡£

ºÃÁË£¬ÎÒÃÇÏÖÔÚ¾ÍÀ´¿´¿´CSingleDocTemplate¶ÔÏóµÄ¹¹Ô캯Êý×öÁËЩʲô£ºÏÂÃæÊÇËûµÄʵÏÖ
CSingleDocTemplate::CSingleDocTemplate(UINT nIDResource,
 CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass,
 CRuntimeClass* pViewClass)
  : CDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
{
 m_pOnlyDoc = NULL;
}
ËüÖ÷ÒªÊdzõʼ»¯ËûµÄ¸¸ÀàCDocTemplate,CDocTemplate×öÁËЩʲô£¿ÈçÏ£º
{
<1>°Ñ×ÊÔ´ID¼°Îĵµ¡¢¿ò¼Ü¡¢ÊÓͼµÄÈý¸öCRuntimeClass½á¹¹µÄ¾²Ì¬³ÉÔ±µÄµØÖ·(Ò²¾ÍÊÇ´«½øÀ´µÄËĸö²ÎÊý) ±£´æÁËÆðÀ´¡£
<2>LoadTemplate();///Ϊָ¶¨µÄÎĵµÄ£°å¶ÔÏó×°ÔØ×ÊÔ´
}
ÖÁ´ËÕâ¸önewÓï¾ä×ÜËã½²ÍêÁË¡£
µÚ¶þ½Ú£ºAddDocTemplate(pDocTemplate);
ÏÂÃæÊÇËûµÄʵÏÖº¯Êý
void CWinApp::AddDocTemplate(CDocTemplate* pTemplate)
{
 if (m_pDocManager == NULL)
m_pDocManager = new CDocManager; /*´´½¨Ò»¸öÎĵµ¹ÜÀíÀ࣬¶ÔÓÚµ¥Îĵµ³£³£Ö»ÓÐÒ»¸öÎĵµÄ£°åÓÃCDocManagerÀಢ²»ÊǺÜÖØÒª,ÎÒÃÇ¿ÉÒÔºöÂÔÕâ¾ä*/
 m_pDocManager->AddDocTemplate(pTemplate); /*°ÑÎĵµÄ£°åÖ¸Õë±£´æÔÚCDocManagerʵÀýÖÐÓÉCDocManagerÈ¥¹ÜÀíËû,ÎÒÃÇÖ»ÒªÖªµÀÓÐÕâ¸öʾÍÐÐÁË*/
}
µÚÈý½Ú£ºProcessShellCommand(cmdInfo)
   Õâ¸öº¯Êý·¢Ë͵ÄÒ»¸öÃüÁî¾ÍÊÇFileNewÆäËûµÄÔÝʱ²»¹ÜËû£¬ÆäʵËùÓеÄÎĵµÀ࣬¿ò¼ÜÀ࣬ÊÓͼÀà¶¼ÊÇÔÚÕâ¸öº¯ÊýÖд´½¨µÄ£¬ÔÚµÚÒ»¶ÎÖÐÒѾ­½²µ½Ó¦ÓóÌÐòÀཫÉÏÈý¸öÀàµÄCRuntimeClassÒ»¸ö¾²Ì¬³ÉÔ±µØÖ·±£´æÆðÀ´ÁË£¬¹ØÓÚCRuntimeClass½á¹¹µÄ¾ßÌ幦ÄܲÎÕÕMSDN¡£
ProcessShellCommandÃèÊöÈçÏÂ:
BOOL CWinApp::ProcessShellCommand(CCommandLineInfo& rCmdInfo)
{
 BOOL bResult = TRUE;
 switch (rCmdInfo.m_nShellCommand)
 {
 case CCommandLineInfo::FileNew:
  if (!AfxGetApp()->OnCmdMsg(ID_FILE_NEW, 0, NULL, NULL))
   OnFileNew();
  if (m_pMainWnd == NULL)
   bResult = FALSE;
  break;
 case CCommandLineInfo::FileOpen:
  if (!OpenDocumentFile(rCmdInfo.m_strFileName))
   bResult = FALSE;
  break;
¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­.///»¹ÓкܶàÏûÏ¢´¦ÀíÂÔÈ¥
 }
 return bResult;
}
µÚÒ»¶ÎAfxGetApp()->OnCmdMsg(¡­)
AfxGetApp()->OnCmdMsgÖ÷ÒªÊÇÅÉ·¢ÃüÁîÏûÏ¢£¬¸úÎÒÃǹØÏµ×î´óµÄÏûÏ¢ÊDz˵¥ÃüÁîID_FILE_NEW£¬ÏÂÃæ½²ÊöËûµÄ´¦Àíº¯ÊýOnFileNew
µÚ¶þ¶ÎOnFileNew();
 OnFileNewÖ»ÊǼòµ¥µÄµ÷ÓÃÎĵµ¹ÜÀí¶ÔÏóµÄͬÃûº¯Êý,ËûµÄÃèÊöÈçÏ£º
void CWinApp::OnFileNew()
{
 if (m_pDocManager != NULL)
  m_pDocManager->OnFileNew();///Ö»Êǵ÷ÓÃCDocManager::OnFileNew
}
Îĵµ¹ÜÀíÀàµÄOnFileNewÈ¥µôһЩûÓõĶ«Î÷ºóʵÏÖÈçÏ£º
void CDocManager::OnFileNew()
{
 CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead();/*»ñµÃµÚÒ»¸öÎĵµÄ£°å,¶ÔÓÚµ¥ÎĵµÖ»ÓÐÒ»¸öÎĵµÄ£°å*/
 if (m_templateList.GetCount() > 1)///¶Ôµ¥ÎĵµÕâ¶ÎûÓÃ
 {
  CNewTypeDlg dlg(&m_templateList);
  int nID = dlg.DoModal();
  if (nID == IDOK)
   pTemplate = dlg.m_pSelectedTemplate;
  else
   return;     /// none - cancel operation
 }
 pTemplate->OpenDocumentFile(NULL);/*ÆäʵÊǵ÷ÓÃCSingleDocTemplate::OpenDocumentFileº¯ÊýÏÂÃæÏéÊöÕâÀï,ÒòΪÔÚCDocTemplate ÀàÖÐÕâ¸öº¯ÊýÊÇÒ»¸ö´¿Ð麯Êý*/
}
ÏÂÃæ¼òÊöpTemplate->OpenDocumentFile(NULL);Õâ¸öº¯Êý£¬
ÕâÊÇ×îÖØÒªµÄÒ»¸öº¯Êý,ËûÖ´ÐÐÁËÈçÏÂ6¸ö²½Ö裺

<1>pDocument = CreateNewDocument();///´´½¨Ò»¸öÐÂÎĵµ
   {
CDocument* pDocument = (CDocument*)m_pDocClass->CreateObject();/*ÕâÊDzÅÕæÕýµÄ´´½¨Îĵµ¶ÔÏó£¬ÕâÀï´´½¨µÄÎĵµ¶ÔÏó¾ÍÊÇÉÏÃæRUNTIME_CLASS(CFirstDoc),ÖеĶÔÏóÕâÊÇMFC¿ª·¢ÈËÔ±Ïë³öÀ´µÄÒ»ÖÖÔËÐÐʱ´´½¨¶ÔÏóµÄ·½·¨£¬Ó¦¸Ã˵±È½Ï²»´íµÄ,²»ÖªµÀC++BuilderµÄÊÇÔõÑù¹¹ÔìµÄ¡£*/
  AddDocument(pDocument);  ///°Ñ´´½¨µÄ¶ÔÏóÖ¸Õë¼Ç¼ÏÂÀ´£¬ÒÔºó»¹ÒªÓõġ£
}
<2> pFrame = CreateNewFrame(pDocument, NULL);  /*¸ù¾ÝÐÂÎĵµÖ¸Õë´´½¨ÐÂÎĵµ¿ò¼Ü,Õâ¸ö±È½ÏÖØÒªÏÂÒ»¶ÎÃèÊö*/
<3>SetDefaultTitle(pDocument);  ///ÉèÖÃȱʡ±êÌ⣬²»ÖØÒªµÄ
<4>pDocument->OnNewDocument()   ///Çå³ýÀÏÎĵµÄÚÈÝ
{
 DeleteContents();   ///ɾ³ýÔ­À´µÄÄÚÈݶø²»¹ÜÊÇ·ñ´æÅÌ
 SetModifiedFlag(FALSE);   ///Çå³ýÔø¾­Ð޸ĹýµÄ±ê¼Ç
}
<5>pThread->m_pMainWnd = pFrame;  ///¿ò¼Ü´°¿Ú×÷ΪµÄÖ¸Õë×÷ΪÖ÷´°¿ÚµÄÖ¸Õë
<.6>InitialUpdateFrame(pFrame, pDocument, bMakeVisible);   /*ʹ¿ò¼ÜÖеÄÊÓͼ´°¿Ú½ÓÊܵ½OnInitialUpdatµÄµ÷ÓÃ,²¢×÷ԭʼ¸üС£*/

ÖÁ´ËµÚÒ»¶ÎµÄOnFileNewº¯Êý×ÜËã½²Íê¡£ÏÂÃæ½²<2> CreateNewFrameº¯Êý
CreateNewFrameÊÇCDocTemplateµÄ³ÉÔ±º¯ÊýÈçÏÂ3¸ö²½Ö裺
<2.1>CCreateContext context;    ///´´½¨CcreateContext¶ÔÏó.Ò²¾ÍÊÇÎÒÃÇÖØÔØLoadFrameº¯ÊýµÄÄǸöCcreateContextµÄÀ´Ô´*/
context.m_pCurrentFrame = pOther;  ///±£´æµ±Ç°¿ò¼Ü£¬Ò»°ãΪNULL
context.m_pCurrentDoc = pDoc;     ///±£´æÎĵµ¶ÔÏóÖ¸Õë
context.m_pNewViewClass = m_pViewClass;  ///±£´æÊÓͼ¶ÔÏóÖ¸Õë
context.m_pNewDocTemplate = this;       ///±£´æÎĵµÄ£°åµÄÖ¸Õë¡£
<2.2>CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject(); ///ÕæÕý´´½¨¿ò¼ÜµÄ¶ÔÏó
<2.3>pFrame->LoadFrame(m_nIDResource,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,  
   NULL, &context)   ///¼ÓÔØ×ÊÔ´£¬ÕâÊÇ×îÖØÒªµÄ£¬ÏÂÃæ½²Êö
{
<2.3.1> GetIconWndClass(dwDefaultStyle, nIDResource)   ///¼ÓÔØ×ÊÔ´²¢×¢²á´°¿Ú
 {
  AfxFindResourceHandle
  ::LoadIcon  ///¼ÓÔØ¹â±ê×ÊÔ´
  CREATESTRUCT cs;  ///´´½¨Ò»¸öCREATESTRUCT½á¹¹ÊµÀý
  PreCreateWindow(cs);   /*µ÷Óô°¿ÚÔ¤´´½¨º¯Êý£¬Õâ¸öº¯ÊýÎÒÃÇ¿ÉÒÔÖØÔØµÄ
  ¸ù¾Ýcsµ÷Óà AfxRegisterWndClass×¢²á¿ò¼Ü´°¿Ú*/
}
<2.3.2> Create(¡­)  ///´´½¨¿ò¼Ü´°¿Ú,ºóÃæÏéÊö£¬´Ë´¦ÔÝʱ²»½²¡£
<2.3.3> m_hMenuDefault = ::GetMenu(m_hWnd);  ///»ñÈ¡²¢±£´æ²Ëµ¥¾ä±ú
<2.3.4> LoadAccelTable(MAKEINTRESOURCE(nIDResource));  ///×°ÔØ¼ÓËÙ¼ü±í
}
  ÏÂÃæ½²Createº¯Êý£¬ÈçÏÂ4¸ö²½Ö裺
  <2.3.2.1>hMenu = ::LoadMenu(hInst, lpszMenuName);  ///¼ÓÔØ²Ëµ¥
<2.3.2.2>CREATESTRUCT cs;  ///´´½¨Ò»¸öCREATESTRUCT½á¹¹ÊµÀý
cs.lpCreateParams = lpParam;  ///(´ËʱµÄlpParam¾ÍÊÇ<2.1>½¨µÄcontext¶ÔÏóÖ¸Õë)
<2.3.2.3> PreCreateWindow(cs);  ///µ÷Óô°¿ÚÔ¤´´½¨º¯Êý£¬Õâ¸öº¯ÊýÎÒÃÇ¿ÉÒÔÖØÔØµÄ,ÓÖµ÷ÓÃÒ»´Î
<2.3.2.4>µ÷ÓÃAPIº¯Êý::CreateWindowExÕæÕý´´½¨¿ò¼Ü´°¿Ú£¬´´½¨¹ý³ÌÖлᷢ³öWM_CREATEºÍWM_NCCREATEµÈÏûÏ¢¡£
ÏÂÃæ½²½ÓÊÕWM_CREATEÏûÏ¢µÄÏûÏ¢´¦Àíº¯ÊýCMainFrame::OnCreate£¬ÆäËûÏûÏ¢²»ÖØÒª
<2.3.2.3.1>CMainFrame::OnCreate×îÖØÒªµÄÊǵ÷ÓÃCFrameWnd::OnCreateHelperº¯ÊýÈçÏÂ:
{
<1>CWnd::OnCreate(lpcs);  ///µ÷ÓÃȱʡµÄ
<2>µ÷ÓÿÉÖØÔØº¯ÊýOnCreateClient(lpcs,pContext)º¯Êý, ÔÚOnCreateClientº¯ÊýÄÚÖ»Êǵ÷ÓÃCreateView(pContext, AFX_IDW_PANE_FIRST)º¯Êý;
CreateViewº¯Êý²½ÖèÈçÏ£º
{
<2.1> pView=pContext->m_pNewViewClass->CreateObject(); /*´´½¨ÊÓͼ¶ÔÏó*/
<2.2>pView->Create(¡­);/*µ÷ÓÃÊÓͼ¶ÔÏóµÄCreateº¯ÊýÕæÕý´´½¨ÊÓͼ,Æä¸üÏêϸµÄ¶¯×÷¿ÉÒÔ²»ÀíËû£¬µ«ÒªÖªµÀÕâÀï»á·¢ÉúºÜ¶àÊÂÇé(¸ú´´½¨¿ò¼Ü´°¿ÚÀàËÆµÄ)£»ÆäËûһЩ²»ÖØÒªµÄ¶¯×÷¿ÉÒÔ²»ÀíËû£»*/
}
<3>PostMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);/*·¢Ò»¸öWM_SETMESSAGESTRINGÏûÏ¢³õʼ»¯ÏûÏ¢´®*/
<4>RecalcLayout();  ///ÖØ¶¨¿ØÖÆÀ¸µÈÎ޹ض¯×÷
}
<2.3.2.3.2> m_wndToolBar.CreateEx;   ///´´½¨¹¤¾ßÀ¸
<2.3.2.3.3> LoadToolBar;  /Í£¿¿¹¤¾ßÀ¸µÈÎ޹ض¯×÷
ÖÁ´ËWM_CREATEÏûÏ¢´¦Àí½²Í꣬ͬʱµÚÈý¶ÎµÄProcessShellCommandº¯ÊýÒ²½áÊøÁË
 
µÚËÄ½Ú £ºm_pMainWnd->ShowWindow(SW_SHOW); ///ÏÔʾ´°¿Ú
µÚÎå½Ú £ºm_pMainWnd-> UpdateWindow (); ///ÖØ»­´°¿Ú
ÖÁ´ËµÚ¶þ½ÚInitInstance ()º¯Êý½²Íê,
µÚËÄÕÂpApp->Runº¯Êý
Runº¯Êý´¦ÀíÏûϢѭ»·Ö±µ½³ÌÐòÍÆ³ö£¬ÒѾ­ÓкܶàÊé¼®½²µ½ËûµÄ¹ý³Ì£¬±¾ÎIJ»ÃèÊöËû¡£
µÚÎåÕÂ×ܽá
´ÓÉÏÃæµÄÃèÊöÖпÉÒÔ¿´³ö£¬Îĵµ/ÊÓͼ½á¹¹µÄ¹Ø¼üÔÚCRuntimeClass½á¹¹£¬Í¨¹ýCRuntimeClass½á¹¹ÊµÏÖ¶¯Ì¬´´½¨¶ÔÏó¡£
ÂÞÀïÂÞིÁËÕâô¶à£¬Ï£Íû¶ÔѧMFCµÄÈËÃÇ»áÓаïÖú£¬µ±È»ÉÏÃæµÄÃèÊöÖп϶¨»áÓдíÎóµÄµØ·½ºÍ²»×ãÖ®´¦£¬Ï£ÍûÔĶÁÕßÖ¸³ö£¬Ö»ÓÐÕâÑù²ÅÄÜ´ïµ½¹²Í¬½ø²½µÄÄ¿µÄ¡£

·¢±íÓÚ£º 2005-11-10£¬ÐÞ¸ÄÓÚ£º 2005-11-10 09:01£¬ÒÑä¯ÀÀ652´Î£¬ÓÐÆÀÂÛ0Ìõ ÍÆ¼ö ͶËß

¸øÎÒÁôÑÔ
°æÈ¨ËùÓÐ ChinaUnix.net Ò³ÃæÉú³Éʱ¼ä£º0.08379