VisualCMFC入门教程版

VisualCMFC入门教程版
VisualCMFC入门教程版

V i s u a l C M F C入门教

程版

集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

Visual C++MFC入门教程目录

+-- 第一章 VC入门

|------

|------

|------

|------

|------

+-- 第二章图形输出

|------

|------

|------

|------

|------

|------

+-- 第三章文档视结构

|------

|------

|------

|------

|------

|------

+-- 第四章窗口控件

|------

|------

|------

|------

|------

|------

|------

|------

|------

|------

|------

|------

|------

|------

+-- 第五章对话框

|------

|------

|------

|------

|------

|------

|------

|------

|------

+-- 第六章网络通信开发

|------

+------

《》闻怡洋/文

如何学好VC

这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。万事开头难,为了帮助朋友们更快的掌握VC开发,下面我将自己的一点体会讲一下:

1、需要有好的C/C++基础。正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字符界面程序的编写。这样做的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编程中常犯的错误。更重要的是理解并能运用C++的各种特性,这些在以后的开发中都会有很大的帮助,特别是利用MFC进行开发的朋友对C++一定要能熟练运用。

2、理解Windows的消息机制,窗口句柄和其他GUI句柄的含义和用途。了解和MFC各个类功能相近的API函数。

3、一定要理解MFC中消息映射的作用。

4、训练自己在编写代码时不使用参考书而是使用Help Online。

5、记住一些常用的消息名称和参数的意义。

6、学会看别人的代码。

7、多看书,少买书,买书前一定要慎重。

8、闲下来的时候就看参考书。

9、多来我的主页。^O^

后面几条是我个人的一点意见,你可以根据需要和自身的情况选用适用于自己的方法。

此外我将一些我在选择参考书时的原则:

对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较轻松。买书前一定要慎重如果买到不好用的书可能会对自己的学习积极性产生击。?

对于已经掌握了VC的朋友:这种程度的开发者应该加深自己对系统原理,技术要点的认识。需要选择一些对原理讲解的比较透彻的书籍,这样一来才会对新技术有更多的了解,最好书中对技术的应用有一定的阐述。尽量选择示范代码必较精简的书,可以节约银子。

此外最好涉猎一些辅助性的书籍。

理解Windows消息机制

Windows系统是一个消息驱动的OS,什么是消息呢我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。

1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。

2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。

3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。

4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。

5、示例:下面有一段伪代码演示如何在窗口过程中处理消息

LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM)

{

switch(uMessageType)

{ .);.);.);.);

if(id == quit)

break;

translateMessage(...);

}

当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。下图为消息投递模式

在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。就是这种系统。而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。

利用Visual C++/MFC开发Windows程序的优势

MFC借助C++的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。(但我个人认为了解系统原理对开发很有帮助)正因为MFC是建立在C++的基础上,所以我强调C/C++语言基础对开发的重要性。利用C++的封装性开发者可以更容易理解和操作各种窗口对象;利用C++的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。

在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法:

代码如下

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

.)

{

switch(...)

{

.);

break;

.);

}

break;

. ); 相当于sprintf

Find 查找指定字符,字符串

Compare 比较

CompareNoCase 不区分大小写比较

MakeUpper 改为小写

MakeLower 改为大写

CStringArray:用来表示可变长度的字符串数组。数组中每一个元素为CString对象的实例。下面介绍几个成员函数:

Add 增加CString

RemoveAt 删除指定位置CString对象

RemoveAll 删除数组中所有CString对象

GetAt 得到指定位置的CString对象

SetAt 修改指定位置的CString对象

InsertAt 在某一位置插入CString对象

常用宏

RGB

TRACE

ASSERT

VERIFY

常用函数

CWindApp* AfxGetApp();

HINSTANCE AfxGetInstanceHandle( );

HINSTANCE AfxGetResourceHandle( );

int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );用于弹出一个消息框

和GUI有关的各种对象

在Windows中有各种GUI对象(不要和C++对象混淆),当你在进行绘图就需要利用这些对象。而各种对象都拥有各种属性,下面分别讲述各种GUI对象和拥有的属性。

字体对象CFont用于输出文字时选用不同风格和大小的字体。可选择的风格包括:是否为斜体,是否为粗体,字体名称,是否有下划线等。颜色和背景色不属于字体的属性。关于如何创建和使用字体在中会详细讲解。

刷子CBrush对象决定填充区域时所采用的颜色或模板。对于一个固定色的刷子来讲它的属性为颜色,是否采用网格和网格的类型如水平的,垂直的,交叉的等。你也可以利用8*8的位图来创建一个自定义模板的刷子,在使用这种刷子填充时系统会利用位图逐步填充区域。关于如何创建和使用刷子在中会详细讲解。

画笔CPen对象在画点和画线时有用。它的属性包括颜色,宽度,线的风格,如虚线,实线,点划线等。关于如何创建和使用画笔在中会详细讲解。

位图CBitmap对象可以包含一幅图像,可以保存在资源中。关于如何使用位图在中会详细讲解。

还有一种特殊的GUI对象是多边形,利用多边形可以很好的限制作图区域或是改变窗口外型。关于如何创建和使用多边形在中会详细讲解。

在Windows中使用GUI对象必须遵守一定的规则。首先需要创建一个合法的对象,不同的对象创建方法不同。然后需要将该GUI对象选入DC中,同时保存DC中原来的GUI对象。如果选入一个非法的对象将会引起异常。在使用完后应该恢复原来的对象,这一点特别重要,如果保存一个临时对象在DC中,而在临时对象被销毁后可能引起异常。有一点必须注意,每一个对象在重新创建前必须销毁,下面的代码演示了这一种安全的使用方法:

OnDraw(CDC* pDC)

