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.pswp.cn/bicheng/74973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74973.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 初階總復習 (16~30)

C 初階總復習 (16~30) 目的16. 2009. volatile關鍵字的作用17. 2010.什么是多態 簡單介紹下C的多態18. 2011. 什么是虛函數 介紹下C中虛函數的原理19. 2012 構造函數可以是虛函數嘛20. 2013.析構函數一定要是虛函數嘛?21. 2015. 什么是C中的虛…

第一天 Linux驅動程序簡介

目錄 一、驅動的作用 二、裸機驅動 VS linux驅動 1、裸機驅動 2、linux驅動 三、linux驅動位于哪里? 四、應用編程 VS 內核編程 1、共同點 2、不同點 五、linux驅動分類 1、字符設備 2、塊設備 3、網絡設備 六、Linux驅動學習難點與誤區 1、學習難點 …

PaddleX產線集成功能的使用整理

一、環境搭建 1.1 安裝paddle-gpu 需要根據安裝機器的cuda的版本,選擇合適的版本進行安裝 #安裝paddle-gpu 官網鏈接 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/linux-pip.html python -m pip install paddle…

docker-compese 啟動mysql8.0.36與phpmyadmin,并使用web連接數據庫

1、找一個文件夾,比如 E:\zqy\file\mysql,cd到這個目錄下創建文件docker-compose.yml 2、將下面的代碼塊復制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

解決 Gradle 構建錯誤:Could not get unknown property ‘withoutJclOverSlf4J’

解決 Gradle 構建錯誤:Could not get unknown property ‘withoutJclOverSlf4J’ 在構建 Spring 源碼或其他基于 Gradle 的項目時,可能會遇到如下錯誤: Could not get unknown property withoutJclOverSlf4J for object of type org.gradle…

mcp 接freecad畫齒輪

from mcp.server.fastmcp import FastMCP import freecad.gears.commands import os from freecad import app from freecad import part mcp FastMCP("Demo")mcp.tool() def create_gear(num_teeth20,height10,double_helix True):"""創建一個漸開線…

【大前端系列19】JavaScript核心:Promise異步編程與async/await實踐

JavaScript核心:Promise異步編程與async/await實踐 系列: 「全棧進化:大前端開發完全指南」系列第19篇 核心: 深入理解Promise機制與async/await語法,掌握現代異步編程技術 📌 引言 在JavaScript的世界中,異步編程是無…

如何排查java程序的宕機和oom?如何解決宕機和oom?

排查oom 用jmap生成我們的堆空間的快照Heap Dump(堆轉儲文件),來分析我們的內存占用 用可視化工具,例如java中的jhat分析Heap Dump文件 ,它分析完會通過一個瀏覽器打開一個可視化頁面展示分析結果 根據oom的類型來調…

什么是 OLAP 數據庫?企業如何選擇適合自己的分析工具

引言:為什么企業需要 OLAP 數據庫? 你是否曾經經歷過這樣的場景: 市場部門急需一份用戶行為分析報告,數據團隊告訴你:“數據太大了,報表要跑 4 個小時”;業務負責人在會議中提出一個臨時性分析…

測試:認識Bug

目錄 一、軟件測試的生命周期 二、bug 一、軟件測試的生命周期 軟件測試貫穿于軟件的生命周期。 需求分析: ???度:軟件需求是否合理 技術?度:技術上是否可?,是否還有優化空間 測試?度:是否存在業務邏輯錯誤、…

綜合實驗2

1、sw1和sw2之間互為備份 [sw1]interface Eth-Trunk 0 (創建聚合接口) [sw1-Eth-Trunk0]trunkport g0/0/1 (將物理接口劃入到聚合接口中) [sw1-Eth-Trunk0]trunkport g0/0/2 [sw2]interface Eth-Trunk 0 [sw2-Eth-T…

【ArcGIS】ArcGIS10.6徹底卸載和ArcGIS10.2安裝全過程

卸載python3后,解決了ArcGIS與python3沖突問題后,軟件可以正常打開使用了 但是還是出現了問題 用ArcGIS 進行空間分析時,中間操作沒有任何報錯和問題,但是就是沒有運行結果 在別人的軟件上操作一遍可以出現運行結果 關閉確有這個,但真的不是我給它的運行時間不夠,反反復復試…

Django之旅:第五節--Mysql數據庫操作(一)

Django開發操作數據庫更簡單,內部提供了ORM框架 一、安裝第三方模塊 pip install mysqlclient注:最新的django框架需要使用mysqlclient模塊,之前pymysql模塊與django框架有編碼兼容問題。 二、ORM 1、ORM可以幫助我們做兩件事:…

docker部署mongodb數據庫

1、下載 MongoDB 鏡像 使用Docker部署MongoDB 之前,我們需要從 Docker Hub 上下載 MongoDB 鏡像。這里我們下載最新版本的 MongoDB 鏡像,使用以下命令進行下載: docker pull mongo:latest 下載完成后,我們就擁有了最新版本的 Mon…

Enhanced PEC-YOLO:電力施工場景安全裝備檢測的輕量化算法解析

目錄 一、核心概述 二、核心創新點 1. ?C2F_Faster_EMA模塊 2. ?SPPF_CPCA多尺度模塊 3. ?BiFPN頸部網絡

【人工智能】解鎖大模型潛力:Ollama 與 DeepSeek 的分布式推理與集群部署實踐

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著大語言模型(LLM)的快速發展,其推理能力在自然語言處理、代碼生成等領域展現出巨大潛力。然而,單機部署難以滿足高并發、低延遲的需…

RTMP推流服務器nginx在linux上的編譯部署

RTMP(Real-Time Messaging Protocol)推流確實需要服務器支持?。RTMP推流服務器的主要功能是接收來自推流客戶端的數據流,對其進行處理和轉發。服務器會根據RTMP協議與客戶端建立連接,處理推流數據(如轉碼、錄制等&…

PyQt6實例_批量下載pdf工具_主線程停止線程池

目錄 前置: 代碼: 視頻: 前置: 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭,放在 【PyQt6實例】 專欄 2 本系列涉及到的PyQt6知識點: 線程池:QThreadPool,QRunnable; 信號與…

Tomcat生產服務器性能優化

試想以下這個情景:你已經開發好了一個程序,這個程序的排版很不錯,而且有著最前沿的功能和其他一些讓你這程序增添不少色彩的元素。可惜的是,程序的性能不怎么地。你也十分清楚,若現在把這款產品退出市場,肯…

正則表達式-筆記

文章目錄 一、正則表達式二、正則表達式的基本語法字符類普通字符非打印字符特殊字符 量詞限定符錨點修飾符(標記) 三、在 Python 中使用正則表達式簡單搜索提取信息替換文本 參考 從驗證用戶輸入,到從大量文本中提取特定信息,再到…