友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第130章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






                     WINFRM。CPP 



                    // CFrameWnd second phase creation 

                    BOOL CFrameWnd::PreCreateWindow(CREATESTRUCT& cs) 

                    { 

                        if (cs。lpszClass == NULL) 

                        { 

                            AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG); 

                            cs。lpszClass = _afxWndFrameOrView;  // COLOR_WINDOW background 

                        } 

                        。。。 

                    } 



                    其中AfxDeferRegisterClass  是一个定义于AFXIMPL。H  中的宏。 



380 


…………………………………………………………Page 443……………………………………………………………

                                                       第6章    MFC 程式的生死因果 



 AFXIMPL。H 



#define AfxDeferRegisterClass (fClass)  

  ((afxRegisteredClasses & fClass) ? TRUE : AfxEndDeferRegisterClass (fClass)) 



这个宏表示,如果变量afxRegisteredClasses  的值显示系统已经注册了fClass  这种视 



窗类别,MFC 就啥也不做;否则就调用AfxEndDeferRegisterClass(fClass),准备注册之。 



afxRegisteredClasses 定义于AFXWIN。H ,是一个旗标变量,用来记录已经注册了哪些视 



窗类别: 



// in AFXWIN。H 

#define afxRegisteredClasses  AfxGetModuleState()…》m_fRegisteredClasses 



 WINCORE。CPP : 



#0001  BOOL AFXAPI AfxEndDeferRegisterClass (short fClass) 

#0002  { 

#0003      BOOL bResult = FALSE; 

#0004 

#0005      // mon initialization 

#0006      WNDCLASS wndcls; 

#0007      memset(&wndcls; 0; sizeof(WNDCLASS));   // start with NULL defaults 

#0008      wndcls。lpfnWndProc = DefWindowProc; 

#0009      wndcls。hInstance = AfxGetInstanceHandle(); 

#0010      wndcls。hCursor = afxData。hcurArrow; 

#0011 

#0012      AFX_MODULE_STATE* pModuleState = AfxGetModuleState(); 

#0013      if (fClass & AFX_WND_REG) 

#0014      { 

#0015          // Child windows no brush; no icon; safest default class styles 

#0016          wndcls。style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; 

#0017          wndcls。lpszClassName = _afxWnd; 

#0018          bResult =  AfxRegisterClass(&wndcls); 

#0019          if (bResult) 

#0020              pModuleState…》m_fRegisteredClasses |= AFX_WND_REG; 

#0021      } 

#0022      else if (fClass & AFX_WNDOLECONTROL_REG) 

#0023      { 

#0024          // OLE Control windows use parent DC for speed 

#0025          wndcls。style |= CS_PARENTDC | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; 

#0026          wndcls。lpszClassName = _afxWndOleControl; 

#0027          bResult =  AfxRegisterClass(&wndcls); 

#0028          if (bResult) 



                                                                                      381 


…………………………………………………………Page 444……………………………………………………………

                    第篇    湷觥 FC  程式設計 



                    #0029              pModuleState…》m_fRegisteredClasses |= AFX_WNDOLECONTROL_REG; 

                    #0030      } 

                    #0031      else if (fClass & AFX_WNDCONTROLBAR_REG) 

                    #0032      { 

                    #0033          // Control bar windows 

                    #0034          wndcls。style = 0;   // control bars don't handle double click 

                    #0035          wndcls。lpszClassName = _afxWndControlBar; 

                    #0036          wndcls。hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); 

                    #0037          bResult =  AfxRegisterClass(&wndcls); 

                    #0038          if (bResult) 

                    #0039              pModuleState…》m_fRegisteredClasses |= AFX_WNDCONTROLBAR_REG; 

                    #0040      } 

                    #0041      else if (fClass & AFX_WNDMDIFRAME_REG) 

                    #0042      { 

                    #0043          // MDI Frame window (also used for splitter window) 

                    #0044          wndcls。style = CS_DBLCLKS; 

                    #0045          wndcls。hbrBackground = NULL; 

                    #0046          bResult = RegisterWithIcon(&wndcls; _afxWndMDIFrame; 

                                                                    AFX_IDI_STD_MDIFRAME); 

                    #0047          if (bResult) 

                    #0048              pModuleState…》m_fRegisteredClasses |= AFX_WNDMDIFRAME_REG; 

                    #0049      } 

                    #0050      else if (fClass & AFX_WNDFRAMEORVIEW_REG) 

                    #0051      { 

                    #0052          // SDI Frame or MDI Child windows or views normal colors 

                    #0053          wndcls。style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; 

                    #0054          wndcls。hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); 

                    #0055          bResult = RegisterWithIcon(&wndcls; _afxWndFrameOrView; 

                                                                    AFX_IDI_STD_FRAME); 

                    #0056          if (bResult) 

                    #0057              pModuleState…》m_fRegisteredClasses |= AFX_WNDFRAMEORVIEW_REG; 

                    #0058      } 

                    #0059      else if (fClass & AFX_WNDMCTLS_REG) 

                    #0060      { 

                    #0061          InitmonControls(); 

                    #0062          bResult = TRUE; 

                    #0063          pModuleState…》m_fRegisteredClasses |= AFX_WNDMCTLS_REG; 

                    #0064      } 

                    #0065 

                    #0066      return bResult; 

                    #0067  } 



382 


…………………………………………………………Page 445……………………………………………………………

                                                 第6章    MFC 程式的生死因果 



出现在上述函数中的六个窗口类别卷标代码,分别定义于AFXIMPL。H  中: 



#define AFX_WND_REG               (0x0001) 

#define AFX_WNDCONTROLBAR_REG    (0x0002) 

#define AFX_WNDMDIFRAME_REG      (0x0004) 

#define AFX_WNDFRAMEORVIEW_REG  (0x0008) 

#define AFX_WNDMCTLS_REG      (0x0010) 

#define AFX_WNDOLECONTROL_REG     (0x0020) 



出现在上述函数中的五
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!