{

CPen pen1,pen2;

(PS_SOLID,2,RGB(128,128,128));.

(CPen*)pDC->SelectObject(&pen2);.

();.

pDC->SelectObject(pOldPen);DKGRAY_BRUSH Dark gray brush.

GRAY_BRUSH Gray brush.

HOLLOW_BRUSH Hollow brush.

LTGRAY_BRUSH Light gray brush.

NULL_BRUSH Null brush.

WHITE_BRUSH White brush.

BLACK_PEN Black pen.

NULL_PEN Null pen.

WHITE_PEN White pen.

ANSI_FIXED_FONT ANSI fixed system font.

ANSI_VAR_FONT ANSI variable system font.

DEVICE_DEFAULT_FONT Device-dependent font.

OEM_FIXED_FONT OEM-dependent fixed font.

SYSTEM_FONT The system font. By default, Windows uses the system font to

draw menus, dialog-box controls, and other text. In Windows versions and later, the system font is proportional width; earlier versions of Windows use a fixed-width system font.

SYSTEM_FIXED_FONT The fixed-width system font used in Windows prior to

version . This object is available for compatibility with earlier versions of Windows.

DEFAULT_PALETTE Default color palette. This palette consists of the 20

static colors in the system palette.

这些对象留在DC中是安全的,所以你可以利用选入库存对象来作为恢复DC中GUI对象。

大家可能都注意到了绘图时都需要一个DC对象,DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows耀眼的一点设备无关性。如同你将对一幅画使用照相机或复印机将会产生不同的输出,而不需要对画进行任何调整。DC的使用会穿插在本章中进行介绍。

在窗口中输出文字

在这里我假定读者已经利用ApplicationWizard生成了一

个SDI界面的程序代码。接下来的你只需要在CView派生类的OnDraw成员函数中加入绘图

代码就可以了。在这里我需要解释一下OnDraw函数的作用,OnDraw函数会在窗口需要重绘

时自动被调用,传入的参数CDC* pDC对应的就是DC环境。使用OnDraw的优点就在于在你

使用打印功能的时候传入OnDraw的DC环境将会是打印机绘图环境,使用打印预览时传入的

是一个称为CPreviewDC的绘图环境,所以你只需要一份代码就可以完成窗口/打印预览/打

印机绘图三重功能。利用Windows的设备无关性和M$为打印预览所编写的上千行代码你可

以很容易的完成一个具有所见即所得的软件。

输出文字一般使用CDC::BOOL TextOut( int x, int y, const CString& str )和CDC::int DrawText( const CString& str, LPRECT lpRect, UINT nFormat )两个函数,对TextOut

来讲只能输出单行的文字,而DrawText可以指定在一个矩形中输出单行或多行文字,并且

可以规定对齐方式和使用何种风格。nFormat可以是多种以下标记的组合(利用位或操作)

以达到选择输出风格的目的。

DT_BOTTOM底部对齐Specifies bottom-justified text. This value must be

combined with DT_SINGLELINE.

DT_CALCRECT计算指定文字时所需要矩形尺寸Determines the width and height of the rectangle. If there are multiple lines of text, DrawText will use the

width of the rectangle pointed to by lpRect and extend the base of the

rectangle to bound the last line of text. If there is only one line of

text, DrawText will modify the right side of the rectangle so that it

bounds the last character in the line. In either case, DrawText returns

the height of the formatted text, but does not draw the text.

DT_CENTER中部对齐Centers text horizontally.

DT_END_ELLIPSIS or DT_PATH_ELLIPSIS Replaces part of the given string with ellipses, if necessary, so that the result fits in the specified rectangle.

The given string is not modified unless the DT_MODIFYSTRING flag is

specified.

You can specify DT_END_ELLIPSIS to replace characters at the end of the

string, or DT_PATH_ELLIPSIS to replace characters in the middle of the

string. If the string contains backslash (\) characters, DT_PATH_ELLIPSIS

preserves as much as possible of the text after the last backslash.

DT_EXPANDTABS Expands tab characters. The default number of characters per

tab is eight.

DT_EXTERNALLEADING Includes the font抯 external leading in the line height.

Normally, external leading is not included in the height of a line of text.

DT_LEFT左对齐Aligns text flush-left.

DT_MODIFYSTRING Modifies the given string to match the displayed text. This flag has no effect unless the DT_END_ELLIPSIS or DT_PATH_ELLIPSIS flag is specified.

Note Some uFormat flag combinations can cause the passed string to be

modified. Using DT_MODIFYSTRING with either DT_END_ELLIPSIS or

DT_PATH_ELLIPSIS may cause the string to be modified, causing an assertion in the CString override.

DT_NOCLIP Draws without clipping. DrawText is somewhat faster when

DT_NOCLIP is used.

DT_NOPREFIX禁止使用&前缀Turns off processing of prefix characters.

Normally, DrawText interprets the ampersand (&) mnemonic-prefix character as a directive to underscore the character that follows, and the two-

ampersand (&&) mnemonic-prefix characters as a directive to print a single ampersand. By specifying DT_NOPREFIX, this processing is turned off.

DT_PATH_ELLIPSIS

DT_RIGHT右对齐Aligns text flush-right.

DT_SINGLELINE单行输出Specifies single line only. Carriage returns and

linefeeds do not break the line.

DT_TABSTOP设置TAB字符所占宽度Sets tab stops. The high-order byte of

nFormat is the number of characters for each tab. The default number of

characters per tab is eight.

DT_TOP定部对齐Specifies top-justified text (single line only).

DT_VCENTER中部对齐Specifies vertically centered text (single line only).

DT_WORDBREAK每行只在单词间被折行Specifies word-breaking. Lines are

automatically broken between words if a word would extend past the edge of the rectangle specified by lpRect. A carriage return杔inefeed sequence

will also break the line.

在输出文字时如果希望改变文字的颜色,你可以利用CDC::SetTextColor( COLORREF crColor )进行设置,如果你希望改变背景色就利用CDC::SetBkColor( COLORREF

crColor ),很多时候你可能需要透明的背景色你可以利用CDC::SetBkMode( int nBkMode )设置,可接受的参数有

OPAQUE Background is filled with the current background color before the

text, hatched brush, or pen is drawn. This is the default background mode.

TRANSPARENT Background is not changed before drawing.

接下来讲讲如何创建字体,你可以创建的字体有两种:库存字体

CDC::CreateStockObject( int nIndex )和自定义字体。

在创建非库存字体时需要填充一个LOGFONT结构并使用CFont::CreateFontIndirect(const LOGFONT* lpLogFont ),或使用CFont::CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename )其中的参数和LOGFONT中的分量有一定的对应关系。下面分别讲解参数的意义:

nHeight 字体高度(逻辑单位)等于零为缺省高度,否则取绝对值并和可用的字体高度进行匹配。

nWidth 宽度(逻辑单位)如果为零则使用可用的横纵比进行匹配。

nEscapement 出口矢量与X轴间的角度

nOrientation 字体基线与X轴间的角度

nWeight 字体粗细,可取以下值

bItalic 是否为斜体

bUnderline 是否有下划线

cStrikeOut 是否带删除线

nCharSet 指定字符集合,可取以下值

nOutPrecision 输出精度

nClipPrecision 剪辑精度,可取以下值

CLIP_CHARACTER_PRE

CLIP_MASK

CIS

CLIP_STROKE_PRECIS

CLIP_DEFAULT_PRECI

S

CLIP_ENCAPSULATE CLIP_TT_ALWAYS

CLIP_LH_ANGLES

nQuality 输出质量,可取以下值

DEFAULT_QUALITY Appearance of the font does not matter.

DRAFT_QUALITY Appearance of the font is less important than when

PROOF_QUALITY is used. For GDI raster fonts, scaling is enabled. Bold,

italic, underline, and strikeout fonts are synthesized if necessary.

PROOF_QUALITY Character quality of the font is more important than exact

matching of the logical-font attributes. For GDI raster fonts, scaling is disabled and the font closest in size is chosen. Bold, italic, underline, and strikeout fonts are synthesized if necessary.

nPitchAndFamily 字体间的间距

lpszFacename 指定字体名称,为了得到系统所拥有的字体可以利用EmunFontFamiliesEx。此外可以利用CFontDialog来得到用户选择的字体的LOGFONT数据。

最后我讲一下文本坐标的计算,利用CDC::GetTextExtent( const CString& str )可以得到字符串的在输出时所占用的宽度和高度,这样就可以在手工输出多行文字时使用正确的行距。另外如果需要更精确的对字体高度和宽度进行计算就需要使用

CDC::GetTextMetrics( LPTEXTMETRIC lpMetrics ) 该函数将会填充TEXTMETRIC结构,该结构中的分量可以非常精确的描述字体的各种属性。

