iniwf

风是温柔的,雨是伤心的,云是快乐的,月是多情的,爱是迷失的,恋是醉人的,情是难忘的,天是长久的,地是永恒的

驱动开发之六 --- 一个简单的显示驱动之五 【译文】

转自http://hi.baidu.com/combojiang/blog/item/07be776ee0e6ffdf81cb4af7.html

DrvCompletePDEV

DrvCompletePDEV的调用,是用在DrvEnablePDEV调用之后,用来通知显示驱动,设备对象现在已经完成。仅有的参数是一个私有的在DrvEnablePDEV调用中创建的数据结构和一个指向GDI设备的完成句柄。除非你有更多的初始化要做,否则通常的做法是保存这个gdi句柄,然后继续。下面的代码来自于例子驱动。



/*********************************************************************

* GdiExample_DrvCompletePDEV

*

*   This is called to complete the process of enabling the device.

*   

*

********************************************************************
*/


void GdiExample_DrvCompletePDEV(DHPDEV dhpdev, HDEV hdev)

{

    PDEVICE_DATA pDeviceData 
= (PDEVICE_DATA)dhpdev;

    ENGDEBUGPRINT(
0"GdiExample_DrvCompletePDEV Enter \r\n", NULL);

    pDeviceData
->hdev = hdev;

    ENGDEBUGPRINT(
0"GdiExample_DrvCompletePDEV Exit \r\n", NULL);

}


DrvDisablePDEV

当这个PDEV不再需要的时候,调用这个api消灭。如果还有一个表面使能,这个API调用之前,需要调用DrvDisableSurface。这个api我们实现得很简单,仅仅是执行了一些清理工作,清理了在创建私有的PDEV结构期间创建的东西。

/*********************************************************************

* GdiExample_DrvDisablePDEV

*

*   This is called to disable the PDEV we created.

*   

*

********************************************************************
*/


void GdiExample_DrvDisablePDEV(DHPDEV dhpdev)

{

    PDEVICE_DATA pDeviceData 
= (PDEVICE_DATA)dhpdev;

    UINT dwBytesReturned 
= 0;

    ENGDEBUGPRINT(
0"GdiExample_DrvDisablePDEV\r\n", NULL);

    
if(pDeviceData->pMappedFile)

    
{

       EngUnmapFile(pDeviceData
->pMappedFile);

    }


    EngFreeMem(dhpdev);

}


DrvEnableSurface

这个api是用在PDEV完成以后,用来请求显示驱动创建一个表面。当创建一个表面的时候,注意你可以有两种选择。你可以创建一个由显示驱动管理的表面,也可以创建一个由GDI管理的表面。下面的代码选择一个选项来管理它自己的设备表面。

整个的用途就是定义有一个绘画表面,GDI也能在上面绘制。显示驱动有他们自己的设备表面,因此通常需要管理自己的表面。在做这个事情时,它需要以某种方式来描述这个表面,以使GDI能够理解,并能够在上面绘制。这意味着起始地址甚至是显示程度的定义,作为显示驱动对所有的显示模式一般都不能有线性缓冲。在我们这个例子中,我们使用我们创建的内存映像文件来作为我们的视频内存。

/*********************************************************************

* GdiExample_DrvEnableSurface

*

* This API is used to enable the physical device surface. 

*

* You have two choices here.

*     

*     1. Driver Manages it's own surface

*          EngCreateDeviceSurface - Create the handle

*          EngModifySurface - Let GDI Know about the object.

*

*     2. GDI Manages the surface

*          EngCreateBitmap - Create a handle in a format that 

*                            GDI Understands

*          EngAssociateSurface - Let GDI Know about the object.

*

*

********************************************************************
*/


HSURF GdiExample_DrvEnableSurface(DHPDEV dhpdev)

{

    HSURF      hsurf;

    SIZEL       sizl;

    PDEVICE_DATA pDeviceData 
= (PDEVICE_DATA)dhpdev;

    

    ENGDEBUGPRINT(
0"GdiExample_DrvEnableSurface\r\n", NULL);

    pDeviceData
->pDeviceSurface = 

      (PDEVICE_SURFACE)EngAllocMem(FL_ZERO_MEMORY, 

      
sizeof(DEVICE_SURFACE), FAKE_GFX_TAG);

    sizl.cx 
= 800;

    sizl.cy 
= 600;

    hsurf 
= (HSURF)EngCreateDeviceSurface(

            (DHSURF)pDeviceData
->pDeviceSurface, sizl, BMF_32BPP);

    

    EngModifySurface(hsurf, pDeviceData
->hdev, 

           HOOK_FILLPATH 
| HOOK_STROKEPATH | HOOK_LINETO | 

           HOOK_TEXTOUT 
| HOOK_BITBLT | HOOK_COPYBITS, 

           MS_NOTSYSTEMMEMORY, (DHSURF)pDeviceData
->pDeviceSurface, 

           pDeviceData
->pVideoMemory, 800*4, NULL);


    

    
return(hsurf);

}


DrvDisableSurface

调用这个api用来注销在DrvEnableSurface调用中创建的绘画表面。这个在注销PDEV之前调用。下面的代码来自于示例程序。

/*********************************************************************

* GdiExample_DrvDisableSurface

*

* This API is called to disable the GDI Surface.

*

*

********************************************************************
*/


void GdiExample_DrvDisableSurface(DHPDEV dhpdev)

{

    PDEVICE_DATA pDeviceData 
= (PDEVICE_DATA)dhpdev;

    ENGDEBUGPRINT(
0"GdiExample_DrvDisableSurface\r\n", NULL);

    EngDeleteSurface(pDeviceData
->hsurf);

    pDeviceData
->hsurf = NULL;

    EngFreeMem(pDeviceData
->pDeviceSurface);

    pDeviceData
->pDeviceSurface = NULL;

}

posted on 2009-03-23 22:16 iniwf 阅读(374) 评论(0)  编辑 收藏 引用 所属分类: 驱动


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

收藏夹

IT技术

积分与排名

最新评论

阅读排行榜

评论排行榜