龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++深入详解:MFC框架窗口(1)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
1.设计和注册窗口 有了WinMain函数,根据创建Win32应用程序的步骤,接下来应该是设计窗口类和注册窗口类了。MFC已经为我们预定义了一些默认的标准窗口类,只需要选择所需的窗口类

  1.设计和注册窗口

  有了WinMain函数,根据创建Win32应用程序的步骤,接下来应该是设计窗口类和注册窗口类了。MFC已经为我们预定义了一些默认的标准窗口类,只需要选择所需的窗口类,然后注册就可以了。窗口类的注册是由AfxEndDeferRegisterClass函数完成的,该函数的定义位于WINCORE.CPP文件中。其定义代码较长,由于篇幅所限,在这里仅列出部分代码,如例3-10所示。

  例3-10

  BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister)
  {
  ……
    // common initialization
    WNDCLASS wndcls;
    memset(&wndcls, 0, sizeof(WNDCLASS));  // start with NULL defaults
  ① wndcls.lpfnWndProc = DefWindowProc;
    wndcls.hInstance = AfxGetInstanceHandle();
    wndcls.hCursor = afxData.hcurArrow;
  ……
    // work to register classes as specified by fToRegister, populate fRegisteredClasses as we go
    if (fToRegister & AFX_WND_REG)
    {
      // Child windows - no brush, no icon, safest default class styles
      wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
      wndcls.lpszClassName = _afxWnd;
      if (AfxRegisterClass(&wndcls))
        fRegisteredClasses |= AFX_WND_REG;
    }
    if (fToRegister & AFX_WNDOLECONTROL_REG)
    {
      // OLE Control windows - use parent DC for speed
      wndcls.style |= CS_PARENTDC | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
      wndcls.lpszClassName = _afxWndOleControl;
      if (AfxRegisterClass(&wndcls))
        fRegisteredClasses |= AFX_WNDOLECONTROL_REG;
    }
  ……
    if (fToRegister & AFX_WNDMDIFRAME_REG)
    {
      // MDI Frame window (also used for splitter window)
      wndcls.style = CS_DBLCLKS;
      wndcls.hbrBackground = NULL;
      if (_AfxRegisterWithIcon(&wndcls, _afxWndMDIFrame, AFX_IDI_STD_ MDIFRAME))
        fRegisteredClasses |= AFX_WNDMDIFRAME_REG;
    }
    if (fToRegister & AFX_WNDFRAMEORVIEW_REG)
    {
      // SDI Frame or MDI Child windows or views - normal colors
      wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
      wndcls.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
if (_AfxRegisterWithIcon(&wndcls, _afxWndFrameOrView, AFX_IDI_STD _FRAME))
        fRegisteredClasses |= AFX_WNDFRAMEORVIEW_REG;
    }
  ……
  }

精彩图集

赞助商链接