MFC的视图窗口

简介: MFC的视图窗口

一、视图窗口作用


提供一个专门用于显示数据的窗口,并和用户进行交互


二、相关类


CView类,(父类为CWnd),封装了关于视图窗口的各种操作


三、视图窗口的使用


1、添加画图的宏


ON_WM_PAINT()


2、声明该方法


afx_msg void OnPaint();


3、重写方法


void CMyFrameWnd::OnPaint() {
    PAINTSTRUCT ps = { 0 };
    HDC hdc = ::BeginPaint(this->m_hWnd, &ps);
    ::TextOut(hdc, 100, 100, "我是框架窗口客户区",
        strlen("我是框架窗口客户区"));
    ::EndPaint(this->m_hWnd, &ps);
}

4、运行效果:


0a2653c851af460fa595bd959398a8f1.png


5、添加创建宏


ON_WM_CREATE()


6、申明该方法


afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);


7、重写该方法


int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    CMyView* pView = new CMyView;
    pView->Create(NULL, "MFCView",
        WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(0, 0, 200, 200),
        this, AFX_IDW_PANE_FIRST);
    this->m_pViewActive = pView;
    return CFrameWnd::OnCreate(lpCreateStruct);
}


8、CMyview是抽象的,需要重写OnDraw方法


class CMyView :public CView {
public:
    virtual void OnDraw(CDC* pDC);
};
void CMyView::OnDraw(CDC* pDC) {
   
}

9、命令消息(WM_COMMAND)的处理顺序,


 View-->Frame-->App


10、新建一个菜单栏,测试上面的处理顺序


#include <afxwin.h>
#include "resource.h"
//新建视图类
class CMyView :public CView {
    DECLARE_MESSAGE_MAP()
public:
    virtual void OnDraw(CDC* pDC);
    afx_msg void OnPaint();
    afx_msg void OnNew();
};
BEGIN_MESSAGE_MAP(CMyView, CView)
    ON_COMMAND(ID_XJ, OnNew)
    ON_WM_PAINT()
END_MESSAGE_MAP()
void CMyView::OnNew() {
    AfxMessageBox("视图类处理了新建被点击发出的COMMAND消息");
}
void CMyView::OnPaint() {
    PAINTSTRUCT ps = { 0 };
    HDC hdc = ::BeginPaint(this->m_hWnd, &ps);
    ::TextOut(hdc, 200, 200, "CMyView::OnPaint", strlen("CMyView::OnPaint"));
    ::EndPaint(this->m_hWnd, &ps);
}
void CMyView::OnDraw(CDC* pDC) {
    //在视图窗口画图
    pDC->TextOut(100, 100, "CMyView::OnDraw");
}
//框架类
class CMyFrameWnd :public CFrameWnd {
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnPaint();
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
};
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
    ON_WM_PAINT()
    ON_WM_CREATE()
END_MESSAGE_MAP()
int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    CMyView* pView = new CMyView;
    pView->Create(NULL, "MFCView",
        WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(0, 0, 200, 200),
        this, AFX_IDW_PANE_FIRST);
    //默认选中视图窗口
    this->m_pViewActive = pView;
    return CFrameWnd::OnCreate(lpCreateStruct);
}
//画图
void CMyFrameWnd::OnPaint() {
    PAINTSTRUCT ps = { 0 };
    HDC hdc = ::BeginPaint(this->m_hWnd, &ps);
    ::TextOut(hdc, 100, 100, "我是框架窗口客户区",
        strlen("我是框架窗口客户区"));
    ::EndPaint(this->m_hWnd, &ps);
}
//应用类
class CMyWinApp :public CWinApp {
public:
    virtual BOOL InitInstance();
};
CMyWinApp theApp;
BOOL CMyWinApp::InitInstance()
{
    CMyFrameWnd* pFrame = new CMyFrameWnd;
    pFrame->Create(NULL, "视图窗口", WS_OVERLAPPEDWINDOW,
        CFrameWnd::rectDefault, NULL,
        MAKEINTRESOURCE(IDR_MENU1));
    m_pMainWnd = pFrame;
    pFrame->ShowWindow(SW_SHOW);
    pFrame->UpdateData();
    return TRUE;
}


11、运行结果

0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
6月前
MFC视图窗口动态分割
MFC视图窗口动态分割
56 2
|
6月前
|
Windows
MFC多文档视图
MFC多文档视图
33 0
|
6月前
MFC单文档视图架构
MFC单文档视图架构
58 0
|
6月前
MFC文档视图
MFC文档视图
29 0
MFC的视图窗口
MFC的视图窗口
82 0
MFC的视图窗口
|
C++
基于MFC实现选项卡控件练习
基于MFC实现选项卡控件练习
72 0
基于MFC实现选项卡控件练习
MFC设置窗体大小SetWindowPos
SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE);     表示不考虑(0,0),仅仅将大小改为200x300,位置不变    SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE);    表示不考虑200X300,只是把位置挪到(0,0).
4126 0
MFC创建单文档工程(为窗口添加背景图)
首先把BMP位图图片添加到资源文件res文件夹下; 其次,资源视图——VT_Ards.rc——右键选择添加资源,选择Bitmap,导入BMP图片并修改图片ID; 然后添加代码(详见MFC单文档工程为窗口添加背景图代码) ...
1642 0