精华内容
下载资源
问答
  • [打印本页]--------------------------------------------------------------------------------作者: freebird 时间: 2009-9-14 23:13 标题: 如何通过直接访问屏幕内存来直接绘制屏幕并更新有三个方法可以跳过...

     [打印本页]

    --------------------------------------------------------------------------------
    作者: freebird    时间: 2009-9-14 23:13     标题: 如何通过直接访问屏幕内存来直接绘制屏幕并更新

    有三个方法可以跳过window server来直接绘制屏幕(这里称为Direct drawing),这通常用在游戏程序中使得屏幕绘制更加快速。
    其中一个直接访问的方法就是直接访问屏幕内存,并通过编辑内存来绘制屏幕。
    这里可以使用UserSvr::ScreenInfo()这个API来获取屏幕地址,结果放在TScreenInfoV01包中,下面的代码片段可以获得内存地址,并绘制一个简单的矩形到屏幕上:

     TPckgBuf<TScreenInfoV01> infoPckg;
    TScreenInfoV01& screenInfo = infoPckg();
    UserSvr::ScreenInfo(infoPckg);
    TUint16* screenMemory = (TUint16*) screenInfo.iScreenAddress + 16;

    for (int j = 80; j < 140; j++)
    {
    for (int i = 0; i < 176; i++)
    {
    *(screenMemory + 2*(16 + i + j*176)) = i/8 + j;
    }
    }

    当绘制完成后,屏幕将会被更新,变化后的内容直接反映在屏幕上,
    我们可以通过向系统队列增加一个重绘事件来完成TRawEvent::ERedraw(通过UserSvr::AddEvent()),
    它将立刻更新屏幕,下列代码演示了如何处理:

    TRawEvent redraw;
    redraw.Set(TRawEvent::ERedraw);
    UserSvr::AddEvent(redraw);

    但TRawEvent::ERedraw是由主机系统生成的,如模拟器环境的WM_PAINT事件。
    S60第二版中,屏幕更新可以通过增加系统队列完成,但第三版中却无法立刻展现系统队列中重绘指令的效果。
    屏幕只能通过手机屏幕关于超出数据区域的通知事件才能更新。 所以通过UserSvr::ScreenInfo()来修改显示内存的方法在S60第三版后是不建议使用的。
    作为一个解决方案,可以通过使用老的绘制方法强制屏幕更新,
    通过使用CFbsScreenDevice的Update()方法来指明超出数据区域,这个代码示例如下:

    CFbsScreenDevice* iMyScreenDev = CFbsScreenDevice::NewL(0 ,EColor64K); // the screennumber will be 0 if phone supports single screen where as the
    // displaymode can be as per your choice
    RRegion iMyregion;
    iMyregion.AddRect(TRect(0,0,240,320)); // the out of date rect region.
    iMyScreenDev->Update(iMyregion);
    iMyregion.Close();

    展开全文
  • 通用对话框是在通用对话框库中定义的,其功能是用来完成一些通用的任务,比如打开文件、打印文档等。通用对话框为用户提供了一个统一的用户界面,使用户在不同的应用程序中完成通用任务时的操作都相同,不必每次都...
  • GDI+是window xp中的一个子系统,它主要负责在显示屏幕打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI...

    一、GDI+简介:  

    GDI+是window xp中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。

    作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。

    二、安装GDI+

    在这里,先声明一点,和使用visual 2005和2008的朋友不用担心,因为已经自带了GDI+函数库,如果你是使用VC++6.0,那么,请先到http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip 下载GDI+,下载完后,解压出来后,将所有文件拷贝至开发目录下的GDI文件夹中(这样文件结构比较好)。

    三、在VC++ 6.0下使用GDI++

    在这里本人不推荐配置VC++,而是通过写代码,将GDI+引入(原因,有利于程序的移植调试,你想想,把程序移到别的电脑上,还要从新配置,麻烦是吧)好了,我们开工吧。

    1、创建MFC应用程序client,这里以对话框来做例子,在stdafx.h文件中加入如下代码:

    #pragma comment(lib, "GDI//gdiplus.lib")

    #define ULONG_PTR ULONG //防止MFC中的ULONG_PTR和GDI+的ULONG_PTR冲突
    #include "GDI//GdiPlus.h"
    using namespace Gdiplus;

    2、在CClientDlg类的头文件中定义两个变量,代码如下:

    public:

    GdiplusStartupInput m_gdiplusStartupInput;
    ULONG_PTR m_pGdiToken;

    3、初始化GDI+,在CClientDlg类的OnInitDialog函数中加入代码:

    GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);

    4、关闭GDI+,在用完GDI后退出,放置地点依情况而定,代码如下:

    diplusShutdown(m_gdiplusToken);

    展开全文
  • 通过这个方法打印出来的physicalHeight和physicalWidth值分别是1080*1920,而屏幕实际大小为3840*2160,而且supportedModes数组里只有一条记录,代表只支持这一种格式输出,而且它的preferredDisplayModeId值为0,不...
  • javascript函数的解释

    2011-02-26 11:03:52
    79.JS中的打印:window.print() 80.JS中的提示输入框:window.prompt("message","defaultReply"); 81.JS中的窗口滚动条:window.scroll(x,y) 82.JS中的窗口滚动到位置:window.scrollby 83.JS中设置时间间隔:setInterval...
  • 3.4.3 X Window 25 3.5 Linux系统的网络互连功能 25 3.5.1 路由器 25 3.5.2 网桥 25 3.5.3 IP伪装 25 3.5.4 IP统计 26 3.5.5 IP 别名 26 3.5.6 流量限制器 26 3.5.7 防火墙 26 3.5.8 端口下传 26 3.5.9 负载平衡 26 ...
  • Linux从入门到精通

    2010-04-25 19:58:09
    E.8.11 我从4.1(或更早)升级, 现在启动X时, 机器在一个灰色屏幕上吊死. E.8.12 当我运行netscape, 色彩似乎不对, 或者得到关于色彩的出错信息. E.8.13 我有一个微软串口鼠标, Linux不能使用它. 怎么办? E.9 系统...
  • 《Linux从入门到精通》

    热门讨论 2008-09-04 17:05:49
    E.8.11 我从4.1(或更早)升级, 现在启动X时, 机器在一个灰色屏幕上吊死. E.8.12 当我运行netscape, 色彩似乎不对, 或者得到关于色彩的出错信息. E.8.13 我有一个微软串口鼠标, Linux不能使用它. 怎么办? E.9 系统...
  • 精通Qt4编程(第二版)源代码

    热门讨论 2014-01-19 13:07:18
    Qtopia Core应用程序直接使用framebuffer,而不是笨重的X Window系统。Qt相关的另一个产品——Qt Jambi,则是基于Qt库构建的,面向Java程序员的应用程序框架。另外,还有一些开源的在其他语言上的Qt绑定,如C#/Mono...
  • VB编程资源大全

    2007-10-17 20:47:23
    30,rgassistant.ZIP 个人助手界面的实现 cool(46KB) 31,winrgn.ZIP 使用 createpolygonrgn 和 setwindowregion 来创建一个“稀奇古怪”的可以动窗口(3KB) 32,vform.ZIP 建立大于屏幕的虚拟...
  • 精通qt4编程(源代码)

    热门讨论 2010-03-17 19:10:40
    \ 第11章 事件机制 李立夏介绍了Qt的事件处理模型,详细介绍了在Qt程序设计中处理事件的五种方法,并讨论了如何利用Qt事件机制加快用户界面响应速度。 283 \ 第12章 数据库 李立夏介绍了Qt的数据库处理,重点介绍了...
  • 配置 Advanced Configuration 以便于屏幕阅读程序访问 33 管理 Citrix 管理员帐户 34 规划管理员帐户 34 1.3.1.1. Citrix 管理员帐户类型 34 完全权限管理员 34 仅限查看权限管理员 34 自定义权限管理员 35 管理 ...
  • 55、禁止打印页面 330 57、JS动态插入元素到BODY的第一个位置 332 58、JS正则表达式去除空格类方法 335 59、JS重写CONFIRM把确定修改为是与否 335 60、JS执行EXE可执行文件 336 61、JS读取注册表且执行EXE文件 336 ...
  • RED HAT LINUX 6大全

    热门讨论 2011-10-21 18:46:06
    5.4.3 更改屏幕保护程序 74 5.4.4 安装系统声音 75 5.4.5 更改键盘和鼠标设置 75 5.4.6 更改窗口按钮 76 5.4.7 控制光标在桌面上的移动 78 5.5 fvwm2的AnotherLevel配置特性 79 5.5.1 重要的文件 79 5.5.2 配置...
  • 53.zip Changing a Window's Shape 改变Windows的外形(5KB)<END><br>54,54.zip Screen Saver which Displays Pictures 一个简单的屏幕保护程序(5KB)<END><br>55,55.zip Flicker free drawing using ...
  • 3.4.3 X Window 3.5 Linux系统的网络互连功能 3.5.1 路由器 3.5.2 网桥 3.5.3 IP伪装 3.5.4 IP统计 3.5.5 IP别名 3.5.6 流量限制器 3.5.7 防火墙 3.5.8 端口下传 3.5.9 负载平衡 3.5.10 EQL 3.5.11 代理服务器 ...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    |------ 4.E General Window |------ 4.F 关于WM_NOTIFY的使用方法 +-- 第五章 对话框 |------ 5.1 使用资源编辑器编辑对话框 |------ 5.2 创建有模式对话框 |------ 5.3 创建无模式对话框 |------ 5.4 在对话框中...
  • LINGO软件的学习

    2009-08-08 22:36:50
    例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。...
  • Window中,如果所有的界面操作都由用户代码来实现,那将是一个很浩大的工程。笔者曾经在DOS设计过窗口图形界面,代码上千行,但实现的界面还是很古板、难看,除了我那个对编程一窍不通的女友,没有一个人欣赏它L;...
  • PDF》让你拥有最佳的打印阅读体验 034《Astro Bot》用新标签页刷编程题 033《一叶》在任意网页开启实时弹幕 聊天窗口 留言板 032《Smallpdf》简单好用的线上PDF工具 031《OneTab》把多个Tab转换为一个列表 ...
  • 在命令行输入,gradlew compileDebugSources,可以查看打印报错的信息,这句话可以控制台输出代码报错的日志。 IOException: CreateProcess error=2, 系统找不到指定的文件。 具体报错日志如下所示 ...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    出于安全考虑,输入账户密码时字符不会在屏幕上回显,光标也不移动。 登录后会看到下面这个界面(以超级用户为例): [root@localhost root]# last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月...
  • react-native 之布局篇

    2021-01-10 04:06:31
    如何获取实际的像素尺寸呢? 这对图片的高清化很重要,如果我的图片大小为100*100 px. 设置宽度为100 * 100. 那在iphone上的尺寸就是模糊的。 这个时候需要的图像大小应该是 100 * pixelRatio的大小 ...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

window如何打印屏幕