使用点,刷子,笔进行绘图

在Windows中画点的方法很简单,只需要调用COLORREF CDC::SetPixel( int x, int y, COLORREF crColor )就可以在指定点画上指定颜色,同时返回原来的颜色。COLORREF CDC::GetPixel( int x, int y)可以得到指定点的颜色。在Windows中应该少使用画点的函数,因为这样做的执行效率比较低。

刷子和画笔在Windows作图中是使用最多的GUI对象,本节在讲解刷子和画笔使用方法的同时也讲述一写基本作图函数。

在画点或画线时系统使用当前DC中的画笔,所以在创建画笔后必须将其选入DC才会在绘图时产生效果。画笔可以通过CPen对象来产生,通过调用CPen::CreatePen( int nPenStyle, int nWidth, COLORREF crColor )来创建。其中nPenStyle指名画笔的风格,可取如下值:

PS_SOLID实线Creates a solid pen.

PS_DASH虚线,宽度必须为一Creates a dashed pen. Valid only when the pen width is 1 or less, in device units.

PS_DOT点线,宽度必须为一Creates a dotted pen. Valid only when the pen

width is 1 or less, in device units.

PS_DASHDOT点划线,宽度必须为一Creates a pen with alternating dashes and dots. Valid only when the pen width is 1 or less, in device units.

PS_DASHDOTDOT双点划线,宽度必须为一Creates a pen with alternating dashes and double dots. Valid only when the pen width is 1 or less, in device

units.

PS_NULL空线,使用时什么也不会产生Creates a null pen.

PS_ENDCAP_ROUND结束处为圆形End caps are round.

PS_ENDCAP_SQUARE结束处为方形End caps are square.

nWidth和crColor为线的宽度和颜色。

刷子是在画封闭曲线时用来填充的颜色,例如当你画圆形或方形时系统会用当前的刷子对内部进行填充。刷子可利用CBrush对象产生。通过以下几种函数创建刷子:

BOOL CreateSolidBrush( COLORREF crColor ); 创建一种固定颜色的刷子

BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); 创建指定颜色和网格的刷子,nIndex可取以下值:

HS_BDIAGONAL Downward hatch (left to right) at 45 degrees

HS_CROSS Horizontal and vertical crosshatch

HS_DIAGCROSS Crosshatch at 45 degrees

HS_FDIAGONAL Upward hatch (left to right) at 45 degrees

HS_HORIZONTAL Horizontal hatch

HS_VERTICAL Vertical hatch

BOOL CreatePatternBrush( CBitmap* pBitmap ); 创建以8*8位图为模板的刷子

在选择了画笔和刷子后就可以利用Windows的作图函数进行作图了,基本的画线函数有以下几种

CDC::MoveTo( int x, int y ); 改变当前点的位置

CDC::LineTo( int x, int y ); 画一条由当前点到参数指定点的线

CDC::BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 画弧线

CDC::BOOL Polyline( LPPOINT lpPoints, int nCount ); 将多条线依次序连接

基本的作图函数有以下几种:

CDC::BOOL Rectangle( LPCRECT lpRect ); 矩形

CDC::RoundRect( LPCRECT lpRect, POINT point ); 圆角矩形

CDC::Draw3dRect( int x, int y, int cx, int cy, COLORREF clrTopLeft,

COLORREF clrBottomRight ); 3D边框

CDC::Chord( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 扇形

CDC::Ellipse( LPCRECT lpRect ); 椭圆形

CDC::Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );

CDC::Polygon( LPPOINT lpPoints, int nCount ); 多边形

对于矩形,圆形或类似的封闭曲线,系统会使用画笔绘制边缘,使用刷子填充内部。如果你不希望填充或是画出边缘,你可以选入空刷子(NULL_PEN)或是(NULL_BRUSH)空笔。

下面的代码创建一条两象素宽的实线并选入DC。并进行简单的作图:

{

...

CPen pen;

(PS_SOLID,2,RGB(128,128,128));

CPen* pOldPen=(CPen*)(&pen);

(NULL_BRUSH);.

}

在窗口中绘制设备相关位图,图标,设备无关位图

在Windows中可以将预先准备好的图像复制到显示区域中,这种内存拷贝执行起来是非常快的。在Windows中提供了两种使用图形拷贝的方法:通过设备相关位图(DDB)和设备无关位图(DIB)。

DDB可以用MFC中的CBitmap来表示,而DDB一般是存储在资源文件中,在加载时只需要通过资源ID号就可以将图形装入。BOOL CBitmap::LoadBitmap( UINT nIDResource )可以装入指定DDB,但是在绘制时必须借助另一个和当前绘图DC兼容的内存DC来进行。通过CDC::BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )绘制图形,同时指定光栅操作的类型。BitBlt可以将源DC中位图复制到目的DC中,其中前四个参数为目的区域的坐标,接下来是源DC指针,然后是源DC中的起始坐标,由于BitBlt为等比例复制,所以不需要再次指定长宽,(StretchBlt可以进行缩放)最后一个参数为光栅操作的类型,可取以下值:

BLACKNESS输出区域为黑色Turns all output black.

DSTINVERT反色输出区域Inverts the destination bitmap.

MERGECOPY在源和目的间使用AND操作Combines the pattern and the source

bitmap using the Boolean AND operator.

MERGEPAINT在反色后的目的和源间使用OR操作Combines the inverted source

bitmap with the destination bitmap using the Boolean OR operator.

NOTSRCCOPY将反色后的源拷贝到目的区Copies the inverted source bitmap to the destination.

PATINVERT源和目的间进行XOR操作Combines the destination bitmap with the pattern using the Boolean XOR operator.

SRCAND源和目的间进行AND操作Combines pixels of the destination and

source bitmaps using the Boolean AND operator.

SRCCOPY复制源到目的区Copies the source bitmap to the destination bitmap.

SRCINVERT源和目的间进行XOR操作Combines pixels of the destination and

source bitmaps using the Boolean XOR operator.

SRCPAINT源和目的间进行OR操作Combines pixels of the destination and

source bitmaps using the Boolean OR operator.

WHITENESS输出区域为白色Turns all output white.

下面用代码演示这种方法:

CYourView::OnDraw(CDC* pDC)

