WEB开发网
开发学院软件开发VC VC 和 MFC 的一些常见问题 阅读

VC 和 MFC 的一些常见问题

 2007-03-30 21:32:12 来源:WEB开发网   
核心提示: 为了创建一个新视图,你可以用ClassWizard由CView派生一个新的类,VC 和 MFC 的一些常见问题(3),当新类创建以后,利用新视图或修改由AppWizard提供的视图,将RUNTIME_CLASS(CSomeView)改为RUNTIME_CLASS (CMyView),要想获

为了创建一个新视图,你可以用ClassWizard由CView派生一个新的类。当新类创建以后,利用新视图或修改由AppWizard提供的视图,两者的步骤是相同的。

修改视类的头文件,从而将所有对CView类的引用改名为你所想要的名称。本例中的类由CScrollView派生而来。通常,这个步骤包括对类的改变,视类将由如下方式派生而来:

class CMyView : public CScrollView

修改视类的实现文件,从而将所有对CView的引用改名为你所想要的名称。这包括将IMPLEMENT_DYNCREATE那一行的语句改为:

IMPLEMENT_DYNCREATE(CMyView, CScrollView)

将BEGIN_MESSAGE_MAP那一行的语句改为:

BEGIN_MESSAGE_MAP(CMyView, CScrollView)

并且将其他所有的CView改成CScrollView.

假如你修改的视图是由AppWizard生成的,那么就不需要作更多的修改了。而如果你在创建一个新视图,先在CWinApp::InitInstance()函数中找到对AddDocTemplate()函数的调用。AddDocTemplate()函数的第三个参数是RUNTIME_CLASS(CSomeView),用CMyView来代替CSomeView,就可以将当前视图改为新视图。在MDI应用程序中,你可以增加第二个AddDocTemplate()函数调用来使用多视图类型,将RUNTIME_CLASS(CSomeView)改为RUNTIME_CLASS (CMyView)。

要想获得更多的信息请参阅Q99562中相关文章《Switching Views in a Single Document Interface Program》 。

如何改变视图的背景色?

你可以通过处理WM_ERASEBKGND消息来改变CView、CFrameWnd或CWnd对象的背景色。请看如下的程序段:

 BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
 {
   // 设置所要求背景色的刷子
   CBrush backBrush(RGB(255, 128, 128));
   // 保存旧刷子
   CBrush* pOldBrush = pDC->SelectObject(&backBrush);
   CRect rect;
   pDC->GetClipBox(&rect);   // 擦除所需的区域
   pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
   pDC->SelectObject(pOldBrush);
   return TRUE;
 }
而我则用如下方法解决这个问题: HBRUSH dlgtest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 {
   switch (nCtlColor)
   {
     case CTLCOLOR_BTN:
     case CTLCOLOR_STATIC:
     {
       pDC->SetBkMode(TRANSPARENT);
     }
     case CTLCOLOR_DLG:
     {
       CBrush*   back_brush;
       COLORREF  color;
       color = (COLORREF) GetSysColor(COLOR_BTNFACE);
       back_brush = new CBrush(color);
       return (HBRUSH) (back_brush->m_hObject);
     }
   }
   return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
 }

如何得到当前视图?

上一页  1 2 3 4 5 6 7  下一页

Tags:VC MFC 一些

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接