Windows系统具有强大的绘图功能,可以用来模拟OSD显示。接下来将设计一个简单的模拟显示终端的程序,用于后续显示功能和菜单系统的开发。说明一下,对于Windows下的MFC编程我不怎么了解,只知道一些皮毛东西,所以望大家能指出其中的不足和错误。另外,这次开发的最终目标是建立一个可以移植的菜单系统,所以重点是模拟器端的运行情况而不是Windows程序的运行效率。

为了能比较真实的模拟显示内存(OSD Buffer)到显示终端的过程,用一个和显存等大的数组来模拟OSD Buffer,用一个和显示终端等大小的控件作为模拟显示,用一个和色板等大的数组来模拟硬件色板。
相应的变量为:BYTE OSDBuffer[OSD_BUFFER_LENGTH];m_staEmuDisplay;COLORREF OSDPalette[OSD_COLORNUMBER];

步骤参考如下:
1、建立一个基于对话框的MFC工程;
2、添加一个静态文本框,ID为IDC_STATIC_EmuDisplay,对应的Static变量为m_staEmuDisplay;
3、更新模拟终端的显示与Windows程序自身的重绘显示相互独立处理,故定义一个和静态文本框兼容的成员CDC变量m_cdcEmuDisplay,在OnInitDialog()中进行初始化:
 CBitmap cBitmap;
 CPaintDC  staLCDDC(&m_staEmuDisplay);
 cBitmap.CreateCompatibleBitmap(&staLCDDC,OSD_WIDTH,OSD_HEIGHT);
 m_cdcEmuDisplay.CreateCompatibleDC(&staLCDDC);
 m_cdcEmuDisplay.SelectObject(&cBitmap);
 cBitmap.DeleteObject();
在OnPaint()时重绘静态文本框:
 CPaintDC  EmuDisplayCPaintDC(&m_staEmuDisplay);
 EmuDisplayCPaintDC.StretchBlt(*,&m_cdcEmuDisplay,*,SRCCOPY);
4、定义模拟硬件刷新的成员函数:
UpdateEmuDisplayCDC(COLORREF *pColorPalette)
{
****
m_cdcEmuDisplay.SetPixel(X,Y,pOSDPaletteRGB[ColorData]);
****
}

程序效果如下:


启动时设置显存的内容都为0x22,色板采用的是VGA 标准16色,对应的颜色为绿色,所以整个“显示屏”是绿色。

点击OK键,显存内容会被改变成特定值(实际上一幅图像对应的数组,通过转换工具生成的),相应地,“显示屏”的画面也跟着改变。

顺便说一下,点击OK键“显示屏”的变化不是用Windows的绘图函数实现的,而是用前述的模拟屏幕显示原理来实现。

阅读(2763) | 评论(3) | 复制链接

版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

评论人: kydxjh 发布时间: 2007-4-1 17:44:00
你好!目前我正再做这个,能看看你的运行效果吗
评论人: 作者 发布时间: 2007-1-2 15:16:00
http://my.mofile.com/emu_osd
源码已上传到了我的Mofile空间中Source目录中。
需要说明的是这是最初的版本,现在已做了许多修改,并已经初步完成了菜单的模拟,运行效果可以参考Bin目录中的文件。

OSD仿真_MFC程序01的更多相关文章

  1. 微信小程序 --01

    微信小程序开发基础 -- 开发前的准备 缘由 1月9日张小龙微信小程序正式上线,因为微信,所以小程序从诞生开始就头戴巨大的光环,很多的团队,公司以及开发的个体都眼巴巴的盯着这个小程序.而那个时候我却在 ...

  2. MFC小程序------01 代码管理器

    1.代码入库: 2.代码查找: 3.查看全部代码: 4.程序设置: 自己学习MFC写的一个小程序,当中还有很多功能还待完好,比方数据库的导入功能还没有写,但导出功能是能够用的,查找算法也不是非常好,还 ...

  3. 小程序01 微信小程序介绍和开发准备

    前言 火爆的微信小程序:跳一跳.摩拜单车.美柚.大众点评.滴滴出行 背景 为什么会有小程序? 微信最早推出公众号和服务号,公众号和服务号所传播的网页经常出现加载缓慢甚至页面空白的情况. 微信小程序的诞 ...

  4. 写个小程序01 | 注册微信小程序

    出于兴趣和学习目的,我想自己做一个基于"子弹笔记(Bullet Journal)"的小程序.由于个人开发经验很有限,只在课程作业中写过 web 前端,所以也不知道多久能写出来(逃) ...

  5. C++ Builder平台使用Indy9开发自动FTP程序01

    Indy9与CB自带的Indy8不同处还是挺多的.首先就是图标变漂亮了,其次很多Method都重写了.它主要是依据Delph里的函数,力求与之相通.不同点在本系列的后续章节中会一一介绍. 在写ftp代 ...

  6. 使用wepy开发微信小程序01——常用的组件

    1.axio.js 'use strict' import axios from 'axios' import wepyAxiosAdapter from 'wepy-plugin-axios/dis ...

  7. c语言:开平方根sqrt程序01

    #include <stdio.h> int sqrt01(int x); void main(void){ int x=49,y; y=sqrt01(x); if(y<0) pri ...

  8. vc++如何创建程序01

    1 .选择文件+新建(ctrl+N),然后选择一个空的工程,完成 2 然后在选择file新建,在files文件下面选择一个C++Source File,并取个文件名(比如为point可以不带.c) 我 ...

  9. vega prime 1.2 (视景仿真)

    Vega Prime 1.2 (视景仿真) MPI的视景仿真渲染工具Vega是世界上领先的应用于实时视景仿真.声音仿真和虚拟现实等领域的软件环境,它用来渲染战场仿真.娱乐.城市仿真.训练模拟器和计算可 ...

随机推荐

  1. flask 继承模版的基本使用1

  2. 记录开发Nodejs c++ addon的一些经验(三、关于node-gyp)

    关于node-gyp如何进行编译,我想它的官网已经说的很详细了: https://github.com/nodejs/node-gyp 但是我感觉关于binding.gyp文件的语法规则还是说的不明确 ...

  3. Spring 框架(一)

    1 spring框架概述 1.1 什么是spring l Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert ...

  4. mysql的一些sql用法

    mysql中修改列名: alter table 表名 change abc def 列类型;比如 alter table student change pws psw char(10);

  5. WPF中使用定时器 DispatcherTimer 做TCP连接中的心跳 HeartBeat

    开发过程中经常遇到定时触发的需求,如:TCP/IP连接中,使用心跳包保持连接或检测连接是否已经中断. WPF中有多种定时器: 1.using System.Windows.Threading; 代码如 ...

  6. Codeforces Round #412 A Is it rated ?

    A. Is it rated? time limit per test  2 seconds memory limit per test  256 megabytes Is it rated? Her ...

  7. python SQLAchemy多外键关联

    关联同一张表的两个字段 Customer表有2个字段都关联了Address表 创建表结构 orm_many_fk.py 只创建表结构 from sqlalchemy import Integer, F ...

  8. 【Leetcode】【Easy】Remove Linked List Elements

    Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...

  9. Windows 编译 MQTT C++ Client

    MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可 ...

  10. hearbeat

    heartbeat介绍: 作用: 通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务.在升级生产应用场景 ...