{

CDC memDC;Positive x is to the right; positive y is up.

MM_HIMETRIC每点对应毫米Each logical unit is converted to millimeter.

Positive x is to the right; positive y is up.

MM_LOENGLISH每点对应英寸Each logical unit is converted to inch.

Positive x is to the right; positive y is up.

MM_LOMETRIC每点对应毫米Each logical unit is converted to millimeter.

Positive x is to the right; positive y is up.

MM_TEXT象素对应Each logical unit is converted to 1 device pixel.

Positive x is to the right; positive y is down.

以上几种映射默认的原点在屏幕左上方。除MM_TEXT外都为X坐标向右增加,Y坐标向上增加,和自然坐标是一致的。所以在作图是要注意什么时候应该使用负坐标。而且以上的映射都是X-Y等比例的,即相同的长度在X,Y轴上显示的长度都是相同

的。

另外的一种映射方式为MM_ANISOTROPIC,这种方式可以规定不同的长宽比例。在设置这中映射方式后必须调用CSize CDC::SetWindowExt( SIZE size )和CSize

CDC::SetViewportExt( SIZE size )来设定长宽比例。系统会根据两次设定的长宽的比值来确定长宽比例。下面给出一段代码比较映射前后的长宽比例:

OnDraw(CDC* pDC)

{

CRect rcC1(200,0,400,200);

pDC->FillSolidRect(rcC1,RGB(0,0,255));

pDC->SetMapMode(MM_ANISOTROPIC );

CSize sizeO;

sizeO=pDC->SetWindowExt(5,5);

TRACE("winExt %d %d\n",,;

sizeO=pDC->SetViewportExt(5,10);

TRACE("ViewExt %d %d\n",,;

CRect rcC(0,0,200,200);

pDC->FillSolidRect(rcC,RGB(0,128,0));

}

上面代码在映射后画出的图形将是一个长方形。

Qt Creator 快速入门 选择题 霍亚飞版

1.以下关于QT的描述正确的是: a.是一个不跨平台的C++图形用户界面 b.由挪威TrollTech公司出品 c.只支持Unix、Linux d.QT API和开发工具对所支持的平台是不一致的2.以下关于QT的描述不正确的是: a.QT支持2D图形渲染 b.QT支持3D图形渲染 c.QT支持OpenGL d.QT不支持XML 3.下关于不正确的是: a.是面向嵌入式系统的Qt版本 b.是Qt的嵌入式窗口 c.基于Windows平台的开发工具 d.是完整的自包含C++ GUI的开发工具 4.内部对字符集的处理采用以下哪个标准: a.UNICODE b.ASCII c.GB2312 d.ISO 8859-1 5.以下关于Qt描述不正确的是 a.是基于面向对象的C++语言 b.提供了signal和slot的对象通信机制 c.有可查询和可设计属性 d.没有字符国际化 6.以下描述正确的是: a.标准的C++对象模型可有效的支持运行时参数 b.标准的C++对象模型的静态特性十分灵活 c.图形用户界面编程无需运行得高效 d.图形用户界面编程无需运行得高灵活性 7.以下不是QT增加的特性: a.有效的对象通信signal和slot b.可查询和可设计的对象 c.事件及事件过滤器 d.不使用指针 8.以下描述正确的是: a.元对象系统可以对信号使用模板 b.元对象系统可以对槽使用模板 c.Qt可在多个平台的应用程序中完全应用模板 d.Qt不能在多个平台的应用程序中完全应用模板9.以下关于moc叙述正确的是:

a.moc即Mult Object Compiler b.可产生能被任何标准C++编译访问的附加C++代码 c.moc必须手动调用 d.类声明中有无Q_OBJECT无所谓 10.以下关于信号和槽的描述正确的是: a.用于SOCKET网络通信 b.用于UDP网络通信 c.用于对象间通信 d.用于串口通信 11.以下关于信号/槽的叙述不正确的是: a.信号与槽通过connected函数任意相连 b.信号/槽机制在QObject类中实现 c.从QWidget类继承的所有类可以包含信号和槽 d.当对象状态变化时信号被发送,对象不关心是否有其他对象接收到该信 号 12.以下类声明中有几处错误? class M : public Qobject { public : M ( ) ; int value ( ) const { return va ; } public slot : void setValue ( int ) ; signals : void valueChanged ( int ) ; private: int va ; }; a. 5 b. 4 c. 3 d. 2 13.设有如下声明 void M : : setValue ( int v ) { if ( v != va ) { va = v ; emit valueChanged ( v ) ; } }

Saber 仿真实例

Saber 仿真 开关电源中变压器的Saber仿真辅助设计 (2) 一、Saber在变压器辅助设计中的优势 (2) 二、Saber 中的变压器 (3) 三、Saber中的磁性材料 (7) 四、辅助设计的一般方法和步骤 (9) 1、开环联合仿真 (9) 2、变压器仿真 (10) 3、再度联合仿真 (11) 五、设计举例一:反激变压器 (12) 五、设计举例一:反激变压器(续) (15) 五、设计举例一:反激变压器(续二) (19) Saber仿真实例共享 (25) 6KW移相全桥准谐振软开关电焊电源 (27) 问答 (27)

开关电源中变压器的Saber仿真辅助设计 经常在论坛上看到变压器设计求助,包括:计算公式,优化方法,变压器损耗,变压器饱和,多大的变压器合适啊? 其实,只要我们学会了用Saber这个软件,上述问题多半能够获得相当满意的解决。 一、Saber在变压器辅助设计中的优势 1、由于Saber相当适合仿真电源,因此对电源中的变压器营造的工作环境相当真实,变压器不是孤立地被防真,而是与整个电源主电路的联合运行防真。主要功率级指标是相当接近真实的,细节也可以被充分体现。

2、Saber的磁性材料是建立在物理模型基础之上的,能够比较真实的反映材料在复杂电气环境中的表现,从而可以使我们得到诸如气隙的精确开度、抗饱和安全余量、磁损这样一些用平常手段很难获得的宝贵设计参数。 3、作为一种高性能通用仿真软件,Saber并不只是针对个别电路才奏效,实际上,电力电子领域所有电路拓扑中的变压器、电感元件,我们都可以把他们置于真实电路的仿真环境中来求解。从而放弃大部分繁杂的计算工作量,极大地加快设计进程,并获得比手工计算更加合理的设计参数。 saber自带的磁性器件建模功能很强大的,可以随意调整磁化曲线。但一般来说,用mast模型库里自带的模型就足够了。 二、Saber 中的变压器 我们用得上的 Saber 中的变压器是这些:(实际上是我只会用这些

SaberScope的使用

Scope的使用(一) 2006-10-06 09:59 分类:Saber基础使用教程 在SaberGuide中完成仿真之后,通常情况下要查看仿真的结果(否则,仿真也就没有意义了).在Saber软件中,仿真结果通常有以下四种方式查看. a. 通过Results>Back Annotation... 菜单命令将仿真结果反标回原理图(只有DC 分析的结果能够进行反标); b. 通过Report Tool 以文字方式显示(注意:仅有部分分析可以通过报告方式查看结果,如DC); c. 通过 Probe 工具,在原理图上直接显示分析结果; d. 在Scope环境中观察分析结果; 几种方式中,以最后一种方法最为全面,在Scope中,不仅可以查看分析结果,更可以利用波形计算器(Waveform Calculator)和测量工具(Measurement Tool)对分析结果数据进行各种后处理,更加直观的将分析结果数据与设计指标联系在一起. 在Scope的全名叫做CosmosScope,它是一个功能非常强大的仿真结果数据后处理工具,它不仅可以观察Saber仿真器的仿真结果,还可以观察其他仿真器如HSPICE等工具的分析结果.Scope中用信号管理器(Signal Manager)来管理和显示各种分析结果文件的信号,其界面如下图所示:

在Scope中查看分析结果波形过程如下: a. 利用File>Open>PlotFiles… 命令将分析结果文件添加到信号管理器的列表中,也可在SaberGuide中进行仿真分析时,将分析设置对话框中的Plot After Analysis处指定为Yes-Open Only、Yes-Append Plots或Yes-Replace Plots 中的任意一个,则SaberGuide

Saber仿真软件入门教程解析

SABER讲义 第一章使用Saber Designer创建设计 本教材的第一部分介绍怎样用Saber Design创建一个包含负载电阻和电容的单级晶体管放大器。有以下任务: *怎样使用Part Gallery来查找和放置符号 *怎样使用Property Editor来修改属性值 *怎样为设计连线 *怎样查找一些常用模板 在运行此教材前,要确认已正确装载Saber Designer并且准备好在你的系统上运行(找系统管理员)。 注: 对于NT鼠标用户:两键鼠标上的左、右键应分别对应于本教材所述的左、右键鼠标功能。如果教材定义了中键鼠标功能,还介绍了完成该任务的替代方法。 一、创建教材目录 你需要创建两个目录来为你所建立的单级放大器电路编组数据。 1. 创建(如有必要的话)一个名为analogy_tutorial的目录,以创建教材实 例。 2. 进入analogy_tutorial目录。 3. 创建一个名为amp的目录。 4. 进入amp目录。 二、使用Saber Sketch创建设计 在这一部分中,你将使用Saber Sketch设计一个单级晶体管放大器。 1. 调用Saber Sketch(Sketch),将出现一个空白的原理图窗口。 2. 按以下方法为设计提供名称

3) 通过选择File>Save As …菜单项,存储目前空白的设计。此时将出 现一个Save Schematic As对话框,如图1所示。 图 1 2) 在File Name字段输入名称Single_amp。 3) 单击OK。 3. 检查Saber Sketch工作面 1)将光标置于某一图符上并保持在那里。会显示一个文字窗口来识别该 图符。在工作面底部的Help字段也可查看有关图符的信息 2)注意有一个名为Single_amp的Schematic窗口出现在工作面上。 三、放置部件 在教材的这一部分你将按图2所示在原理框图上放置符号。图中增加了如r1、r2等部件标号以便参照。

