图形组件:
提供了对线、形状等绘制能力
所有的系统图形组件都最终依赖于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