在对话框中应用CScrollView显示图像

2023-10-30

1、用vs2008创建一个基于对话框的工程DialogView;
2、添加一个新类CMyDocument,基类为CDocument;
3、添加一个新类CMyView,基类为CScrollView;
4、修改CMyDocument的头文件:
#pragma once

// CMyDocument document
class CDialogView;

class CMyDocument : public CDocument
{
 //DECLARE_DYNCREATE(CMyDocument)
 friend class CDialogView;

public:
 CMyDocument();
 DECLARE_DYNCREATE(CMyDocument)
public:
 virtual ~CMyDocument();
#ifndef _WIN32_WCE
 virtual void Serialize(CArchive& ar);   // overridden for document i/o
#endif
#ifdef _DEBUG
 virtual void AssertValid() const;
#ifndef _WIN32_WCE
 virtual void Dump(CDumpContext& dc) const;
#endif
#endif

protected:
 virtual BOOL OnNewDocument();

 DECLARE_MESSAGE_MAP()
};

5、修改CMyView的头文件:
#pragma once

 

// CMyView view
class CDialogView;

class CMyView : public CScrollView
{
 //DECLARE_DYNCREATE(CMyView)
 friend class CDialogView;
protected:
 CMyView();           // protected constructor used by dynamic creation
 DECLARE_DYNCREATE(CMyView)
 virtual ~CMyView();

public:
#ifdef _DEBUG
 virtual void AssertValid() const;
#ifndef _WIN32_WCE
 virtual void Dump(CDumpContext& dc) const;
#endif
#endif

protected:
 virtual void OnDraw(CDC* pDC);      // overridden to draw this view
 virtual void OnInitialUpdate();     // first time after construct

 DECLARE_MESSAGE_MAP()
};
6、修改DialogView执行文件:
 在文件中加入 #include "MyScroll.h"
              #include "MyDocument.h"