Saber电源仿真--基础篇(DOC)

Saber电源仿真——基础篇 电路仿真作为电路计算的必要补充和论证手段,在工程应用中起着越来越重要的作用。熟练地使用仿真工具,在设计的起始阶段就能够发现方案设计和参数计算的重大错误,在产品开发过程中,辅之以精确的建模和仿真,可以替代大量的实际调试工作,节约可观的人力和物力投入,极大的提高开发效率。 Saber仿真软件是一个功能非常强大的电路仿真软件,尤其适合应用在开关电源领域的时域和频域仿真。但由于国内的学术机构和公司不太重视仿真应用,所以相关的研究较少,没有形成系统化的文档体系,这给想学习仿真软件应用的工程师造成了许多的困扰,始终在门外徘徊而不得入。 本人从事4年多的开关电源研发工作,对仿真软件从一开始的茫然无知,到一个人的苦苦探索,几年下来也不过是了解皮毛而已,深感个人力量的渺小,希望以这篇文章为引子,能够激发大家的兴趣,积聚众人的智慧,使得我们能够对saber仿真软件有全新的认识和理解,能够在开发工作中更加熟练的使用它,提高我们的开发效率。 下面仅以简单的实例,介绍一下saber的基本应用,供初学者参考。 在saber安装完成之后,点击进入saber sketch,然后选择file—> new—>schematic,进入原理图绘制画面,如下图所示: 在进入原理图绘制界面之后,可以按照我们自己的需要来绘制电路原理图。首先,我们来绘制一个简单的三极管共发射极电路。

第一步,添加元器件,在空白处点击鼠标右键菜单get part—>part gallery 有两个选择器件的方法,上面的左图是search画面,可以在搜索框中键入关键字来检索,右图是borwse画面,可以在相关的文件目录下查找自己需要的器件。 通常情况下,选择search方式更为快捷,根据关键字可以快速定位到自己想要的器件。 如下图所示,输入双极型晶体管的缩写bjt,回车确定,列表中显示所有含有关键字bjt的器件,我们选择第三个选择项,这是一个理想的NPN型三极管,双击之后,在原理图中就添加了该器件。 依照此方法,我们先后输入voltage source查找电压源,并选择voltage source general purpose 添加到原理图。输入resistor,选择resistor[I]添加到原理图(添加2个)。输入GND,选择ground(saber node 0)添加到原理图,ground(saber node 0)是必须的,否则saber仿真将因为没有参考地而无法进行。 添加完器件之后,用鼠标左键拖动每个器件,合理布置位置,鼠标左键双击该器件,即可修改必要的参数,在本示例中,仅需要修改电压源的电压,电阻的阻值,其他的都不需修改。然后按下键盘的W键,光标变成了一个十字星,即表示可绘制wire(连线),将所有的器件连接起来。如下图所示:

Simtrix.simplis仿真_中文教程

Simetrix/Simplis仿真基础 近4年开发电源的过程,在使用仿真软件的过程中,对仿真渐渐有了个了解,仿真不能代替实验。仿真软件显示电路不能工作,而实际确能工作,仿真不收敛,而实际电路永远不会不收敛。但是仿真软件可以测试未知电路,可以验证自己的想法,甚至大大缩短开发过程,在你仿真的过程中,也可以更深入的理解开关电源的拓扑结构,控制模式等,假如你要实验一个电路,发现库里没有现成的IC,在自己搭建IC之后,你对整个IC具体是如何运作的必定了解的非常清楚。 如果你的模型足够精确,你可以得到和实验室非常接近的结果。如果你的电路是错误的,你也不用担心“炸机”的危险。 Simetrix/Simplis是我个人比较喜欢用的一款仿真软件,相对与功能强大的SABER, Simetrix/Simplis具有操作简单,容易上手,速度快等特点,用来实验开关电源的各个功能电路非常不错,精通之后,也能进行更复杂的仿真实验,比如开关电源的损耗分析,环路分析,大信号分析,IC设计等。 “只要你能想到的,你就可以用电路实现!” 虽然这几年一直在接触这款软件,但离“精通”还相差很远,但我想利用它简单易学的特点,让更多的人了解使用它,对实际开发有所帮助。并希望引出玉来,使大家共同提高。 我打算先说一下软件操作过程,再举几个简单的实例,供大家参考。由于水平有些,只能说这些基础的东西。 先说一下目录 1.基础操作:放置元件 2.导入PSPICE模型 3.瞬态分析,DC分析,AC分析,参数扫描 4.自建子电路,元件库 5.用SIMETRIX仿真开环BUCK。 6.用SIMPLIS 仿真BUCK电路:POP分析,AC分析。 7.两个简单的实例:桥式整流带恒功率负载—表达式的应用 填谷PFC PF值计算-波形的分析和处理 更深入一点的实例如 电流模式反激电路。 准谐振反激电路。 单极反激PFC电路。 LLC电路等。 做好后会和大家分享。

Qt开发入门教程02_QtE开发基础

QtE开发基础

?嵌入式GUI特点及种类 ?安装与建立QtE桌面运行环境?QtE Hello程序

?嵌入式GUI特点及种类 ?嵌入式系统对GUI的基本要求包括轻型、占用资源少、高性能、高可 靠性及可配置。 ?尽管实时嵌入式系统对GUI的需求越来越明显,但目前GUI的实现方法 各有不同,主要有以下几点: ?某些大型厂商有能力自己开发满足自身需要的GUI系统。 ?某些厂商没有将GUI作为一个软件层从应用程序中剥离,GUI的支 持逻辑由应用程序自己来负责。 ?采用某些比较成熟的GUI系统,比如MiniGUI,MicroWindows 或其他GUI系统。

