首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

带你认识WinCE Display驱动开发 02

带你认识WinCE Display驱动开发 02

return fOk;
}

            pszInstance:注册表中显示驱动的相关注册表值
            dwNumMonitors:支持的Monitor的个数
         在该函数中主要通过读取注册表信息判断显示驱动的存在,如果返回错误,则GWES会停止Display驱动的初始化。当然,用户可以根据自己的要求灵活掌握,也可以在这里初始化显示设备或做其他的初始化工作。
         4 实现GPE类中的函数
        由于NewGPE继承于GPE类,所以必须实现GPE类中的所有纯虚函数,这些函数实际上就是PDD层驱动中需要实现的函数,如下:
         4.1 virtual SCODE GetModeInfo(GPEMode *pMode, INT modeNumber)
            获得显示模式。
                pMode:输出显示模式结构
                modeNumber:显示模式索引号
        4.2 virtual int NumModes(void)
            获得当前驱动支持的显示模式的个数
        4.3 virtual SCODE SetMode(INT modeId, HPALETTE *palette)
            设置显示模式。
                modeId:显示模式索引号
                palette:调色板指针,指向一个由EngCreatePalette函数创建的调色板
        4.4 virtual SCODE AllocSurface(GPESurf **surface, INT width, INT height, EGPEFormat format, INT surfaceFlags)
            在系统内存中创建一个绘图平面。
                surface:指向被分配的内存的指针
                width:宽度
                height:高度
                format:绘图平面格式
                surfaceFlags:标记位,标明在哪分配内存
        4.5 virtual SCODE SetPointerShape(GPESurf *pMask, GPESurf *pColorSurface, INT xHot, INT yHot, INT cX, INT cY);
            设置光标形状。
                pMask:指向一个包含光标形状的掩码
                pColorSurface:指向被光标使用的颜色绘图平面
                xHot:光标热点的X坐标
                yHot:光标热点的Y坐标
                cX:光标宽度
                cY:光标高度
        4.6 virtual SCODE MovePointer(int x, int y)
            移动光标到指定位置或者隐藏光标
                x:光标移动位置的x坐标,若为-1表示隐藏光标。
                y:光标移动位置的y坐标
        4.7 virtual SCODE BltPrepare(GPEBltParms *blitParameters)
            在做位块传输前会先执行该函数,用于确定执行BLT的函数
                blitParameters:指向一个GPE的位块传输参数的结构体
       4.8 virtual SCODE BltComplete(GPEBltParms *blitParameters)
            该函数用于释放在BltPrepare中申请的资源
                blitParameters:指向一个GPE的位块传输参数的结构体
       4.9 virtual SCODE Line(GPELineParms *lineParameters, EGPEPhase phase)
            画线函数
                lineParameters:指向一个GPE的Line结构体,描述所画的线
                phase:画线所处的阶段,具体描述如下
                                    gpeSingle:画单根线
                                    gpePrepare:准备画线
                                    gpeContinue:画线过程中
                                    gpeComplete:画线完成
        在这里要提一点,有时我们会看到在该函数中调用另一个函数WrappedEmulatedLine(..),这个函数在WinCE的PUBLIC目录下的参考Display驱动中也可以找到,该函数是一个快速的画线函数,里面采用了Bresenham画线算法,通过采用运行速度快的加减和移位运算来完成画线。
         4.10 virtual SCODE SetPalette(const PALETTEENTRY *pSource, USHORT firstEntry, USHORT numEntries)
            设置调色板
                pSource:指向一个调色板入口信息的结构体
                firstEntry:第一个入口
                numEntries:入口的个数
       4.11 virtual int InVBlank(void)
            显示设备是否处于垂直消隐期间
        上述函数在GPE类中均被定义为纯虚函数,需要在继承类中实现,也就是在我们的驱动程序中实现。这些函数是必须实现的。根据显示的需求,还可以在显示驱动中添加其他的函数,比如对光标的支持,对旋转的支持等,如下:
        4.12 void CursorOn(void)
            使能光标显示。
       4.13 void CursorOff(void)
            禁止光标显示。
      4.14 void SetRotateParms(void)
            设置屏幕翻转参数。
       4.15 void DynRotate(int angel)
            支持动态翻转。
                angel:翻转角度
       4.16 ULONG *APIENTRY DrvGetMasks(DHPDEV dhpdev)
            获得显示模式的RGB掩码
                dhpdev:指向掩码信息,比如RGB565模式为(0xf800,0x07e0,0x001f)
           NOTE:该函数必须在驱动中被实现。
       4.17 PowerHandler(BOOL bOff)
            电源控制。
                bOff:TRUE表示关闭电源,FALSE表示打开电源
        4.18 ULONG DrvEscape(DHPDEV dhpdev, SURFOBJ* pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut)
        该函数提供给应用程序的一个直接访问显示驱动的接口,和流设备驱动中的IoCtls函数类似。应用程序通过调用ExtEscape函数传送操作码和数据给显示设备驱动,DrvEscape函数会接收到数据并进行处理,然后返回相应结果给EstEscape函数。用户也可以根据需要自己定义相应的操作码。
                dhpdev:设备句柄
                pso:指向一个绘图平面的结构
                iEsc:操作码
                cjIn:输入数据buffer的大小
                pvIn:指向输入数据buffer
                cjOut:输出数据buffer的大小
                pvOut:指向输出数据buffer
返回列表