第一次調用:  
   
  BOOL   CFrameWnd::LoadFrame(UINT   nIDResource,   DWORD   dwDefaultStyle,  
  CWnd*   pParentWnd,   CCreateContext*   pContext)  
  {  
  …………  
   
  //◆◆◆正是GetIconWndClass第一次調用了PreCreateWindow◆◆◆  
  LPCTSTR   lpszClass   =   GetIconWndClass(dwDefaultStyle,   nIDResource);  
  LPCTSTR   lpszTitle   =   m_strTitle;  
  //◆◆◆這裏是第二次調用,看後面◆◆◆  
  if   (!Create(lpszClass,   lpszTitle,   dwDefaultStyle,   rectDefault,  
      pParentWnd,   MAKEINTRESOURCE(nIDResource),   0L,   pContext))  
  {  
  return   FALSE;       //   will   self   destruct   on   failure   normally  
  }  
   
  …………  
   
  return   TRUE;  
  }  
   
   
  LPCTSTR   CFrameWnd::GetIconWndClass(DWORD   dwDefaultStyle,   UINT   nIDResource)  
  {  
  …………  
  if   (hIcon   !=   NULL)  
  {  
  CREATESTRUCT   cs;  
  memset(&cs,   0,   sizeof(CREATESTRUCT));  
  cs.style   =   dwDefaultStyle;  
  //◆◆◆就在這裏◆◆◆  
  PreCreateWindow(cs);  
  …………  
  }  
  return   NULL;                 //   just   use   the   default  
  }  
   
   
  第二次調用:  
   
   
  BOOL   CFrameWnd::Create(LPCTSTR   lpszClassName,  
  LPCTSTR   lpszWindowName,  
  DWORD   dwStyle,  
  const   RECT&   rect,  
  CWnd*   pParentWnd,  
  LPCTSTR   lpszMenuName,  
  DWORD   dwExStyle,  
  CCreateContext*   pContext)  
  {  
  …………  
  //◆◆◆調用CreateEx◆◆◆  
  if   (!CreateEx(……))  
  …………  
  }  
   
   
  BOOL   CWnd::CreateEx(DWORD   dwExStyle,   LPCTSTR   lpszClassName,  
  LPCTSTR   lpszWindowName,   DWORD   dwStyle,  
  int   x,   int   y,   int   nWidth,   int   nHeight,  
  HWND   hWndParent,   HMENU   nIDorHMenu,   LPVOID   lpParam)  
  {  
  …………  
  //◆◆◆這裏調用了。◆◆◆  
  if   (!PreCreateWindow(cs))  
  {  
  PostNcDestroy();  
  return   FALSE;  
  }  
  …………  
  }
posted on 2009-06-03 21:10  jasonM  阅读(747)  评论(0编辑  收藏  举报