• MFC下窗口分割和文字输出的实现


    在*VIEW类的函数ondraw()中可以由pDC->textout(x,y,string)来实现文字输出。

    但阿陆说在窗口分割之后并不能实现输出,而且两个窗口中都没有输出。我并不清楚他是怎样做窗口分割的。后来我实现了一下,思路是直接建立一个单文档工程。在本来已有一个CMfcTView类下再添一个视图类:CChildView。

    一、实现窗口分割的条件:在目标frame中添加分割对象,即在其头文件的class CMainFrame : public CFrameWnd下添加定义

    public:
     CSplitterWnd m_SplitterWnd1;
     CSplitterWnd m_SplitterWnd2;

    二、在目标frame中添加如下程序,即在创建窗口客户区时进行分割:

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
     
    // TODO: Add your specialized code here and/or call the base class
     
    // 创建拆分器窗口 
     if (!m_SplitterWnd1.CreateStatic(this21)) //2行1列
      return FALSE;
     
    //if (!m_SplitterWnd2.CreateStatic(&m_SplitterWnd1, 2, 1, WS_CHILD|WS_VISIBLE|WS_BORDER, m_SplitterWnd1.IdFromRowCol(0,1))) 
     
    // return FALSE;
     CRect rc;
     GetClientRect(rc);
     CSize sz
    =rc.Size();
     
    //创建message list view window CUErrcNasListView
     if (!m_SplitterWnd1.CreateView(00, RUNTIME_CLASS(CMfcTView), CSize(sz.cx*3/5, sz.cy), pContext)) 
     

      m_SplitterWnd1.DestroyWindow();
      
    return FALSE; 
     }

     
    //创建message decode window
     if (!m_SplitterWnd1.CreateView(10, RUNTIME_CLASS(CChildView), CSize(sz.cx*2/5, sz.cy), pContext)) 
     

      m_SplitterWnd1.DestroyWindow();
      
    return FALSE; 
     }

     
    return TRUE;
     
    //return CMDIChildWnd::OnCreateClient(lpcs, pContext);
    }


    三、由于在这个函数中用到了两个视图类的类名,故而要将两个视图类的头文件补加进来。却在frme的实现文件中加上代码:

    #include "MfcTView.h"
    #include 
    "ChildView.h"

    四、在这个调试过程中我发现,在刚创建好工程后,#include "MfcTDoc.h"这语句是放在了CMfcTView.cpp中,而不是放在CMfcTView.h中。刚创建的工程当然可以运行,其实本身就存在一个令我搞不明白的东西:那就是在头文件里存在一个定义(public: CMfcTDoc* GetDocument();),这显然不合C++的逻辑。但它能运行。在我进行了窗口分割之后却不能运行了,我搞不明白。我只好按C++的逻辑办事,把这个include语句放到头文件中。结果证明可行。

    五、测试输出文字,分别在两个视图类的ondraw函数中加textout()函数。测试结果是成功的,没有理由不输出,这两个本身是不同的窗口,有各自独立的doc和各自的客户区。

    void CMfcTView::OnDraw(CDC* pDC)
    {
     CMfcTDoc
    * pDoc = GetDocument();
     ASSERT_VALID(pDoc);
     pDC
    ->TextOut(5,5,"HELLO");
     
    // TODO: add draw code for native data here
    }


    void CChildView::OnDraw(CDC* pDC)
    {
     CDocument
    * pDoc = GetDocument();
     pDC
    ->TextOut(5,5,"HELLO");
     
    // TODO: add draw code here
    }

    结论:可以在窗口分割下进行类似的文字输出,并且用的是简单的textout函数。

  • 相关阅读:
    validate BST
    LC282. Expression Add Operators
    nginx统计日志命令
    iptables和firewalld命令
    nginx安装
    测试服务器IO
    规范主机名和设置最大文件进程数
    Docker安装
    MySQL/MariaDB二进制安装
    Docker原理
  • 原文地址:https://www.cnblogs.com/zhangyin/p/622164.html
Copyright © 2020-2023  润新知