⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base5.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 3 页
字号:
//Draw the ellipse.&nbsp;<br>      
pDC-&gt;Ellipse (rcView);&nbsp;<br>      
//Restore original brush.&nbsp;<br>      
pDC-&gt;SelectObject (pOrgBrush);&nbsp;<br>      
}&nbsp;<br>     
三、确定GDI对象的属性信息&nbsp;<br>     
可以调用GDIObject:: GetObject。这个函数将指定图表设备的消息写入到&nbsp;<br>      
缓冲区。下例创建了几个有用的辅助函数。&nbsp;<br>     
//Determine if font is bold.&nbsp;<br>      
BOOL IsFontBold (const CFont&amp;font)&nbsp;<br>      
{kk1}&nbsp;<br>     
LOGFONT stFont;&nbsp;<br>      
font.GetObject (sizeof (LOGFONT), &amp;stFont);&nbsp;<br>      
return (stFont.lfBold)? TRUE: FALSE;&nbsp;<br>      
}&nbsp;<br>     
<br>     
//Return the size of a bitmap.&nbsp;<br>      
CSize GetBitmapSize (const CBitmap&amp;bitmap)&nbsp;<br>      
{ kk1}<br>      
BITMAP stBitmap;&nbsp;<br>      
bitmap.GetObject (sizeof (BITMAP), &amp;stBitmap);&nbsp;<br>      
return CSize (stBitmap.bmWidth, stBitmap. bmHeight);&nbsp;<br>      
}&nbsp;<br>     
//Create a pen with the same color as a brush. BOOL CreatePenFromBrush       
(Cpen&amp;pen, cost Cbrush&amp;brush)&nbsp;<br>      
{kk1}&nbsp;<br>     
LOGBRUSH stBrush;&nbsp;<br>      
brush.Getobject (sizeof (LOGBRUSH), &amp;stBrush);&nbsp;<br>      
return pen. Createpen (PS_SOLID, 0, stBrush.ibColor);&nbsp;<br>      
}&nbsp;<br>     
四、实现一个橡皮区矩形&nbsp;<br>     
CRectTracker是一个很有用的类,可以通过调用CRectTracker::TrackRubberBand&nbsp;<br>     
响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。下例表明使用CRectTracker移动和重置视窗中的蓝色椭圆的大小是很容易的事情。&nbsp;<br>     
首先,在文件档中声明一个CRectTracker数据成员: class       
CSampleView : Public CView&nbsp;<br>      
{ kk1}<br>      
…&nbsp;<br>     
public :&nbsp;<br>      
CrectTracker m_tracker;&nbsp;<br>      
…&nbsp;<br>     
};&nbsp;<br>     
其次,在文档类构造函数中初始化CRectTracker对象: CSampleDoc::       
CSampleDOC ()&nbsp;<br>      
{ kk1}<br>      
//Initialize tracker position, size and style. m_tracker.m_rect.SetRect (0, 0,       
10, 10);&nbsp;<br>      
m_tracker.m_nStyle=CRectTracker:: resizeInside | CRectTracker:: dottedLine;&nbsp;<br>      
}&nbsp;<br>     
然后,在OnDraw函数中画椭圆和踪迹矩形:&nbsp;<br>     
void CSampleView:: OnDraw (CDC* pDC)&nbsp;<br>      
{ kk1}<br>      
CSampleDoc* pDoc=GetDocument ();&nbsp;<br>      
ASSERT_VALID (pDoc);&nbsp;<br>      
//Select blue brush into device context. CBrush brush (RGB (0, 0, 255));&nbsp;<br>      
CBrush* pOldBrush=pDC-&gt;SelectObject (&amp;brush);&nbsp;<br>      
//draw ellipse in tracking rectangle.&nbsp;<br>      
Crect rcEllipse;&nbsp;<br>      
pDoc-&gt;m_tracker.GetTrueRect (rcEllipse);&nbsp;<br>      
pDC-&gt;Ellipse (rcEllipse);&nbsp;<br>      
//Draw tracking rectangle.&nbsp;<br>      
pDoc-&gt;m_tracker.Draw (pDC);&nbsp;<br>      
//Select blue brush out of device context.&nbsp;<br>      
pDC-&gt;Selectobject (pOldBrush);&nbsp;<br>      
}&nbsp;<br>     
最后,使用ClassWizard处理WM_LBUTTONDOWN消息,并增加下述代码。该段代码根据鼠标击键情况可以拖放、移动或者重置椭圆的大小。&nbsp;<br>     
void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)&nbsp;<br>      
{ kk1}<br>      
//Get pointer to document.&nbsp;<br>      
CSampleDoc* pDoc=GetDocument ();&nbsp;<br>      
ASSERT_VALID (pDoc);&nbsp;<br>      
//If clicked on ellipse, drag or resize it. Otherwise create a rectangle<br>      
//rubber-band rectangle nd create a new ellipse. BOOL       
bResult=pDoc-&gt;m_tracker.HitTest (point)!=&nbsp;<br>      
CRectTracker::hitNothing;&nbsp;<br>     
//Tracker rectangle changed so update views.&nbsp;<br>      
if (bResult)&nbsp;<br>      
{ kk1}<br>      
pDoc-&gt;m_tracker.Track (this,point,TRue);<br>      
pDoc-&gt;SetModifiedFlag ();&nbsp;<br>      
pDoc-&gt;UpdateAllViews (NULL);&nbsp;<br>      
}&nbsp;<br>     
else pDoc-&gt;m-tracker.TrackRubberBand (this,point,TRUE);&nbsp;<br>      
CView:: onLButtonDown (nFlags,point);&nbsp;<br>      
}&nbsp;<br>     
<br>     
在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序。<br>     
TCanvas Object(画布对象)<br>      
TCanvas对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多部件(如TIMage,TMemo)的Canvas属性就是TCanvas对象。在部件上绘制图形就是在部件的画布上绘制。TCanvas的Brush,Pen,Font属性分别是TBrush,TPen,TFont对象,它们用于定义绘制图形的风格。<br>     
画布的笔的位置定义在PenPos属性中,可用MoveTo方法来移动笔。如果要在画布上输出文本,可用Textout方法。<br>     
Tpen Object(画笔对象)<br>      
应用程序常用TPen对象在画布上绘制各种线段,笔的颜色在Color属性中定义。线段宽度在Width属性中定义。Style属性定义了线段的各种类型,这些类型的定义与Visual       
C++中的定义类似。<br>     
 Mode属性定义线段的颜色。可结合当前的颜色、屏幕在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序。<br>