BOOL CDialogView::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add "About..." menu item to system menu.

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon

 // TODO: Add extra initialization here
 CCreateContext pContext;
 CWnd* pFrameWnd = this;
 pContext.m_pCurrentDoc = new CMyDocument;
 pContext.m_pNewViewClass = RUNTIME_CLASS(CMyView);
 CMyView* pView = (CMyView *)((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
 ASSERT(pView);
 pView->m_nMapMode = MM_TEXT;
 pView->ShowWindow(SW_NORMAL);
 CRect rectWindow;
 GetWindowRect(rectWindow);
 rectWindow.right -= 30;
 rectWindow.bottom   -= 100;
 pView->MoveWindow(rectWindow);

 return TRUE;  // return TRUE  unless you set the focus to a control
}

7、在CMyView的OnDraw函数中添加代码:
void CMyView::OnDraw(CDC* pDC)
{
 //CDocument* pDoc = GetDocument();
 // TODO: add draw code here
 CBitmap BK;
 BK.LoadBitmap(IDB_BITMAP1);//需要添加一位图用于显示
 CDC MemDC;
 MemDC.CreateCompatibleDC(pDC);
 MemDC.SelectObject(&BK);
 BITMAP bm;
 BK.GetBitmap(&bm);

 pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);

 CRect m_Rect;
 GetClientRect(&m_Rect);
 m_Rect.bottom += 100;
 CSize sizeTotal;
 // TODO: calculate the total size of this view
 sizeTotal.cx = bm.bmWidth;
 sizeTotal.cy = bm.bmHeight;
 SetScrollSizes(MM_TEXT, sizeTotal);
}

 参考:http://download.csdn.net/down/610747/jia_xiaoxin
            http://www.codeguru.com/Cpp/W-D/dislog/article.php/c5009/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在对话框中应用CScrollView显示图像 的相关文章

  • tkinter 应用程序中的 super()

    我无法理解这个错误 在下面的代码中 当我使用tk Frame一切都按预期进行 但是如果我使用super 我被抛出了AttributeError 应用程序对象没有属性 tk class Application tk Frame def ini
  • 如何强制调用 C# 派生方法

    我有一个由某些工具生成的类 因此我无法更改它 生成的类非常简单 没有接口 没有虚方法 class GeneratedFoo public void Write string p do something 在 C 项目中 我们希望提供一种方法
  • 为什么GCC不报告未初始化的变量?

    include
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • Radio r = Radio("PSR", 100.8) 和 Radio("PSR", 100.8) 有什么区别? [复制]

    这个问题在这里已经有答案了 我是 C 新手 正在尝试理解一些东西 我的 main cpp 中有这段代码 Radio r Radio PSR 100 8 或该代码 Radio r PSR 100 8 两者似乎都有效并且做同样的事情 那么有什么
  • 仅使用 1 行 C++ 初始化 2d 向量

    我需要能够初始化一个 2D 向量 int同一条线我在其中创建它 更具体地说 我必须创建一个3x2大小 2D 向量并将其所有值设置为 0 仅使用1行代码 有没有一种方法可以在不使用 for 循环和几行代码的情况下完成此操作 尝试这个 std
  • 如何使构造函数只能由基类访问?

    如果我想要一个只能从子类访问的构造函数 我可以使用protected构造函数中的关键字 现在我想要相反的 我的子类应该有一个构造函数 该构造函数可以由其基类访问 但不能从任何其他类访问 这可能吗 这是我当前的代码 问题是子类有一个公共构造函
  • java中类的命名约定 - 全部大写

    在 Java 中 当类全部大写时 如何命名它 例如 如果我想创建一个班级来选择某些人成为 VIP 我应该将类命名为 VIPSelector 还是 VipSelector Thanks 你的两个选择都有效 类的主要目标是让它们以大写字母开头
  • 如何将焦点设置到 Windows 窗体应用程序中的控件?

    在 Windows 窗体应用程序中 when我是否编写代码以在应用程序启动时以及随后调用函数后将焦点设置到控件 例如 如果我有一个 DropDownList 一个 TextBox 和四个按钮 并且我希望将 Focus 设置为 DropDow
  • 重写继承的构造函数字段时的差异?

    考虑这个简单的 Scala 类 class A val d Int Scala 之间是否存在差异 无论是行为还是生成的字节码 class B d Int extends A d and class B override val d Int
  • Python:如何将包含对象的列表保存在文件中?

    我尝试创建不同的对象 使用类和对象 并将它们保存在文件中以便稍后编辑或检索它们 然而这就是它的样子 GlobalCategories GlobalContent def LoadData x y import pickle with ope
  • Ruby 对象打印为指针

    我正在尝试创建一个类 它有一个带有单个参数的构造函数 当我创建该对象的新实例时 它返回一个指针 class Adder def initialize my num my num my num end end y Adder new 12 p
  • JSLint 错误:意外的“这个”

    无法理解为什么 JSLint 对我的使用感到惊讶this在下面的代码中 function testConstr x use strict this joker Whyyy sooo seriousss this x x 对于这两个属性分配
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • Joda Time 类没有任何构造函数...为什么?我做错了什么?

    显然 Eclipse 上的 Scala 试图让我相信DateTime Period DateMidnightJoda Time 中的许多其他类没有任何构造函数 考虑到它们的文档显示了构造函数和许多方法 这很奇怪 我唯一可以访问的是静态方法
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • C 或 C++ 中未初始化的指针有用途吗?

    在其中一篇评论中这个问题 https stackoverflow com questions 1910832 c why arent pointers initialized with null by default 有人指出默认初始化 C
  • 在 C++/CLI 中创建时初始化静态字典

    今天我看到创建静态字典并初始化它的 C 代码 public static readonly Dictionary
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • 内置类型的成员是否已默认初始化?

    我最近遇到了我的一个类的问题 因为我没有在构造函数初始化列表中设置指向 NULL 的指针 因此当我运行程序时它包含垃圾 然而 虽然我知道在堆栈上声明但未初始化的内置类型的实例将包含随机值 但我很确定我在某处读过 因为未显式放置在构造函数初始

