OSD仿真_MFC程序01
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的更多相关文章
- 微信小程序 --01
微信小程序开发基础 -- 开发前的准备 缘由 1月9日张小龙微信小程序正式上线,因为微信,所以小程序从诞生开始就头戴巨大的光环,很多的团队,公司以及开发的个体都眼巴巴的盯着这个小程序.而那个时候我却在 ...
- MFC小程序------01 代码管理器
1.代码入库: 2.代码查找: 3.查看全部代码: 4.程序设置: 自己学习MFC写的一个小程序,当中还有很多功能还待完好,比方数据库的导入功能还没有写,但导出功能是能够用的,查找算法也不是非常好,还 ...
- 小程序01 微信小程序介绍和开发准备
前言 火爆的微信小程序:跳一跳.摩拜单车.美柚.大众点评.滴滴出行 背景 为什么会有小程序? 微信最早推出公众号和服务号,公众号和服务号所传播的网页经常出现加载缓慢甚至页面空白的情况. 微信小程序的诞 ...
- 写个小程序01 | 注册微信小程序
出于兴趣和学习目的,我想自己做一个基于"子弹笔记(Bullet Journal)"的小程序.由于个人开发经验很有限,只在课程作业中写过 web 前端,所以也不知道多久能写出来(逃) ...
- C++ Builder平台使用Indy9开发自动FTP程序01
Indy9与CB自带的Indy8不同处还是挺多的.首先就是图标变漂亮了,其次很多Method都重写了.它主要是依据Delph里的函数,力求与之相通.不同点在本系列的后续章节中会一一介绍. 在写ftp代 ...
- 使用wepy开发微信小程序01——常用的组件
1.axio.js 'use strict' import axios from 'axios' import wepyAxiosAdapter from 'wepy-plugin-axios/dis ...
- c语言:开平方根sqrt程序01
#include <stdio.h> int sqrt01(int x); void main(void){ int x=49,y; y=sqrt01(x); if(y<0) pri ...
- vc++如何创建程序01
1 .选择文件+新建(ctrl+N),然后选择一个空的工程,完成 2 然后在选择file新建,在files文件下面选择一个C++Source File,并取个文件名(比如为point可以不带.c) 我 ...
- vega prime 1.2 (视景仿真)
Vega Prime 1.2 (视景仿真) MPI的视景仿真渲染工具Vega是世界上领先的应用于实时视景仿真.声音仿真和虚拟现实等领域的软件环境,它用来渲染战场仿真.娱乐.城市仿真.训练模拟器和计算可 ...
随机推荐
- 【原创】Hadoop的IO模型(数据序列化,文件压缩)
数据序列化 我们知道,数据在分布式系统上运行程序数据是需要在机器之间通过网络传输的,这些数据必须被编码成一个个的字节才可以进行传输,这个其实就是我们所谓的数据序列化.数据中心中,最稀缺的资源就是网络带 ...
- int btn = (Button) findViewById(View.getId());
int btn = (Button) findViewById(View.getId());//这句话中的btn不能用来和按钮键Button的id号去比较 如果想存储Button,可以这样做: Sta ...
- 【转】JSON.parse()与JSON.stringify()的区别
JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"goatling"}' //解析 ...
- 移动端适配(3)——rem适配
rem适配 <meta name="viewport" content="width=device-width,user-scalable=no"/&g ...
- Hadoop生态体系
Hadoop路线 HDFS 分布式文件系统 MapReduce 分布式编程框架 ZooKeeper 分布式协调框架 Hive 非关系型数据仓库 Flume 日志采集框架
- OpenfileDialog选择照片的简单应用
OpenFileDialog openFileDlg = new OpenFileDialog(); openFileDlg.Title = "选择文件"; openFileDlg ...
- CSS浮动并清除浮动(造成的影响)
一.浮动 CSS浮动 CSS float浮动的深入研究.详解及拓展(一) CSS浮动属性Float详解 块级元素独占一行 块级元素,在页面中独占一行,自上而下排列,也就是传说中的流. 可以 ...
- UTF-8文件编码格式中有无签名问题汇总(BOM)
UTF-8签名(UTF-8 signature)也叫做BOM(Byte order Mark),是UTF编码方案里用于标识编码的标准标记.如果多个文件设置了签名,在二进制流中就会包含多个UTF-8签名 ...
- js 显示 base64编码 的二进制流 图片
Data URI scheme.Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字 ...
- C# 程序启动最小化至任务栏及闪烁
主要功能: C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,并使窗体闪烁. 首先: 创建窗体应用程序,并添加控件NotifyIcon及ContextMenuStrip控件 Noti ...