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

目录
相关文章
|
11月前
|
SQL 存储 关系型数据库
达梦数据库字段类型 varchar 转 text
本文介绍了在达梦数据库中将字段类型从 `varchar` 转换为 `text` 的两种方法:一是通过 DM数据迁移工具导出表结构和数据,修改后重新导入;二是通过添加临时字段、转移数据、删除原字段并重命名临时字段的方式实现转换。针对不同数据量的表,提供了灵活的解决方案。
|
12月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
1874 4
|
存储 测试技术 开发者
FastAPI异步处理的神奇之处:如何用Python打造高性能Web应用,让你的项目一鸣惊人?
【8月更文挑战第31天】在现代Web开发中,高性能至关重要。FastAPI作为一款高性能Python Web框架,支持多种异步处理方式,包括非阻塞I/O、异步函数(async/await)及异步上下文管理器(async with),能够大幅提升应用性能。本文通过示例代码详细介绍了FastAPI中的异步处理方法,并分享了最佳实践,帮助开发者构建高效的Web应用。
664 0
|
SQL 关系型数据库 MySQL
MySQL模糊查询二三事
在实际应用中,根据需求和实际数据情况,选择合适的模糊查询方法并优化查询模式,是确保查询效率和准确性的关键。复杂的查询模式往往需要详细的测试和调优,以达到最佳的性能与响应时效。
646 4
|
算法 定位技术 网络架构
网络的分类与性能指标
可以分为广域网(WAN)、城域网(MAN)、局域网(LAN)、个人区域网(PAN)。
361 4
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
|
机器学习/深度学习 存储 搜索推荐
Elasticsearch与深度学习框架的集成案例研究
Elasticsearch 是一个强大的搜索引擎和分析引擎,广泛应用于实时数据处理和全文搜索。深度学习框架如 TensorFlow 和 PyTorch 则被用来构建复杂的机器学习模型。本文将探讨如何将 Elasticsearch 与这些深度学习框架集成,以实现高级的数据分析和预测任务。
200 0
|
消息中间件 SQL Kafka
实时计算 Flink版操作报错合集之遇到报错:javax.management.InstanceAlreadyExistsException,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
机器学习/深度学习 数据采集 开发框架
Python实战案例--车型识别app
Python实战案例--车型识别app
|
中间件 数据挖掘 API
ERP系统的系统集成与接口管理:实现高效协同
【7月更文挑战第29天】 ERP系统的系统集成与接口管理:实现高效协同
1053 0