随机推荐

  • 构建一个Flex程序

    构建一个Flex程序 Flex定义了一个基于组件的开发模型 从而我们可以用来构建我们的程序 为了高效的设计与构建我们的程序 我们应该熟悉这个模型 以及程序开发步骤与布署过程 在这一章描述了我们用来创建一个程序的开发过程 在这一章所包含的如下
  • Neo4j的安装和简单使用

    1 首先是Neo4j的下载和安装 下载地址 https neo4j com download 我下载的是Community Edition 下载完毕 因为是 exe文件 直接双击安装即可 没有什么需要注意的 2 安装完毕 在第一次使用Neo
  • SAP ABAP 粘贴板负号前置

    场景 用户一般Ctrl C复制ALV数据到Excel处理 如果有负数的数值 负号在数值的后面 Excel不认识 要费劲巴拉的一个个改正 苦不堪言 本程序功能 在ALV复制数据后 直接更改剪贴板里面的数据 把负号提到前面 然后直接在Excel
  • 立创商城中元器件封装的3d模型导出STEP格式文件

    1 首先安装FreeCAD软件和注册立创账号 2 进入立创EDA专业版 同时登录立创EDA账号 立创EDA专业版网址 https pro lceda cn editor 3 新建一个工程并打开 4 把立创商城的商品编号复制到下面的元器件库中
  • Python 实现的关键词查找小工具

    引言 平时工作时 有时会遇到这样的情景 在一个目录及其子目录下所有的文本文件中查找某个关键字 词或者完整的句子 当然 如果是在Linux平台上 find egrep就能实现这样的功能 不过最近学习了Python tkinter相关的知识 自
  • 浏览器渲染原理 - 输入url 回车后发生了什么

    目录 渲染时间点 渲染流水线 1 解析 parse HTML 1 1 DOM树 1 2 CSSOM树 1 3 解析时遇到 css 是怎么做的 1 4 解析时遇到 js 是怎么做的 2 样式计算 Recalculate style 3 布局
  • SPSS——问卷分析(简要操作板,自己整理的有用信息)

    资料来源 SPSS统计应用实务 问卷分析与应用统计 一 复选题及其他方式的数据编码 复选题 对每一个选项分别编码 0 表示没有选此项答案 1 表示选了此项答案 Eg 一 您认为目前教改阻力来自哪些单位 可复选 1 教育行政机关 2 民意代表
  • 不得不服!Python速度虽然慢,但是它工作效率很高!

    写在前面 让我们来讨论一个我最近一直在思考的问题 Python 的性能 顺便说一下 我是 Python 的忠实拥趸 我在各种情况下都会积极尝试使用 Python 来解决问题 大家对 Python 最大的抱怨就是它的速度慢 有些人甚至因为 P
  • ORACL 11gPLSQL创建新用户无法以Normal登录得解决方法

    第一步 首先以Sysdba得身份登录Oracle数据库 第二步 先创建一表空间DATA 初始大小50MB 允许自动增长数据库文件 每次增长10MB 输入的SQL语句如下 E app 23595 oradata databasename DA
  • Activity的四种启动模式和相关的Intent flag

    一 启动模式 1 standard模式 默认模式 可以不用写配置 在这个模式下 都会默认创建一个新的实例 因此 在这种模式下 可以有多个相同的实例 也允许多个相同Activity叠加 应用场景 绝大多数Activity 2 singleTo
  • angularjs ngdocs 使用grunt生成api文档说明

    ngdocs的安装说明 1 先下载这个包 在命令行执行 npm install grunt ngdocs save dev 2 在gruntfile js 里面加入这个任务 grunt loadNpmTasks grunt ngdocs 3
  • leetcode刷题(二)

    题目一 题目链接 void reverse int arr int left int right while left
  • pytorch并行相关

    多GPU使用 CUDA VISIBLE DEVICES 0 1 2 3 推荐 os environ CUDA VISIBLE DEVICES 0 1 2 3 推荐 DataParallel model device ids 0 1 2 3
  • android怎么实现广告页,Android开屏广告的实现原理与适配方案

    8种机械键盘轴体对比 本人程序员 要买一个写代码的键盘 请问红轴和茶轴怎么选 开屏广告目前很多应用都在使用 约饭 为了推广自家的线上活动也提出了增加开屏广告的需求 所以就研究了一下 整理保存 备忘 实现原理 开屏广告的实现思路非常简单 在L
  • 如何管理一个超过100人的研发团队?

    如何管理一个超过100人的研发团队 心得与体会 与大家共勉 1 无规矩不成方圆 因时因地制定合适灵活的策略和制度管理好团队和项目 2 欲善其事 必先利其器 是用合适的工具辅助团队和项目管理 2 不积硅步 无以至千里 鼓励技术 经验传承与分享
  • word 怎么把图片裁剪成圆形

    word 怎么把图片裁剪成圆形
  • 关于Hibernate一级缓存的快照问题

    Hibernate中的一级缓存的底层是以Map形式存在的 key是主键 value是对象 所以它的泛型为Map
  • vue请求中 post get传参方式

    转 https www cnblogs com ellenbaby p 9006874 html vue请求中 post get传参方式是不同的哦 我在学习vue 项目中post请求 get请求都用到了 我发现传参方式是不一样的 post请
  • 问题分析框架

    一年前 我读了高杉尚孝著的 麦肯锡问题分析与解决技巧 其中对于问题的清晰定义和 MECE 分析法让我印象深刻 只记得这两个了 我觉得清晰定义问题是什么 是决策的根基 一切决策应当从问题出发 因此基于此书的 1 4 章节 以及个人的深度思考
  • 在对话框中应用CScrollView显示图像

    1 用vs2008创建一个基于对话框的工程DialogView 2 添加一个新类CMyDocument 基类为CDocument 3 添加一个新类CMyView 基类为CScrollView 4 修改CMyDocument的头文件 prag