?MiniGUI ?MiniGUI由原清华大学教师魏永明先生开发,是一种面向嵌入式系 统或实时系统的图形用户界面支持系统。它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系 统上。

?MicroWindows ?MicroWindows是一个著名的开放源码的嵌入式GUI软件。它提供了 现代图形窗口系统的一些特性。MicroWindows API接口支持类 Win32API,接口试图和Win32完全兼容,而且还实现了一些Win32用户模块功能。

?Qt/Embedded ?Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界 面的工具包。Qt是挪威Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE就是Qt的嵌入式版本。 ?使用QtE,开发者可以: ?用QtE开发的应用程序要移植到不同平台时,只需要重新编译代 码,而不需要对代码进行修改。 ?可以随意设置程序界面的外观。 ?可以方便地为程序连接数据库。 ?可以使程序本地化。 ?可以将程序与Java集成。

saber中文使用教程sabersimulink协同仿真

saber中文使用教程sabersimulink协同仿真Saber中文使用教程之软件仿真流程 今天来简单谈谈 Saber 软件的仿真流程问题。利用 Saber 软件进行仿真分析主要有两种途径,一种是基于原理图进行仿真分析,另一种是基于网表进行仿真分析。前一种方法的基本过程如下: a. 在 SaberSketch 中完成原理图录入工作; b. 然后使用 netlist 命令为原理图产生相应的网表; c. 在使用 simulate 命令将原理图所对应的网表文件加载到仿真器中,同时在 Sketch 中启动 SaberGuide 界面; d. 在 SaberGuide 界面下设置所需要的仿真分析环境,并启动仿真; e. 仿真 CosmosScope 工具对仿真结果进行分析处理。结束以后利用 在这种方法中,需要使用 SaberSketch 和 CosmosScope 两个工具,但从原理图开始,比较直观。所以,多数 Saber 的使用者都采用这种方法进行仿真分析。但它有一个不好的地方就是仿真分析设置和结果观察在两个工具中进行,在需要反复修改测试的情况下,需要在两个窗口间来回切换,比较麻烦。而另一种方法则正好能弥补它的不足。基于网表的分析基本过程如下: a. 启动 SaberGuide 环境,即平时大家所看到的 Saber Simulator 图标,并利用 load design 命令加载需要仿真的网表文件 ; b. 在 SaberGuide 界面下设置所需要的仿真分析环境,并启动仿真; c. 仿真结束以后直接在 SaberGuide 环境下观察和分析仿真结果。 这种方法要比前一种少很多步骤,并可以在单一环境下实现对目标系统的仿真分析,使用效率很高。但它由于使用网表为基础,很不直观,因此多用于电路系统结构已经稳定,只需要反复调试各种参数的情况;同时还需要使用者对 Saber 软

Qt Creator快速入门期末试卷及答案 霍亚飞版

Qt复习提纲 Qt基础 1、以下关于QT的描述正确的是____B_____ A是一个不跨平台的C++图形用户界面 B由挪威TrollTech公司出品 C只支持Unix、Linux D QT API和开发工具对所支持的平台是不一致的 2、以下关于Qt描述不正确的是_____D__ A是基于面向对象的C++语言 B提供了signal和slot的对象通信机制 C有可查询和可设计属性 D没有字符国际化 3、以下不是QT增加的特性_____D___ A有效的对象通信signal和slot B可查询和可设计的对象 C事件及事件过滤器 D不使用指针 4、以下关于信号和槽的描述正确的是__C_____ A用于SOCKET网络通信 B用于UDP网络通信 C用于对象间通信 D用于串口通信 5、以下关于信号/槽的叙述不正确的是__B?______ A信号与槽通过connected函数任意相连 B信号/槽机制在QObject类中实现 C从QWidget类继承的所有类可以包含信号和槽 D当对象状态变化时信号被发送,对象不关心是否有其他对象接收到该信号 6、关于布局功能的叙述,以下正确的是____D____ A在布局空间中布置子窗口部件 B设置子窗口部件间的空隙 C管理在布局空间中布置子窗口部件 D以上都对 7、布局管理器包括____D____ A QHBox B QVBox C QGrid D 以上全有 8、以下叙述正确的是__D_______ A QHBox允许子窗口部件按水平、垂直和网格排列 B QVBox允许子窗口部件按水平、垂直和网格排列 C QGrid允许子窗口部件按水平、垂直和网格排列 D 以上全不对 9、创建一个窗体对象后,要想显示该窗体,需要调用对象的___show_______方法,要想隐藏该窗体需要调用对象的____hide______方法。

Qt-4.6动画Animation快速入门三字决

Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序。不必像以前的版本一样,所有的控件都枯燥的呆在伟大光荣的QLayout里,也许它们可以唱个歌,跳个舞。 前面写过一篇文章Qt动画效果的幕后英雄:QTimeLine,介绍了怎么利用QTimeLine写一动画程序。今天又再重申前文里的一句话,所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情。当然做这件事情,最好用的就是状态机,没错Qt-4.6.0提供了QStateMachine类,不过今天我要讲的三字决要简单一些。 第一决:QPropertyAnimation QPropertyAnimation用于和QObject中的属性properties进行通信,比如QWidget的大小,坐标等。来看代码 QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry"); animation->setDuration(10000); animation->setStartValue(QRect(0, 0, 100, 30)); animation->setEndValue(QRect(250, 250, 100, 30)); animation->start(); 第一行创建的QPropertyAnimation对象关联了myWidget这个窗体的几何属性。后面的几句分别设置了这个动画的时长,起始坐标和结束坐标。剩下的事情就交改QProperAnimation 去做就行了。然后调用start()启动它。没错,五行代码就完成了一个完成了一个自动从一个坐标点移动到另一个坐标点的窗体。下面我给出一个可以运行的代码,是一只小鸟从下角移到中间的一个小动画,当然你得自己准备这个同名的图片:) #include #include #include #include int m ain(int argc,char *argv[]){ QApplication app(argc,argv); QWidget *w=new QWidget(); w->resize(300,400); QPixmap birdimg=QPixmap("twitter-bird.png").scaled(40,40); QLabel *bird_1=new QLabel(w); bird_1->setPixmap(birdimg); QPropertyAnimation *anim1=new QPropertyAnimation(bird_1, "pos"); anim1->set Duration(2000);

saber2011安装教程(纯文字版)