TCanvas Object(画布对象)<br>      
TCanvas对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多部件(如TIMage,TMemo)的Canvas属性就是TCanvas对象。在部件上绘制图形就是在部件的画布上绘制。TCanvas的Brush,Pen,Font属性分别是TBrush,TPen,TFont对象,它们用于定义绘制图形的风格。<br>     
画布的笔的位置定义在PenPos属性中,可用MoveTo方法来移动笔。如果要在画布上输出文本,可用Textout方法。<br>     
Tpen Object(画笔对象)<br>      
应用程序常用TPen对象在画布上绘制各种线段,笔的颜色在Color属性中定义。线段宽度在Width属性中定义。Style属性定义了线段的各种类型,这些类型的定义与Visual       
C++中的定义类似。<br>     
 Mode属性定义线段的颜色。可结合当前的颜色、屏幕TColor类型<br>
TColor类型用于定义一个对象颜色。很多部件的颜色属性就是TColor       
类型, 在Graphics单元中TColor定义如下:<br>      
  TColor = -(COLOR_ENDCOLORS + 1)..$02FFFFF;<br>      
这是一个32位二进制数据。Graphic单元中还定义了一些常用的颜色常量,这些常量或直接映射成系统调色板中最相近的颜色,或映射成Wondows       
控制面板中颜色部分的系统视频颜色。<br>     
直接映射成系统调色板中的颜色有:<br>     
ClAqua,CLBlack,ClBlue,ClbkGrray,ClFuchsoa...ClYellow<br>     
映射程序用4字节的二进制码来定义颜色,低3 位字节代表RGB       
相应的颜色,如$00FF0000表示纯蓝,$0000FF00表示纯绿,$000000FF表示纯红,$00000000表示黑色,$00FFFFFF表示白色。如果最高位字节是$00,则表示用系统调色板中最相近的颜色;最高位字节是$01,则表示用当前调色板中最相近的颜色匹配;最高位字节是$02,则用当前设备描述表中逻辑调色板的次相近颜色匹配。<br>     
用Windows API的SelectPalette函数可创建逻辑调色板,要实现逻辑调色板到硬件调色板的映射,需用函数RealizePalett。<br>      
图像对象概述<br>     
TGraphic对象<br>     
TGraphic对象是TBitmap ,TIcon,Tmetafile对象的基类。如果知道图像的具体类型(       
如位图, 图标元文件) ,       
则应将图像贮存在相应类型的对象中( 如TBitmap,TIcon,Tmetafile),否则应该使用可贮存任何图像类型的TPicture对象。<br>      
TPicture对象<br>     
TPicture对象可以保存位图、图标或元文件。Graphic属性中包括图像的类型;图像的高度和宽度分别定义在Height,Width属性中;调用LoadFromFile方法,可以从文件中装载一幅图像:<br>     
procedure TForm1.FormCreate(Sender: TObject);<br>      
begin<br>     
BitBtn1.Glyph.LoadFromFile('TARTAN.BMP');<br>     
end;<br>     
要保存一个位图,则要用SaveToFile方法;要把图像复制到剪切板,可以调用TClipboard对象的Assign方法。<br>     
TImage部件<br>     
TImage部件用以在窗体中显示图像,它的Picture       
属性保存着要显示的图像, 这是一个TPicture对象。AutoSize,Stretch属性是用来调节部件与图像的大小的。当AutoSize       
为真值时,TImage部件将根据它所包含的图像的大小来调整自身的大小;当AutoSize为假值时,不论图像有多大,部件将保持设计时的大小。如果部件比图像小,       
那么只有一部分图像是可见的。当Stretch为真值时,位图像将根据部件的大小调整自身的大小,当部件大小改变时,元文件也做相应变化。Stretch属性对图标没有作用。<br>     
TBitmap Object(位图对象)<br>      
位图对象包含一个位图图像,有HBITMAP,HPALETE句柄,可自动管理调色板。位图对象也有画布属性。位图的Palette属性用来控制位图的颜色映射,它包括256种可显示的颜色。       
如果应用程序用前景色绘制位图,Palette 属性的颜色将被加入Windows系统调色板,其它颜色被映射到系统调色板已存在的颜色。如果应用程序用自己的颜色绘制位图,而其它程序已占有系统调色板,位图的颜色将被映射到系统调色板中。<br>      
如果Monochrome属性设置成假,位图将显示成彩色,反之显示成黑白色。<br>     
调用Draw和StretchDraw方法可在画布上绘制位图。<br>     
<br>     
这里是一个用Canvas对象实现的小画图程序,这里看到的是程序运行的一个瞬间,源程序在例程中——Canvas文件夹中,读者可以自行参照开发应用程序。<br>     
<br>     
在介绍用编程的方法来生成位图图形和进行图像处理前,我们先来看一下如何用Windows图形工具来生成和编辑位图文件。<br>     
在Windows程序生成工具软件Visual C++中,提供了生成、编辑位图图片和图标的位图编辑器。通过位图编辑器,你可以很方便的画出一张图片加入所编译的应用程序中;或是给你的程序设计一个美观的图标。你还可以将你喜欢的位图图片和图标引入到你的程序中。<br>      
你可以在程序源码中资源栏中直接新建或引入图片、图标。在已编译过的程序中你也可以用“插入”菜单中的“插入资源”选项,来完成上述这些处理操作。<br>     
使用位图编辑器,你可以很方便的生成和编辑图片和图标,但位图编辑器只能用于简单的图形处理,在下一章里我们还将为您介绍如何用程序来实现。</p>  
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       
<a href = "#top">返回到上面</a>     
</p>     
 </body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -