图形绘制1

 



图形组件:

提供了对线、形状等绘制能力

所有的系统图形组件都最终依赖于GDI


GDI:图形设备接口

通过图形上下文和图形设备来执行绘图操作


CGraphicsContext 所有图形上下文类的基类(抽象类)

CGraphicsDevice/CBitmapDevice(抽象类)


BITGDI

定义了屏幕和位图特有的图像组件

定义了具体的上下文和图形设备类:

CWindowGc/CFbsBitGc

CFbsDevice/CWsScreenDevice


-----------------------------------------------------------

图形上下文类:

提供了再某种图形设备上作图的函数、需要与相应的图形设备类结合使用

CGraphicsContext

绘图设置:笔等

绘图方法:点、线等


CBitmapContext

对CGraphicsContext进行了具体的实现

两个具体实现:

CFbsBitGc:位图绘制

CWindowGc:屏幕绘制

----------------------------------------------

图形设备类:

对某种具体的图形设备的抽象,完成图形上下文类中的设置的绘图操作

CGraphicsDevice(抽象)

CBitmapDevice

具体实现

CBitmapContext三个具体实现

1、CWsScreenDevice:在屏幕(现存)上绘制

2、CFbaBitmapDevice:对内存的CFbsBitmap类对象绘制

3、CFbsScreenDevice:对屏幕(显存)直接访问


-------------------------------------------------------

绘图基础

在控件中绘图

控件包括:CCoeControl类本身及子类(如:视图类)

通过CWindowGc类提供的方法实现

获取方法:

CCoeControl::SystemGc();

CEikonEnv::Static()->SystemGc()



获取屏幕属性:

通过CWsScreenDevice类

屏幕的尺寸和旋转

GetDefaultScreenSizeAndRotation()

显示模式

DisplayMode() const

高度

FontHeightInPixels()

字体

GetFontById()

GetNearestFontInPixels()

捕获屏目

CopyScreenToBitmap()


CWsScreenDevice对象的获取方法

CWindowGc::Device()


----------------------------------------

Draw()


virtual void Draw(const TRect& /*aRect*/) const

TRect定义了需要重画的无效区域


Draw()绘图步骤

1、通过CCoeControl类的一个函数

CWindowGc& gc = SystemGc()

2、CWindowGc::Clear()清屏

gc.clear()

3、调用绘图方法进行绘制

------

Draw()

由框架调用的、不能直接调用

触发框架的时间:

1、创建新的窗口

2、使窗口中的内容无效的事件(窗口重叠等)

3、CCoeControl的DrawNow()或DrawDeferred()被调用



----------------------------------------------------------

DrawNow() && DrawDeferred()

DrawNow:

立刻启动绘图、要求程序框架强制调用Draw()函数

DrawDeferred()

仅标出无效的控件区域、重绘造作又窗口服务器调用


----不使用Draw()的方法-----

1、调用CWindowGc::Activate()激活图形上下文

2、调用RWindow::BeginRedraw()通知窗口服务器开始重绘

3、在控件上绘图

4、绘图完成时用RWindow::EndRedraw()通知窗口服务器结束重绘

5、调用CWindowGc::Deactivate()去活图形上下文

---------------------------------



色彩类TRgb

红R、绿G、篮B

在gdi.h中定义

KRgbBlack。。。。。。。。。。。。。。

0x000000~~~0xffffff





----------------------------------

逻辑色彩TLogicalColor

菜单、工具栏等色彩

gulcolor.h中定义

常用的有:

EColorWindowBackground:窗口的背景色


逻辑色彩与物理色彩的映射

CColorList对象中

通过CEikonEnv::ColorList()函数获得色彩列表


---------------------------------------


显示模式


TDisplayMode

gdi.h中定义


--------------------------------------------------------------------


代码示例/代替Draw()方法


void CDrawerAppView::DrawMyLine()

{

CWindowGc& gc = SystemGc();

gc.Clear();

gc.Activate(Window());

Window().BeginRedraw();

gc.SetPenStyle( CGraphicsContext::ESolidPen );

gc.SetPenColor( KRgbBlue );

gc.SetPenSize( TSize(3,3) );

gc.DrawLine( TPoint(10,10),TPoint(100,100) );

Window().EndRedraw();

gc.Deactivate();

}


需要添加

W32STD.H 

ws32.lib 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值