中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 文档/视/框架
MFC开发常见问题的回答1:文档视图框架问题。(viewframedocument)
作者:111222 时间:2001-10-08 10:08 出处:互联网 责编:chinaitpower
              摘要:MFC开发常见问题的回答1:文档视图框架问题。(viewframedocument)

视图问答6则:


1,怎样改变视图的大小?

一般,你能改变试图大小依靠 MoveWindow()
MFC应用程序,视图是所围绕其框架的子窗口,获取其框架的指针GetParentFrame(),然后依靠MoveWindow()改变框架大小,视图大小自动跟随框架大小改变。

2,如何改变一个CFormView的大小?

首先,你要在你的CFormView中重载OnInitialUpdate()函数,该函数声明如下:
virtual void OnInitialUpdate();
在OnInitialUpdate()添加如下代码:
void ClikethisView::OnInitialUpdate()//ClikethisView从CFormView继承而来
{
    // Make the window the size of the main dialog.
    CFormView::OnInitialUpdate();
    GetParentFrame()->RecalcLayout();
    ResizeParentToFit( /*FALSE*/ );
}

3,如何改变一个视图的背景?

想改变CView、CFrameWnd或者CWnd的背景,需要处理WM_ERASEBKGND 消息。
像下面演示的这样:
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;
}

4,改变对话框背景颜色后,如何使控件的背景颜色和对话框背景颜色统一?

请看下面代码:  重载画控件的消息。
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));
}

 


5,如何获得当前视图的指针?

((CFrameWnd*) AfxGetApp()->m_pMainWnd))->GetActiveDocument();

或者

((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();


6,如何获得MDI程序的所有视图?

下面函数对你有用:
CDocument::GetFirstViewPosition(); // DOCCORE.CPP
CDocument::GetNextView(); // DOCCORE.CPP
CMultiDocTemplate::GetFirstDocPosition(); // DOCMULTI.CPP
CMultiDocTemplate::GetNextDoc(); // DOCMULTI.CPP

 

文档精彩问答:

1,如何获得当前文档指针?

参照:上面“如何获得当前视图指针?”

2,文档什么时候被破坏?

单文档程序的文档当程序退出时被破坏。
多文档程序在最后一个视图关闭时被破坏。

3,如何获得当前打开文档的列表?

下面代码,MyApp从CWinApp继承而来,MyApp的成员变量:
CPtrList m_templateList

void CMyApp::GetDocumentList(CObList * pDocList)
{
    ASSERT(pDocList->IsEmpty());
    POSITION pos = m_templateList.GetHeadPosition();
    while (pos)
    {
        CDocTemplate* pTemplate =
            (CDocTemplate*)m_templateList.GetNext(pos);
        POSITION pos2 = pTemplate->GetFirstDocPosition();
        while (pos2)
        {
            CDocument * pDocument;
            if ((pDocument=pTemplate->GetNextDoc(pos2)) != NULL)
                pDocList->AddHead(pDocument);
        }
    }
}

4,如何不叫我的程序自动打开文档?

在InitInstance()函数中
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有