教程Saber2011安装教程.txt 我的文件saberr_B_2008_09_SP1_license 放在E:\saberr_B_2008_09_SP1_license 目录 1. 在 windows 界面下,双击 E:\saberr_B_2008_09_SP1_license\Keygen 中的 KeyGen.exe 生成 HOSTID 号码,注意保存好这一个号码。 2. 使用 E:\saberr_B_2008_09_SP1_license 目录下的 Synopsys.src 替换 E:\saberr_B_2008_09_SP1_license\EFA LicGen 0.4b\packs 目录下的Synopsys.src 3. 利用E:\saberr_B_2008_09_SP1_license\EFA LicGen 0.4b 目录下的LicGen.exe 生成 synopsys.dat :1 点击 Open 打开 E:\saberr_B_2008_09_SP1_license\EFA LicGen 0.4b\packs \Synopsys.lpd 2在Select Host ID 中选择 Ethemet 选项,会自动 出现计算机的host ID 号码.之后点击Generate 生成有一个文件,按Save 保存为synopsys.dat 。 需将刚才产生的 synopsys.dat 拷贝至Keygen 软件所在目录下 E:\saberr_B_2008_09_SP1_license\Keygen 4. 在虚拟dos 环境下(在windows 界面下,使用cmd 进入), 开始\运行 键入 cmd 进入DOS 环境 而 我 的 sssverify.exe 和 synopsys.dat都位于 E:\saberr_B_2008_09_SP1_license\Keygen 目录下,因此必须用CD..命令返回上级直到进入该目录(如图所示)或者直接 键入C :回车进入E 盘符 然后仍然使用CD..进入 E:\saberr_B_2008_09_SP1_license\Keygen 目录(如图所 示) 继续键入 E:\saberr_B_2008_09_SP1_license>cd Keygen 这样就到了sssverify.exe 和synopsys.dat 所在的目录 再键入E:\saberr_B_2008_09_SP1_license\ Keygen>sssverify synopsys.dat 运行后在DOS 屏幕最后得到相应SECRET DATA 信息。 5 再次运行KeyGen.exe 填入上面的SECRET DATA 信息 Generate 之后在本目录下会产生一个license.dat 文件。 6. 用记事本分别打开将license.dat 和synopsys.dat 。 1 license.dat 中的SSS Feature (如图所示内容) 拷贝到第3 步获得的synopsys.dat 中(如图所示) 保存! 7. 将synopsys.dat 复制到c:\\Synopsys 目录下(默认,或者你的安装目录下). 8 设置环境变量具体操作步骤:1.右键点击“我的电脑”,选“属性”---〉“高级”---〉 “ 环境变量” 修改(或新建)变量名变量名= LM_LICENSE_FILE 变量值= c:\Synopsys\synopsys.dat 该变量必须是全局变量 9. 启动saber,若系统装了防火墙,会提示Aim.exe 或aimsh.exe 访问网络,要 允许否则,启动不了。 第 1 页

Saber常见电路仿真实例介绍

Saber常见电路仿真实例 一稳压管电路仿真 (2) 二带输出钳位功能的运算放大器 (3) 三5V/2A的线性稳压源仿真 (4) 四方波发生器的仿真 (7) 五整流电路的仿真 (10) 六数字脉冲发生器电路的仿真 (11) 七分频移相电路的仿真 (16) 八梯形波发生器电路的仿真 (17) 九三角波发生器电路的仿真 (18) 十正弦波发生器电路的仿真 (20) 十一锁相环电路的仿真 (21)

一稳压管电路仿真 稳压管在电路设计当中经常会用到,通常在需要控制电路的最大输入、输出或者在需要提供精度不高的电压参考的时候都会使用。下面就介绍一个简单例子,仿真电路如下图所示: 在分析稳压管电路时,可以用TR分析,也可以用DT分析。从分析稳压电路特性的角度看,DT分析更为直观,它可以直接得到稳压电路输出与输入之间的关系。因此对上面的电路执行DT分析,扫描输入电压从9V到15V,步长为0.1V,分析结果如下图所示: 从图中可以看到,输入电压在9~15V变化,输出基本稳定在6V。需要注意的是,由于Saber仿真软件中的电源都是理想电源,其输出阻抗为零,因此不能直接将电源和稳压管相连接,如果直接连接,稳压管将无法发挥作用,因为理想电源能够输

出足以超出稳压管工作范围的电流。 二带输出钳位功能的运算放大器 运算放大器在电路设计中很常用,在Saber软件中提供了8个运放模板和大量的运放器件模型,因此利用Saber软件可以很方便的完成各种运方电路的仿真验证工作.如下图所示的由lm258构成的反向放大器电路,其放大倍数是5,稳压二极管1N5233用于钳位输出电压. 对该电路执行的DT分析,扫描输入电压从-2V->2V,步长为0.1V,仿真结果如下图所示:

Saber中文使用教程之软件仿真流程

Saber中文使用教程之软件仿真流程(1) 今天来简单谈谈 Saber 软件的仿真流程问题。利用 Saber 软件进行仿真分析主要有两种途径,一种是基于原理图进行仿真分析,另一种是基于网表进行仿真分析。前一种方法的基本过程如下: a. 在 SaberSketch 中完成原理图录入工作; b. 然后使用 netlist 命令为原理图产生相应的网表; c. 在使用 simulate 命令将原理图所对应的网表文件加载到仿真器中,同时在Sketch 中启动 SaberGuide 界面; d. 在 SaberGuide 界面下设置所需要的仿真分析环境,并启动仿真; e. 仿真结束以后利用 CosmosScope 工具对仿真结果进行分析处理。 在这种方法中,需要使用 SaberSketch 和 CosmosScope 两个工具,但从原理图开始,比较直观。所以,多数 Saber 的使用者都采用这种方法进行仿真分析。但它有一个不好的地方就是仿真分析设置和结果观察在两个工具中进行,在需要反复修改测试的情况下,需要在两个窗口间来回切换,比较麻烦。而另一种方法则正好能弥补它的不足。基于网表的分析基本过程如下: a. 启动 SaberGuide 环境,即平时大家所看到的 Saber Simulator 图标,并利用 load design 命令加载需要仿真的网表文件 ; b. 在 SaberGuide 界面下设置所需要的仿真分析环境,并启动仿真; c. 仿真结束以后直接在 SaberGuide 环境下观察和分析仿真结果。 这种方法要比前一种少很多步骤,并可以在单一环境下实现对目标系统的仿真分析,使用效率很高。但它由于使用网表为基础,很不直观,因此多用于电路系统结构已经稳定,只需要反复调试各种参数的情况;同时还需要使用者对 Saber 软件网表语法结构非常了解,以便在需要修改电路参数和结构的情况下,能够直接对网表文件进行编辑

saber中文使用教程SaberSimulink协同仿真

Saber中文使用教程之软件仿真流程 今天来简单谈谈 Saber 软件的仿真流程问题。利用 Saber 软件进行仿真分析主要有两种途径,一种是基于原理图进行仿真分析,另一种是基于网表进行仿真分析。前一种方法的基本过程如下: a. 在 SaberSketch 中完成原理图录入工作; b. 然后使用 netlist 命令为原理图产生相应的网表; c. 在使用 simulate 命令将原理图所对应的网表文件加载到仿真器中,同时在Sketch 中启动 SaberGuide 界面; d. 在 SaberGuide 界面下设置所需要的仿真分析环境,并启动仿真; e. 仿真结束以后利用 CosmosScope 工具对仿真结果进行分析处理。 在这种方法中,需要使用 SaberSketch 和 CosmosScope 两个工具,但从原理图开始,比较直观。所以,多数 Saber 的使用者都采用这种方法进行仿真分析。但它有一个不好的地方就是仿真分析设置和结果观察在两个工具中进行,在需要反复修改测试的情况下,需要在两个窗口间来回切换,比较麻烦。而另一种方法则正好能弥补它的不足。基于网表的分析基本过程如下: a. 启动 SaberGuide 环境,即平时大家所看到的 Saber Simulator 图标,并利用 load design 命令加载需要仿真的网表文件 ; b. 在 SaberGuide 界面下设置所需要的仿真分析环境,并启动仿真; c. 仿真结束以后直接在 SaberGuide 环境下观察和分析仿真结果。 这种方法要比前一种少很多步骤,并可以在单一环境下实现对目标系统的仿真分析,使用效率很高。但它由于使用网表为基础,很不直观,因此多用于电路系统结构已经稳定,只需要反复调试各种参数的情况;同时还需要使用者对 Saber 软件网表语法结构非常了解,以便在需要修改电路参数和结构的情况下,能够直接对网表文件进行编辑 saber中文使用教程Saber/Simulink协同仿真 接下来需要在Saber中定义输入输出接口以便进行协同仿真,具体过程如下

