📄 专业tc--图形篇4.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0034)http://tc2001.myrice.com/base5.htm -->
<HTML><HEAD><TITLE>专业TC--图形篇</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META content=none name="Microsoft Border"></HEAD>
<BODY>
<H1 style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=center>
<FONT color=#ff0000><B>WINDOWS编程基础</B></FONT></H1>
<H1 style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=center><FONT
color=#00ff00><A href="http://tc2001.myrice.com/index.htm"><FONT
size=5><B>回首页</B></FONT></A></FONT> <A
href="http://tc2001.myrice.com/base4.htm"><FONT size=5>上一页</FONT></A> <A
href="http://tc2001.myrice.com/base6.htm"><FONT color=#00ff00
size=5>下一页</FONT></A></H1>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"></P>
<HR>
<P>
随着PC机上图象处理软件及显示卡技术的发展,使苹果Mac(麦金托什)机独霸图象处理的局面被打破。如今在PC机上处理高质量图象已不再是梦想,丰富的图象处理软件如Photo
Styler、Corel Draw、Adobe Photoshop、Paintbrush、Freehand、Imagepal、Picture
Publisher等等,其处理图象的能力和水平已直追一些专业图形图象工作站。加上多媒体技术的推广发展,使图象处理成为当今多媒体应用中的一项重要内容。 <BR>Windows提供的三大主要功能中,标准的图形用户界面最引人注目,而且对用户也是最重要的。在它所提供的用户界面中使用图标来代表驱动器、文件、子目录和许多操作系统的命令及操作。<BR>
因为所有的Windows程序都具有类似的结构和相同的“外观”,所以用户不需花费很长的时间来学习新程序的用法。对于编程人员而言,具有这种一致的用户界面是因为直接使用Windows的内部子模序来创建用户界面的基本元素(菜单、对话框、滚动条等)。所有的菜单都具有同样的键盘和鼠标接口,这是因为Windows自己处理这项工作,而不是把它交给应用程序去完成。<BR>
Windows的多任务操作环境允许用户同时运行多个应用程序,或在同一个程序中同时“并行”完成几件事情。一个典型的例子是在Windows中运行四个应用程序,每个程序在屏幕上占一个矩形区域。用户可在任何时间移动屏幕上的窗口、改变窗口大小、从一个窗口转换到另一个窗口和修改窗口内的信息。<BR>
虽然例程里的这个例子有四个并发执行的进程,但是在任何时候只有一个进程在实际使用处理器。并发运行的任务可以有任意多个,由Windows负责把处理器时间分配给多个任务,Windows根据排好的输入队列及其他信息来控制微处理器时间的分配。<BR>在多任务操作系统未出现之前,应用程序独自控制计算机的所有资源(输入/输出设备、内存、显示器和CPU)。而在Windows中,所有这些资源都是共享的。<BR>
内存是Windows中最重要的共享资源之一,当多个应用程序在同一时间运行时,这些应用程序共享内存资源,如果程序运行结束,则归还其所占用的内存区域。为了提供大块内存区域,Windwos能在内存中搬移整块代码和数据,把存储碎片收集起来以形成大块连续的内存区域。Windows在内存管理方面的一个最明显特征是它把软件开发者从DOS的内存限制中解放出来。<BR>
在用户并发运行的几个程序都调用同一个程序时,为了节省空间,Windows共享那一段相同的代码,在Windows中运行的程序甚至可以共享其他.EXE文件中的例程。在Windows中把包含这种共享的例程的库文件称为动态链接库(DLL),Windows在运行时可把程序与动态链接库中的例程链接起来。为此,Windows程序使用了一种新的.EXE文件格式,这种文件包括了Windows执行时所需要的信息,如管理代码段和数据段以及用于动态链接的必要信息。<BR><BR>
在开始介绍Windows图形程序设计之前,这里我想先介绍一些Visual
C++图形编程常见的问题和一些基本方法和技巧:<BR>一、在用户环境中确定系统显示元素的颜色 <BR>调用SDK函数GetSysColor可以获取一个特定显示元素的颜色。下例说明了如何在MFC函数CMainFrameWnd::
OnNcPaint中调用该函数设置窗口标题颜色。 <BR>void CMiniFrameWnd:: OnNcPaint () <BR>{
kk1}<BR>… <BR>dc.SetTextColor (:: GetSysColor (m_bActive
? <BR>OLOR_CAPTIONTEXT :
COLOR_INACTIVECAPTIONTEXT)); <BR>… <BR>} <BR>二、访问预定义的GDI对象 <BR>可以通过调用CDC::
SlectStockObject使用Windows的几个预定义的对象,诸
如刷子、笔以及字体。下例使用了Windows预定义的笔和刷子GDI对象在视窗中画一个椭圆。 <BR>//Draw ellipse using
stock black pen and gray brush. <BR>void CSampleView:: OnDraw (CDC*
pDC) <BR>{ kk1}<BR>//Determine size of view. <BR>CRect
rcView; <BR>GetClientRect (rcView); <BR>//Use stock black pen and
stock gray brush to draw ellipse. <BR>pDC->SelectStockObject
(BLACK_PEN); <BR>pDC->SelectStockObject (GRAY_BRUSH) <BR>//Draw the
ellipse. <BR>pDC->Ellipse
(reView); <BR>} <BR>也可以调用新的SDK函数GetSysColorBrush获取一个系统颜色刷子,下例用背景色在视窗中画一个椭圆:<BR>void
CsampleView:: OnDraw (CDC* pDC) <BR>{kk1} <BR>//Determine size of
view. <BR>CRect rcView; <BR>GetClientRect (rcView); <BR>//Use
background color for tooltips brush. <BR>CBrush *
pOrgBrush=pDC->SelectObject<BR>(CBrush::FromHandle(::GetSysColorBrush
(COLOR_INFOBK))); <BR>//Draw the ellipse. <BR>pDC->Ellipse
(rcView); <BR>//Restore original brush. <BR>pDC->SelectObject
(pOrgBrush); <BR>} <BR>三、确定GDI对象的属性信息 <BR>可以调用GDIObject::
GetObject。这个函数将指定图表设备的消息写入到 <BR>缓冲区。下例创建了几个有用的辅助函数。 <BR>//Determine if
font is bold. <BR>BOOL IsFontBold (const
CFont&font) <BR>{kk1} <BR>LOGFONT stFont; <BR>font.GetObject
(sizeof (LOGFONT), &stFont); <BR>return (stFont.lfBold)? TRUE:
FALSE; <BR>} <BR><BR>//Return the size of a bitmap. <BR>CSize
GetBitmapSize (const CBitmap&bitmap) <BR>{ kk1}<BR>BITMAP
stBitmap; <BR>bitmap.GetObject (sizeof (BITMAP),
&stBitmap); <BR>return CSize (stBitmap.bmWidth, stBitmap.
bmHeight); <BR>} <BR>//Create a pen with the same color as a brush.
BOOL CreatePenFromBrush (Cpen&pen, cost
Cbrush&brush) <BR>{kk1} <BR>LOGBRUSH
stBrush; <BR>brush.Getobject (sizeof (LOGBRUSH),
&stBrush); <BR>return pen. Createpen (PS_SOLID, 0,
stBrush.ibColor); <BR>} <BR>四、实现一个橡皮区矩形 <BR>CRectTracker是一个很有用的类,可以通过调用CRectTracker::TrackRubberBand <BR>响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。下例表明使用CRectTracker移动和重置视窗中的蓝色椭圆的大小是很容易的事情。 <BR>首先,在文件档中声明一个CRectTracker数据成员:
class CSampleView : Public CView <BR>{ kk1}<BR>… <BR>public
: <BR>CrectTracker
m_tracker; <BR>… <BR>}; <BR>其次,在文档类构造函数中初始化CRectTracker对象:
CSampleDoc:: CSampleDOC () <BR>{ kk1}<BR>//Initialize tracker position,
size and style. m_tracker.m_rect.SetRect (0, 0, 10,
10); <BR>m_tracker.m_nStyle=CRectTracker:: resizeInside | CRectTracker::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -