itloverhpu

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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目录中的文件。
posted on 2013-06-23 21:06  itloverhpu  阅读(519)  评论(0)    收藏  举报