当前位置: 首页 > news >正文

windows第二十章 单文档应用程序

文章目录

  • 单文档定义
  • 新建一个单文档应用程序
    • 单文档应用程序组成:
      • APP应用程序类
      • 框架类(窗口类)
      • 视图类(窗口类,属于框架的子窗口)
      • 文档类(对数据进行保存读取操作)
  • 直接用向导创建单文档
  • 案例演示

单文档定义

只能编辑一个文档,比如说画图,一次只能开一个,开2个就要打开2个程序,能够处理一个或者多个文件、文档、业务的程序
多文档就是类似win11的记事本程序,打开一个程序能编辑很多记事本窗口

新建一个单文档应用程序

资源添加,几个资源名可以相同在这里插入图片描述
相同的才能一起添加进去,因为创建的时候只能传1个ID

单文档应用程序组成:

在这里插入图片描述

APP应用程序类

FirstSDI.h

#pragma once
#include "pch.h"

class FirstSdiApp : public CWinApp
{
	BOOL InitInstance();
};

FirstSDI.cpp

#include "FirstSDI.h"
#include "CFirstDocument.h"
#include "MainFrame.h"
#include "CChildView.h"

BOOL FirstSdiApp::InitInstance()
{
	//SDI文档模版对象
	CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,//资源ID,包含(图标,菜单,工具栏,快捷键资源)
		RUNTIME_CLASS(CFirstDocument),//文档类
		RUNTIME_CLASS(CMainFrame),//框架类
		RUNTIME_CLASS(CChildView));//视图类
	//添加文档模版对象
	AddDocTemplate(pDocTemplate);
	//解析命令行信息
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);
	//执行命令行参数命令
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;
	//显示主框架窗口
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}

FirstSdiApp theApp;

这里的命令行参数,比如你双击打开一个xxx.txt,双击的过程,就会传递一个命令行参数,就会使用文本文档这个程序打开

框架类(窗口类)

MainFrame.h

#pragma once
#include "pch.h"
class CMainFrame :
	public CFrameWnd
{
	DECLARE_DYNCREATE(CMainFrame)
};

MainFrame.cpp

#include "MainFrame.h"

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

  • 此框架类可以添加十八章做过的菜单,工具栏,状态栏
    在这里插入图片描述
  • 也可以修改标题风格,通过PreCreateWindow这个虚函数添加
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.style &= ~FWS_ADDTOTITLE;//去掉标题栏
	cs.style &= ~WS_THICKFRAME;//去掉边框
	cs.cx = 300;//宽度
	cs.cy = 300;//高度

	return CFrameWnd::PreCreateWindow(cs);
}

  • 还有专门修改标题的虚函数 OnUpdateFrameTitle
void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
{

	//SetWindowText(L"第一个SDI应用程序");//直接设置标题
	//CFrameWnd::OnUpdateFrameTitle(bAddToTitle);
	CDocument* pDoc = GetActiveDocument();
	if (pDoc != NULL)
	{
		SetWindowText(pDoc->GetTitle());//从文档类中获取标题
	}
}

视图类(窗口类,属于框架的子窗口)

CChildView.h

#pragma once
#include "pch.h"
class CChildView :
	public CView
{
	DECLARE_DYNCREATE(CChildView)
	virtual void OnDraw(CDC* /*pDC*/);
};

CChildView.cpp

#include "CChildView.h"
IMPLEMENT_DYNCREATE(CChildView, CView)
void CChildView::OnDraw(CDC* /*pDC*/)
{
	// TODO: 在此添加专用代码和/或调用基类
}

  • 视图也有个OnInitialUpdate虚函数,类似于对话框的OnInitDialog
void CChildView::OnInitialUpdate()
{

	CView::OnInitialUpdate();
	MessageBeep(MB_ICONASTERISK);//蜂鸣
}

  • 如果视图调用了OnPaint虚函数,那么要在虚函数里调用OnDraw
  • 视图里面设置背景
BOOL CChildView::OnEraseBkgnd(CDC* pDC)
{
	CRect rect;
	GetClientRect(&rect);
	pDC->FillSolidRect(rect, RGB(255, 0, 0));
	return TRUE;
	//return CView::OnEraseBkgnd(pDC);
}
  • 如果视图里面背景设置透明,那么就能看到下面一层框架的颜色,如果在框架类里设置了绘图,那么就能看到,只不过平时视图盖在框架上面,看不到

文档类(对数据进行保存读取操作)

跟前一章介绍的一样,只不过添加了宏
CFirstDocument.h

#pragma once
#include "pch.h"
class CFirstDocument :
	public CDocument
{
	DECLARE_DYNCREATE(CFirstDocument)
};


CFirstDocument.cpp

#include "CFirstDocument.h"
IMPLEMENT_DYNCREATE(CFirstDocument, CDocument)

直接用向导创建单文档

  1. 填入项目名在这里插入图片描述
  2. 点击创建,选择单个文档
    在这里插入图片描述
    项目样式选window 经典样式
  3. 点完成,和之前手动创建的一样,只是多了一些内容在这里插入图片描述

案例演示

涂格子游戏

http://www.dtcms.com/a/98543.html

相关文章:

  • 基于大语言模型的智能音乐创作系统——从推荐到生成
  • Jenkins教程(自动化部署)
  • 纯个人整理,蓝桥杯使用的算法模板day1(dfs、bfs)
  • Axure疑难杂症:完美解决中继器筛选问题(时间条件筛选、任性筛选)
  • 信号与系统(郑君里)第一章-绪论 1-22 课后习题解答
  • jdk 支持路线图
  • gamma函数与zeta函数的关系
  • 【大数据技术】大数据技术概念及概述
  • QT音乐播放器(1):数据库保存歌曲
  • Vue Kubernetes项目 局部布局面包屑 el-breadcrumb
  • Matlab教程004:Matlab矩阵的拼接重构重排以及矩阵的运算
  • 测试测试 测试
  • Kubernetes》k8s》Containerd 、ctr 、cri、crictl
  • 每日一题 MySQL基础知识----(四)
  • Java 大视界 -- Java 大数据机器学习模型在电商商品推荐冷启动问题中的解决策略(160)
  • [Python学习日记-88] 并发编程之多进程 —— 队列与生产者消费者模型
  • 赛博威智慧导购平台,融合AI激活一线导购效能,破局增长瓶颈
  • 目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库
  • JAVA学习*工厂模式
  • Python容器详解:从字符串到字典的完整指南
  • CPT204 Advanced Obejct-Oriented Programming 高级面向对象编程 Pt.4 泛型
  • 4.训练篇2-毕设篇
  • Share01-WinCC文件越用越大?
  • 【学习笔记】文件上传漏洞--js验证、mime验证、.user.ini、短标签、过滤、文件头
  • 大数据Spark(五十五):Spark框架及特点
  • Leetcode 两数相除
  • 海量数据处理
  • 下载和初步上手Vue3路由
  • NOIP2007提高组.矩阵取数游戏
  • 思维链技术(Chain-of-Thought, CoT)