saber教程1

稳压管电路仿真 今天是俺在网博电源网上开始写Blog的第一天,一直没想好写点什么,正好论坛上有网友问我在Saber环境中如何仿真稳压管电路,就以稳压管电路仿真做为俺在网博上的第一篇Blog吧。稳压管在电路设计当中经常会用到,通常在需要控制电路的最大输入、输出或者在需要提供精度不高的电压参考的时候都会使用。下面就介绍一个简单例子,仿真电路如下图所示: 在分析稳压管电路时,可以用TR分析,也可以用DT分析。从分析稳压电路特性的角度看,DT分析更为直观,它可以直接得到稳压电路输出与输入之间的关系。因此对上面的电路执行DT分析,扫描输入电压从9V到15V,步长为0.1V,分析结果如下图所示: 从图中可以看到,输入电压在9~15V变化,输出基本稳定在6V。需要注意的是,由于Saber仿真软件中的电源都是理想电源,其输出阻抗为零,因此不能直接将电源和稳压管相连接,如果直接连接,稳压管将无法发挥作用,因为理想电源能够输

出足以超出稳压管工作范围的电流。 带输出钳位功能的运算放大器 运算放大器在电路设计中很常用,在Saber软件中提供了8个运放模板和大量的运放器件模型,因此利用Saber软件可以很方便的完成各种运方电路的仿真验证工作.如下图所示的由lm258构成的反向放大器电路, 其放大倍数是5,稳压二极管1N5233用于钳位输出电压. 对该电路执行的DT分析,扫描输入电压从-2V-> 2V , 步长为0.1V, 仿真结果如下图所示: 从仿真结果可以看出,当输入电压超出一定范围时, 输出电压被钳位. 输出上限时6.5V, 下限是-6.5V. 电路的放大倍数A=-5.

注意: 1. lm258n_3 是Saber中模型的名字, _3代表了该模型是基于第三级运算放大器模板建立的. 2. Saber软件中二极管器件级模型的名字头上都带字母d, 所以d1n5233a代表1n5233的模型. 5V/2A的线性稳压源仿真 下图所示的电路利用78L05+TIP33C完成了对78L05集成稳压器的扩展,实现5V/2A 的输出能力。 为了考察电路的负载能力,可以在Saber软件中使用DT分析,扫描变化负载电流,得出输出电压与输出电流的关系,也就可以得到该电路的负载调整率了。DT分析参数设置为: Independent source = i_dc.iload sweep from 0.01 to 2 by 0.1.。 分析结果如下图所示:

saber仿真模拟前序

第二章仿真模拟前序 在SaberSketch中画完电路图后,就可以对设计进行仿真了 指定顶级电路图 要用Saber对设计进行模拟,必须让SaberSketch知道设计中哪个电路图是最上层的,因为Saber在打开时只能有一个网表,所以在SaberSketch中只能指定一个顶级电路图。如果电路图不包含层次设计,SaberSketch会默认打开的电路图为顶级电路图,可以略过此步,否则,要用SaberSketch中Design>Use>Design_name来指定顶级电路图。 当指定顶级电路图后,SaberSketch在用户界面右下角显示设计名称,同时创建一个包含其它模拟信息和层次管理的文件(Design.ai_dsn)。如果电路图是层次的,SaberSketch会增加一个Design Tool(选择Tools>Design Tool或者点击工具栏中的Design Tool图标),如图2-1所示,可以用Design Tool来打开、保存、关闭层次图中的电路图,也可以在各个层次间浏览。虽然只指定一个顶级图,但仍可以打开、浏览层次图以外的其它电路图。

图2-1 Design Tool 网表 由于Saber不能直接读取电路图,必须通过网表器产生的网表来进行模拟。产生的网表器是一个ASCII文件,包含元件名、连接点和所有非默认的元件参数。要进行模拟时,只要网表中的连接不同于设计中的,SaberSketch会自动对设计进行网表化。例如:如果增加或修改一条连线,下次分析时,SaberSketch会自动对设计进行网表化并重新调入到Saber中。如果改变连线的颜色,再去进行分析,Saber将使用原有的网表,因为设计的连接没有改变。如果改变属性,SaberSketch会自动发送一条Alter命令到Saber中,改变内存网表,因而减少了重新网表化的需要。 设定网表器和Saber实施选项 只有第一次运行分析时,Saber才会创建网表并运行,在SaberGuide中进行分析之前,应验证网表器和Saber实施选项。 1、在SaberGuide中验证网表器(Edit>Saber/Netlister Setting),网表器用下面的选

Qt Creator 快速入门实验讲义(带目录)

《Qt Creator快速入门》第2版 实验讲义 2014年6月

目录 实验1 Qt开发环境的搭建......................................................- 2 - 目的与要求..................................................................................................................- 2 - 实验准备......................................................................................................................- 2 - 实验内容......................................................................................................................- 2 - 实验2 编译和发布Qt程序...................................................- 16 - 目的与要求................................................................................................................- 16 - 实验准备....................................................................................................................- 16 - 实验内容....................................................................................................................- 16 - 实验3 使用Qt资源文件.......................................................- 25 - 目的与要求................................................................................................................- 25 - 实验准备....................................................................................................................- 25 - 实验内容....................................................................................................................- 25 - 实验4 创建登陆对话框..........................................................- 30 - 目的与要求................................................................................................................- 30 - 实验准备....................................................................................................................- 30 - 实验内容....................................................................................................................- 30 - 实验5 定时器和随机数..........................................................- 35 - 目的与要求................................................................................................................- 35 - 实验准备....................................................................................................................- 35 - 实验内容....................................................................................................................- 35 - 实验6 编译MySQL数据库驱动............................................- 38 - 目的与要求................................................................................................................- 38 - 实验准备....................................................................................................................- 38 - 实验内容....................................................................................................................- 38 - 实验7 数据库基本操作............................................................- 49 - 目的与要求................................................................................................................- 49 - 实验准备....................................................................................................................- 49 - 实验内容....................................................................................................................- 49 - 实验8 Qt数据库应用编程(综合设计)................................- 55 - 目的与要求................................................................................................................- 55 - 实验准备....................................................................................................................- 55 - 实验内容....................................................................................................................- 55 -

相关文档
最新文档