vc第5章 文字与字体
VC++_ CFontCreateFont类
VC CFont::CreateFontC++ 2010-08-06 15:19:38 阅读212 评论0 字号:大中小订阅BOOL 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 //字体名称);例子:font.CreateFont(12, // nHeight0, // nWidth0, // nEscapement0, // nOrientationFW_NORMAL, // nWeightFALSE, // bItalicFALSE, // bUnderline0, // cStrikeOutANSI_CHARSET, // nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily"Arial"); // lpszFacename一般只修改几项:1.nHeight(字体高度,即字体大小)改为,数字。
C++程序设计基础课后答案 第五章
5.1 阅读下列程序,写出执行结果1.#include < iostream.h >struct data{ int n ;float score ;} ;void main(){ data a[3] = { 1001,87,1002,72,1003,90 } , *p = a ; cout << (p++)->n << endl ;cout << (p++)->n << endl ;cout << p->n++ << endl ;cout << (*p).n++ << endl ;}2.#include < iostream.h >struct employee{ char name[ 20 ] ;char sex ;} ;void fun( employee *p ){ if( (*p).sex == 'm' )cout << (*p).name << endl ;}void main(){ employee emp[5] = { "Liming", 'm', "Wangxiaoping", 'f', "Luwei", 'm' } ; int i ;for( i=0; i<3; i++ )fun( emp+i ) ;}3. #include < iostream.h >struct node{ char * s ;node * q ;} ;void main(){ node a[ ] = { { "Mary", a+1 }, { "Jack", a+2 }, { "Jim", a } } ;node *p = a ;cout << p->s << endl ;cout << p->q->s << endl ;cout << p->q->q->s << endl ;cout << p->q->q->q->s << endl ;}4.#include < iostream.h >class A{ public :int f1();int f2();void setx( int m ) { x = m ; cout << x << endl; } void sety( int n ) { y = n ; cout << y << endl; } int getx() { return x ; }int gety() { return y ; }private :int x, y ;};int A::f1() { return x + y ; }int A::f2() { return x - y ; }void main(){ A a ;a.setx( 10 ) ; a.sety( 5 ) ;cout << a.getx() << '\t' << a.gety() << endl ;cout << a.f1() << '\t' << a.f2() << endl ;}5. #include < iostream.h >class T{ public :T( int x, int y ){ a = x ; b = y ;cout << "调用构造函数1." << endl ;cout << a << '\t' << b << endl ;}T( T &d ){ cout << "调用构造函数2." << endl ;cout << d.a << '\t' << d.b << endl ;}~T() { cout << "调用析构函数."<<endl; }int add( int x, int y = 10 ) { return x + y ; } private :int a, b ;};void main(){ T d1( 4, 8 ) ;T d2( d1 ) ;cout << d2.add( 10 ) << endl ;}6. #include < iostream.h >class T{ public:T(int x){ a=x; b+=x;};static void display(T c){ cout<<"a="<<c.a<<'\t'<<"b="<<c.b<<endl; }private:int a;static int b;} ;int T::b=5;void main(){ T A(3),B(5);T::display(A);T::display(B);}7. #include < iostream.h >#include < math.h >class point{ public :point( float x, float y ){ a = x; b = y;? cout << "点( " << a << ", " << b << " )" ; }friend double d( point &A , point &B ){ return sqrt((A.a-B.a) * (A.a-B.a) + (A.b-B.b) * (A.b-B.b)) ; } private:double a, b ;};void main(){ point p1( 2, 3 ) ;cout << " 到 " ;point p2( 4, 5 ) ;cout << "的距离是:" << d( p1,p2 ) << endl ;}8. #include < iostream.h >class A{ public :A() { a = 5 ; }void printa() { cout << "A:a = " << a << endl ; }private :int a ;friend class B ;} ;class B{ public:void display1( A t ){ t.a ++ ; cout << "display1:a = " << t.a << endl ; } ; void display2( A t ){ t.a -- ; cout << "display2:a = " << t.a << endl ; } ; };void main(){ A obj1 ;B obj2 ;obj1.printa() ;obj2.display1( obj1 ) ;obj2.display2( obj1 ) ;obj1.printa() ;}5.2 思考题1.结构和类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材上的一个例程试一试,想一想做什么修改能使程序正确运行?2.分析以下说明结构的语句struct node{ int data;node error; //错误node * ok; //正确};error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?3.有说明class A{ int a;double x;public:funMember();};A a1, a2, a3 ;编译器为对象a1,a2,a3开辟了什么内存空间?它们有各自的funMember函数的副本吗?C++通过什么机制调用类的成员函数?4.C++提供了默认版本的构造函数,为什么还需要用户自定义构造函数?编写一个验证程序,说明自定义构造函数的必要性。
VC++GDI+编程的字体和文本绘制
VC++GDI+编程的字体和⽂本绘制字体是⽂字显⽰和打印的外观形式,它包括了⽂字的字样、风格和尺⼨等多⽅⾯的属性。
适当地选⽤不同的字体,可以⼤⼤地丰富⽂字的外在表现⼒。
例如,把⽂字中某些重要的字句⽤较粗的字体显⽰,能够体现出突出、强调的意图。
当然,⽂本输出时还可使⽤其格式化属性和显⽰质量来优化⽂本显⽰的效果。
字体属性和字体创建字体属性和字体创建字体的属性有很多,这⾥主要介绍字样、风格和尺⼨三个主要属性。
字样是字符书写和显⽰时表现出的特定模式,例如,对于汉字,通常有宋体、楷体、仿宋、⿊体、⾪书以及幼圆等多种字样。
GDI+是通过FontFamily类来定义字样的,例如下⾯的代码:FontFamily fontFamily(L"幼圆"); // 定义"幼圆"字样字体风格主要表现为字体的粗细和是否倾斜等特点。
GDI+为⽤户提供了⼀些预定义的字体风格:FontStyleRegular(正常)、FontStyleBold(加粗)、FontStyleItalic(斜体)、FontStyleBoldItalic (粗斜体)、FontStyleUnderline(下划线)和FontStyleStrikeout(删除线)。
字体尺⼨是⽤来指定字符所占区域的⼤⼩,通常⽤字符⾼度来描述。
字体尺⼨可以取毫⽶或英⼨作为单位,但为了直观起见,也常常采⽤⼀种称为点的单位,⼀点约折合为1/72英⼨。
对于汉字,还常⽤号数来表⽰字体尺⼨,初号字最⼤,以下依次为⼩初、⼀号、⼩⼀、⼆号、⼩⼆??,如此类推,字体尺⼨起来越⼩。
GDI+为⽤户提供了UnitDisplay(1/75英⼨)、UnitPixel(像素)、UnitPoint(点)、UnitInch(英⼨)、UnitDocument(1/300英⼨)、UnitMillimeter(毫⽶)等字体尺⼨单位。
使⽤GDI+中的Font类,可以直接通过构造函数创建⼀个字体对象,例如下列代码:Font font(&fontFamily, 12, FontStyleRegular, UnitPoint);构造函数的第⼀个参数是⽤来指定FontFamily类对象指针,第⼆参数是⽤来指定字体的尺⼨,它的实际⼤⼩取决于第四个参数所指定的尺⼨单位。
VC++中的字体设置方法详解
VC++中的字体设置⽅法详解VC++中static text字体改变CWnd::GetFont()和SetFont(CFont*, BOOL);1)CFont* pFont = m_static.GetFont();2)LOGFONT LogFont;pFont->GetLogFont(&LogFont);3)对LogFont直接操纵修改⾥⾯的字体选项//如LogFont.lfUnderline = 1;设置下划线LogFont.lfHeight=30; //字体⼤⼩设置strcpy(LogFont.lfFaceName, "楷体_GB2312"); //字体设置4)pFont->Detach();第四步的⽬的是将pFont⾥装有的HFONT解除关联,否则pFont⽆法调⽤紧接的Create函数。
5)pFont->CreateFontIndirect(&LogFont);m_static.SetFont(pFont);6)pFont->Detach();必须再⼀次解除在pFont⾥装载的HFONT,原因是第5步已经将HFONT赋给了m_static。
pFont的任务已完成,不应该持有HFONT资源,它也不能去销毁HFONT,因为m_static在使⽤这个HFONT,所以必须是Detach()来解除关联。
在OnCtlColor函数中如下代码:复制代码代码如下:HBRUSH CDlg_SignIn::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif(nCtlColor == CTLCOLOR_STATIC){if(pWnd->GetDlgCtrlID()== IDC_REGARD){pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(251, 247, 200));//设置⽂本背景⾊pDC->SetBkMode(TRANSPARENT);//设置背景透明}}// TODO: Return a different brush if the default is not desiredreturn hbr;}CTLCOLOR_BTN 按钮控件CTLCOLOR_DLG 对话框CTLCOLOR_EDIT 编辑框CTLCOLOR_LISTBOX 列表控件CTLCOLOR_MSGBOX 消息控件CTLCOLOR_SCROLLBAR 滚动条控件CTLCOLOR_STATIC 静态控件VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态⽂本的字体。
VC++ 课件 第05章 对话框和常用控件
5.2控件的创建和使用方法
5.2.1控件的创建方法 控件的创建方式有以下两种: 一种是在对话框模板中用编辑器指定控件,也就是说,将控件的父窗口指 定为对话框,这样做的好处是明显的,因为当应用程序启动该对话框时, Windows系统就会为对话框创建控件;而当对话框消失时,控件也随之清 除。 另一种方式是将控件看作是任一窗口的子窗口,并通过调用相应的Create 函数来创建。 [例Ex_SDIHello] 在上例Ex_SDIHello的基础上用子窗口方式创建控件。 (1)打开CMyDlg的头文件MyDlg.h,添加一个按钮类CButton指针变量: class CMyDlg : public CDialog { // Construction public: CMyDlg(CWnd* pParent = NULL); // standard constructor CButton *m_btnWnd; … }
5.1对话框的使用
在程序中使用对话框 (1)利用项目工作区的ClassView标签项,将Ex_SDIHello.cpp源文件打开; (2)在Ex_SDIHello.cpp源文件的前面加上包含类CMyDlg的头文件: #include "MyDlg.h" (3)在InitInstance函数体中的“return TRUE;”语句之前添加下列代码: CMyDlg dlg; dlg.DoModal(); DoModal是模态对话框最常用的函数,它负责对话框的显示和终止。 (4)编译并运行。在程序的一开始就出现用户自己设计的对话框,单击 [Button1]按钮将弹出“欢迎进入对话框的设计!”的消息对话框来。
5.1对话框的使用
5.1.2使用对话框编辑器
打开对话框编辑器
将项目工作区窗口切换到ResourceView页面,双击Dialog目录下任意一个对 话框ID。或者,选择“Insert”“Resource”菜单命令(或按快捷键Ctrl+R), 选择Dialog项,单击New。
VC++第5章图形绘制
VC++第5章图形绘制第5章图形绘制在Visual C++6.0中,掌握图形程序设计⽅法是⾮常重要的。
因为图形在任何⼀个可视化⼯程项⽬中都是不可缺少的。
CDC(设备环境)类封装了图形绘制所需要的各种操作。
本章我们将通过实际例⼦和较详细的阐述,来了解和掌握如何使⽤设备环境类(CDC)及图形设备接⼝(GDI)进⾏图形绘制。
5.1 设备环境与设备环境类(CDC)5.1.1 设备环境设备环境也称设备上下⽂(Device Context,简称DC),是计算机物理设备的代表,也是图形设备接⼝的主要组成部分。
由于Windows是⼀个与设备⽆关的操作系统,即Windows不允许直接访问硬件,如果⽤户想将⽂本和图形绘制到显⽰器或其它设备中去,必须通过“设备环境”这个抽象层与硬件进⾏通信,设备上下⽂对象的作⽤就是实现Windows的设备⽆关性,任何向屏幕上进⾏输出的功能都要间接地通过它来完成。
设备上下⽂是Windows的⼀种数据结构,它包含了有关如显⽰器或打印机等设备的绘图属性信息。
所有绘画都是通过设备上下⽂对象来实现的,该对象封装了Windows 的画线、图形和⽂本的API函数。
设备上下⽂允许在Windows下独⽴于设备的绘画。
设备上下⽂不仅能够被⽤来在屏幕上绘画,它也可以将绘画输出到打印机和图元⽂件中。
5.1.2 设备环境类设备环境类CDC直接继承于CObject类,该类定义了⼀类设备对象。
CDC对象提供了⾮常多的成员函数,与设备环境的显⽰器、打印机等⼀起⼯作。
例如,如果要在显⽰器等设备上绘制图形,我们可以⽤MFC提供的设备环境类CDC类,因为CDC类中包含了绘图所需要的所有成员函数。
同时。
MFC还提供了以下⼏个CDC的派⽣类:1、CPaintDC类此类⽐较特殊,它的构造函数和析构函数都是针对OnPaint进⾏的。
⽤户⼀旦获得相关的CDC指针,就可以将它当做任何设备环境(包括屏幕、打印机)指针来使⽤,CPaintDC类的构造函数会⾃动调⽤BeginPaint,⽽它的析构函数则会⾃动调⽤EndPaint。
C语言程序设计(第五版)-谭浩强
下标运算符:[]
其它 :( ) -
注意:各种运算符混合使用,其优先级与结
<
合方法是难点,可先预习。
C语言程序设计
第一章 C语言概述
C语言数据结构丰富
整型
数值类型
基本类型
浮点型 字符类型char
C
数 据
构造类型
类
型 指针类型
数组 结构体struct 共用体union 枚举类型enum
空类型void
短整型short 整型int 长整型long 单精度型float
{
………
for(j=1;…j<1…0;j…++.)
{ ……………
…su…m+…=i…*j…; .
…} …………….
} ……………….. } printf(“%d\n”,sum); }
<>
C语言程序设计
第一章 C语言概述
C语言结构特点
❖函数与主函数
程序由一个或多个函数组成 必须有且只能有一个主函数main(),可以放在程序中任一
/* This function calc“ul十ate进s制th整e 数su类m型of”x and y */
int add(int x,int y)
{ int z;
z=x+y;
return(z);
运行结果:
}
sum=34
C语言程序设计
第一章 C语言概述
例1.3 从键盘输入两个整数,输出其中较大的数
含义 函数体、分程序、复合语句 条件语句 定义i为整形变量 定义a为一维数组
定义f为返回整形值函数; p为指向整形变量的指针变量; 赋值语句,使i+2赋给I i自增值1,i加1赋给I
CFont
VC CFont 用法vc学习2009-10-11 14:52:09 阅读1198 评论0 字号:大中小订阅LOGFONT结构的变量仔细查一下CFont my_CFont;if( !my_CFont.CreatePointFont( 300,_T("Helvetica"),NULL ) )return;( GetDlgItem (IDC_EDIT1) )->SetFont( &my_CFont );二、常用法CRect rcRectangle(x,x,x,x);CFont font;CFont *pFont;font.CreateFont(14,0,0,0,FW_MEDIUM,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_P RECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"Arial");pFont=pDC->SelectObject(&font);pDC->TextOut(70,70,"祝你圣诞快乐!!!");pDC->DrawText("祝你圣诞快乐!!",rcRectangle,DT_CENTER)font.DeleteObject();三、关于CFont和DrawText的用法中国人自古就有自右至左、从上到下书写汉字的习惯。
而当我们在自己所编写的应用程序中使用输出函数输出的总是自左至右的横排文字。
有没有可能在我们的应用程序中实现竖写汉字的效果呢?笔者偶然发现了一种利用VC实现竖写汉字效果的方法,现在就把它介绍给大家。
Windows系统内置了许多名称以“@”开头的字集,这些字集有一个共同的特点,即其所包含的文字全都是平躺着的(字头朝左,字底朝右)。
如果我们能将这些字逆时针旋转270度后再显示出来,就可以达到实现竖写汉字效果的目的了。
vc设置字体颜色:请特别注意VC字符集设置
vc设置字体颜色:请特别注意VC字符集设置疯狂代码 / ĵ:http://CDevelopment/Article14240.htmlVC真是个非常笨非常不友好工具还是这样说VC(MFC)和现在流行.net framework java比起来就想石器时代跟工业时代相比样!接触MFC也有几年了为了它有过加班、有过熬夜、甚至通宵代码没有十万行也应该有几万行了但是MFC就是这么牛它牛得不但令新手忘而却步而且常常令有经验软件Software工程师也栽跟斗最近由于个小小环境设置设置问题花了很多时间这跟用惯了VC6突然转到VC2005有关但关键还是VC实在太笨了它让我在周内连续两中招次!第次中招是这样很简单:我不知道2005默认工程默认设置是采用“Unicode集”(Unicode Character Set)以前用VC6工程时候默认是“多集”(Multi-Byte Character Set)以前也没有用过2005啊我直认为.net是用来在framework上面编程在MFC上编程没有必要打开庞大.net2005把机器弄得像牛拉车样我声明了个CString按计划给它赋值就像下面:CString s;s.Format(“count = %d”,count);按经验这肯定不会有但是不好意思编译这是我环境采用Unicode集而我给CStringFormat是“多集”(Multi-Byte)所以编译不通过要知道在这种设置下使用MessageBox(“ddd”);编译是不会通过系统是MessageBoxW即Unicode宽集那个还好我根据编译器提示把s.Format(“count = %d”,count);改成s.Format(_T(“count = %d”,count);就搞定了_T代表个宏宏意思就是把串转成宽表示同样MessageBox(“ddd”);可以为MessageBox(_T(“ddd”));但是还有个问题就是所有窗体显示东西都是宽例如a在内存里就是a\0两个字节前面个字节a后面是\0当从窗体取下数据(例如用户输入)要跟其他平台交互时例如网络传输到远端机器如果那边使用不是Unicode集就会出问题为了使界面和后台传输致只好使用把宽转换成多集表示:CString strWideChar;strWideChar.Format(_T(“这是宽字节哦”));char buf[20];mem(buf,0,20);WideCharToMultiByte( //转换Unicode到AnsiCP_ACP,WC_COMPOSITECHECK | WC_DEFAULTCHAR,strWideChar,strWideChar.GetLength,(char *)buf, //转换到缓冲区中20, //最多个字节0,);同样你接收到串想要在界面正常显示还必须把它转换成宽字节表示(烦吧?): char chBytes[8];memcpy(chBytes,”aaaaaaa\0”,8);WCHAR wch[9];n = MultiByteToWideChar( //转换Unicode到AnsiCP_ACP,0,chBytes,8,wch, //转换到缓冲区中8 //最多个字节);wch[n] = '\0';这样每次从界面取数据和把数据显示到界面上都要先做处理但是也可以把编译环境设置成“多集”(Multi-Byte Character Set)就可以避免这样转换来转换去(可惜我发现时候代码已经差不多写完了)就是在”Project->Configuration Properties->General->Character Set选择“Use Unicode Character Set”就是使用Uncode集选择” Use Multi-Byte Character Set”就是多字节集第 2次中招god花了我好长时间才找到问题:我在CodeProject上找了个很厚道老外写个继承了CDialog窗体类CResizableDialog源码这个类作用是使MFC窗体放大缩小时窗体上Control控件可以定位(Auchor)不要小看这个小小每天都要用到功能用MFC实现真很麻烦很佩服那个老外写了那么多代码(当然跟他们条件有关资本主义国家工人随便找个工作就可以衣食无忧病了政府照顾我们做“挨踢”活得像民工样当然没有那个闲情去写那么好代码免费给别人使用这是题外话)我拿了那个现成工程直接在我工程里引用他工程Everything works perfect直到我把项目发布成Release双击运行后没有任何反应Very weird!后来我用MessageBox打印消息发现运行到DoModal里面就没有出来直接退出了!使用trycatch都得不到!我窗体是继承老外写窗体类来原先继承CDialog是好好问题肯定在他工程里面可是他给举例没有任何问题啊MFC出错时候是很要命它不会给你任何提示它就是不干了!我又拿个前测试让它从CResizableDialog继承也没有任何问题简直头大了、无语了不知道哪里出现了问题Release又不能像Debug那样调试打了堆MessageBox后还是不知道问题出现在哪里凭着经验可以知道中可能出现了内存越界访问什么致命才会导致“声不吭”地退出但是究竟哪里出了问题呢?就在束手无策时候我发现CResizableDialog成员EnableSaveRestore会引发链接:“未定义外部符号”不引用它不会出错测试引用它没有任何通常这个造成是引用在.h文件里声明了但是在.cpp里面没有定义或者.cpp文件里定义和.h上参数对不上但是此时不可能是这个测试没有啊直觉告诉我这是解决“Release后直接退出关键”说不定这个问题解决了Release问题也解决了MFC真是很强大它强大得不但“像迷宫样里面有怪兽进去不小心就永远出不来”而且它让你当遇到怪兽时候总是给你点点星光只要你不放弃奇迹就会出现你就会练成绝世神功这跟武侠小说是相通主人公每次到了生死关头就会出现奇迹成为天下无敌高手看看我如何找到解决思路方法Very tricky:既然EnableSaveRestore出现了不该出现那么就从这个开始找这个是这样:.h文件声明void EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly = FALSE);.cpp文件定义void CResizableDialog::EnableSaveRestore(LPCTSTR pszSection, BOOL bRectOnly/* = FALSE */){m_sSection = pszSection;m_bEnableSaveRestore = TRUE;m_bRectOnly = bRectOnly;// restore immediatelyLoadWindowRect(pszSection, bRectOnly);}上面代码没有任何既然没有就要用使用以下思路方法来找:1.重新为CResizableDialog写个它没有参数它发现没有看来参数有问题2.既然没有参数没有就把出问题参数去掉吧竟然也没有!那问题就肯定是出在参数上3.去掉其中个参数测试发现是LPCTSTR pszSection问题而不是BOOL bRectOnly问题4.既然这样那就换种表示吧把LPCTSTR pszSection换成WCHAR* pszSection运行它竟然不出错了!翻开MFC宏定义就会发现其实LPCTSTR和WCHAR*是样MFC真是freak!5.但是这个功能还是不正常断点进入那个里面发现传进去串只有个了这种情况就是宽当成短时第 2个字节\0当成了串截止了也就是说这个里采用是短(多集Multi Byte)处理6.我工程采用是宽集(Unicode Char)检查设置原来那个老外是用VC6编默认是使用多集(Multi Byte)VC真是笨啊两个Project在个Solution里面完全区别设置竟然没有任何提示简直把我弄死了!7.把引用工程也改成使用Unicode集并且把EnableSaveRestore WCHAR* pszSection恢复原样搞定!果然不出我所料Release也没有问题了!我用以前那个测试来使刚好以前把它设成Multi Byte所以也没有Damn!仅仅是个设置啊如果VC出错提示稍微好至少集不匹配不要说成“未定义外部符号”也好用点啊难怪现在用VC人越来越少了!注:通常说VC不是指使用.net frameworkVC那个很简单内存都不用管通常是指非托管VC 2009-2-125:17:41疯狂代码 /。
c语言程序设计基础第五版知识点总结
c语言程序设计基础第五版知识点总结C语言是一门广泛应用于科学计算、操作系统、嵌入式系统等领域的编程语言。
对于初学者来说,进修C语言是打下编程基础的重要一步。
本文将总结《C语言程序设计基础第五版》中的主要知识点,援助读者快速精通C语言的基本观点和编程技巧。
第一章:C程序设计概述本章主要介绍C语言的进步历史、特点以及编程环境的配置。
读者可以了解到C语言的起源以及C语言程序的基本框架。
第二章:C语言基本数据类型(数据类型、变量、常量)C语言中有多种数据类型,包括整型、字符型、实型等。
本章详尽介绍了各种数据类型的定义和使用方法,并提供了一些实例演示。
第三章:C语言运算符和表达式运算符是C语言中常用的操作符号,用于完成各种数学和逻辑运算。
本章详尽介绍了各种运算符的使用方法和优先级规则,并提供了一些例子进行实践。
第四章:C语言控制结构控制结构是编程语言中用于控制程序流程的语句和机制。
本章介绍了C语言中的次序结构、选择结构和循环结构,并提供了一些实例演示,援助读者理解和应用这些结构。
第五章:C语言数组与字符串数组是C语言中常用的一种数据结构,可以存储多个相同类型的数据。
本章详尽介绍了数组的定义和使用方法,并提供了一些例子援助读者熟识数组的操作。
字符串是由字符组成的一种特殊的数组,本章也介绍了字符串的相关观点和操作方法。
第六章:C语言函数与参数传递函数是C语言中模块化编程的重要组成部分,函数可以将一些操作封装起来,提高代码的可读性和重用性。
本章详尽介绍了函数的定义、调用和传递参数的方法,并提供了一些实例援助读者精通函数的使用技巧。
第七章:C语言指针指针是C语言中分外重要的观点,通过指针可以实现对内存的直接操作。
本章介绍了指针的定义和使用方法,包括指针的基本操作、指针与数组和函数的干系等。
第八章:C语言结构体、联合与列举结构体、联合和列举是C语言中用于组织和管理复杂数据的机制。
本章详尽介绍了结构体、联合和列举的定义和使用方法,并提供了一些实例援助读者理解和应用这些机制。
C_primer_plus(第五版)(完整)
C_primer_plus(第五版)(完整)@第一章概览编程练习1.您刚刚被MacroMuscle有限公司(Software for Hard Bodies)聘用。
该公司要进入欧洲市场,需要一个将英寸转换为厘米(1英寸=2.54 cm)的程序。
他们希望建立的该程序可提示用户输入英寸值。
您的工作是定义程序目标并设计该程序(编程过程的第1步和第2步)。
1.将英寸值转化为厘米值2.显示“输入英寸值”->得到该值->转换为厘米值->存储->告知用户已结束第二章 C语言概述编程练习1.编写一个程序,调用printf()函数在一行上输出您的名和姓,再调用一次printf()函数在两个单独的行上输出您的名和姓,然后调用一对printf()函数在一行上输出您的名和姓。
输出应如下所示(当然里面要换成您的姓名):Anton BrucknerAntonBrucknerAnton Bruckner第一个输出语句第二个输出语句仍然是第二个输出语句第三个和第四个输出语句#include<stdio.h>int main(void){printf("He Jin\n");printf("He\n");printf("Jin\n");printf("He Jin\n");return(0);}2.编写一个程序输出您的姓名及地址。
#include<stdio.h>int main(void) //此处不可加;{printf("Name:He Jin\n");printf("Address:CAUC\n");return(0);}3.编写一个程序,把您的年龄转换成天数并显示二者的值。
不用考虑平年( fractional year)和闰年(leapyear)的问题。
#include<stdio.h>int main(void){int age=22;printf("Age:%d\n",age);printf("Day:%d\n",age*356);return(0);}4.编写一个能够产生下面输出的程序:For he's a jolly good fellow!For he's a jolly good fellow!For he's a jolly good fellow!Which nobody can deny!程序中除了main()函数之外,要使用两个用户定义的函数:一个用于把上面的夸奖消息输出一次:另一个用于把最后一行输出一次。
C++程序设计第五章
第五章特殊函数和成员5.1对象成员的初始化如果初始初始化列表某项的参数函数表为空,则列表相应的项可以省略对象成员构造函数的调用顺序取决于这些对象成员在类中的说明顺序。
析构函数的调用顺序与构造函数正好相反。
5.2静态成员简单成员函数是指声明函数不含const、volatile、static关键字的函数。
如果类的数据成员或成员函数使用关键字static进行修饰,这样的成员称为静态成员或静态成员函数,统称为静态成员。
静态数据成员能说明一次,如果在类中仅对静态数据成员进行声明,则必须在文件作用域的某个地方进行定义。
在进行初始化时,必须进行成员名限定。
除静态成员的初始化之外,静态成员遵循类的其他成员函数所遵循的访问限制,由于数据隐蔽的需要,静态数据成员通常被说明为私有的,通过成员限定访问静态成员,比使用对象名访问静态成员要好,因为静态成员是类的成员而不是对象的成员。
类中的任何成员都可以访问静态成员。
因为静态成员函数没有this指针,所以静态成员函数只能通过对象名(或指向对象的指针)访问该对象的非静态成员。
(1)可以不指向某个具体的对象,只与类名连用。
(2)在没有建立对象之前,静态成员就已经存在。
(3)静态成员为类的成员,不是对象的成员。
(4)静态成员为该类的所有对象共享,它们被存储于一个公用内存中。
(5)没有this指针,所有除非显式地吧指针传给它们,否则不能存取类的数据成员。
(6)静态成员函数不能被说明为虚函数。
(7)静态成员函数不能直接访问非静态函数。
关键字static声明的类的对象,但要注意它的构造函数与析构函数的调用特点。
5.3友员函数友员函数可以存取私有成员、公有成员和保护成员。
1.类本身的友元函数2.将成员函数做有元3.将一个类说明为另一个类的友元友元关系是不传递的即当说明类A是类B的友元,类B又是类C的友元时,5.4 const对象可以再使用const关键字定义数据成员和成员函数和修饰一个对象。
Visual C++基础入门教程-第5课:文本输出
通过前面的学习,我们已经能够成功地创建一个基本窗口,并进行了简单的修饰,这一课我们进入窗口内部学习;一个窗口由两部分,内部用户区和非用户区,用户区指用户可以操作的区域,非用户区是指标题栏和四个边框,这些区域产生的消息一般由系统处理;下面我们来学习怎样在用户区显示一段文字:1、文字的笔画是由许多小点组成的,点越小字也就越精确细腻,因此显示器的分辨率越高看着就越清楚,一般是800×600 或者1024×768,大家可以查看一下自己的显示器;2、用户程序准备好显示内容,向系统提出设备申请,然后用TextOut函数输出到用户区指定的位置,同时还可以设定字体、颜色和效果;3、启动VC,新建一个名为“Text”的Win32 A pplication工程,新建一个相同名称的头文件和一个cpp源程序文件,在头文件中输入函数的申明,在源程序中输入基本框架代码Win M ain和Init A pplication,InitInstance函数,这些和前面都是一样的;4、加入消息处理代码,我们要求文字和窗口一同显示出来,代码如下(绿色双斜杠部分是注释),有的行太长会自动折到了下一行开头:LRESULT C A LLB A CK M ainWndProc(HWND hWnd, UINT message, WP A R AM wParam, LP A R AM lParam){HDC hdc; //需要设备P A INTSTRUCT ps; //使用设备的结构对象switch(message) //需要自己处理的消息{case W M_P A INT: //接收WM_PAINT消息,本消息自动产生hdc=BeginPaint(hWnd,&ps); //申请设备SetTextColor(hdc, RGB(240,230,0));//浅黄色//设置前景色,RGB分别代表红色、绿色、蓝色(255,255,255)的叠加;SetBk M ode(hdc,TR A NSP A RENT);//背景模式为透明背景;TextOut(hdc,20,30,"清晨,来到美丽的校园……",lstrlen("清晨,来到美丽的校园……"));//设备,列位置,行位置,内容,测出字数EndPaint(hWnd,&ps); //结束设备使用break;//本条消息处理完毕,case W M_DESTROY://退出应用程序,PostQuit M essage(0);//向系统发送一条WM_QUIT消息,break;default: //让系统帮着处理的消息return (DefWindowProc(hWnd,message,wParam,lParam));}return(0);//函数返回值}保存一下文件,单击编译条上的“构建”按钮,如果出现错误就仔细检查一下,然后单击“执行”按钮,看看又前进一步的程序窗口;本节学习了在用户区输出文字的代码设计,如果你成功地完成了练习,请继续学习下一课内容;。
如何利用VC自动生成
如何利用VC自动生成随着科技的不断发展,越来越多的智能化工具开始进入我们的生活。
其中,VC(Virtual Copywriter)自动生成文章的工具越来越受到欢迎。
VC可以根据用户输入的关键词和需求,自动地生成具有逻辑清晰、结构合理、语言流畅的文章,大大节省了撰写文章的时间和精力。
首先,我们需要根据具体的关键词和需求确定文章的主题。
例如,如果我们要写一篇关于“如何提高免疫力”的文章,那么关键词就可以是“免疫力、健康、锻炼、饮食”等。
然后,我们需要选择一个适合的模板和格式,以便更好地呈现文章的内容。
接下来,我们就可以利用VC自动生成文章了。
对于每个关键词,VC 都会自动地生成一个独立的段落。
例如,对于“免疫力”这个关键词,VC可能会生成以下段落:“免疫力是指身体对疾病的抵抗力,可以通过锻炼和饮食等方式来提高。
”在这个段落中,不仅包含了关键词“免疫力”,还介绍了提高免疫力的方法和意义。
然后,我们可以将这些段落按照需要的顺序进行排版。
例如,我们可以将关于“免疫力”的段落放在文章开头,将关于“健康”的段落放在中间,将关于“锻炼”和“饮食”的段落放在结尾。
通过这种方式,我们可以轻松地完成一篇结构合理、逻辑清晰的文章。
总之,VC自动生成文章的工具可以帮助我们快速生成文章,提高工作效率。
我们也需要注意一些问题。
例如,VC生成的段落可能不够自然,有些表达可能不太符合中文的习惯。
因此,我们需要在VC生成的基础上,进行一些手动修改和调整,以确保文章的质量。
引言:随着现代技术的不断发展,越来越多的计算机软件开始采用自动化文档生成技术,以减轻人工编写文档的负担,提高工作效率。
其中,VC++是一种广泛使用的编程语言和开发工具,具有高度的可操作性和灵活性。
本文将探讨如何使用VC++自动生成Word文档,并介绍相关的关键技术和处理方法。
背景知识:VC++是一种由Microsoft开发的面向对象的编程语言和集成开发环境(IDE)。
c语言程序设计第五版
c语言程序设计第五版C语言程序设计第五版C语言,作为计算机编程语言的元老之一,自1972年由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室开发以来,一直以其高效、灵活和强大的特性在软件开发领域占据着重要地位。
随着计算机科学的发展,C语言也在不断地更新和改进,以适应新的编程需求和硬件环境。
《C语言程序设计》这本书,作为学习C语言的经典教材,已经发行到了第五版,它不仅包含了C语言的基础知识,还涵盖了许多高级特性和最佳实践。
第一部分:C语言基础1. C语言概述C语言是一种过程式编程语言,以其简洁的语法和对底层硬件的控制能力而闻名。
C语言的设计哲学是提供足够的功能来实现复杂的程序,同时保持语言的简洁性。
2. 开发环境搭建在开始编写C程序之前,需要设置开发环境。
这通常包括安装编译器、编辑器和调试工具。
第五版教材会介绍如何在不同操作系统上搭建C语言的开发环境。
3. 基本语法C语言的基本语法包括变量声明、数据类型、运算符、控制结构(如if语句、循环)等。
这些是编写任何C程序的基础。
4. 函数函数是C语言中实现代码复用的重要机制。
教材会介绍如何定义函数、传递参数以及返回值的使用。
第二部分:数据结构与算法5. 数组数组是存储固定大小的同类型元素的集合。
教材会详细介绍一维数组和多维数组的使用,以及它们在程序设计中的应用。
6. 指针指针是C语言中一个强大的特性,它允许程序员直接操作内存地址。
第五版会深入讲解指针的基本概念、指针与数组的关系,以及指针在函数中的应用。
7. 字符串字符串是字符数组的一种特殊形式。
教材会介绍字符串的声明、操作和常用字符串处理函数。
8. 结构体和联合体结构体和联合体是C语言中用于创建复杂数据类型的工具。
第五版会讲解如何定义和使用这些数据结构。
第三部分:高级特性9. 预处理器预处理器是C语言编译过程中的一个工具,用于处理源代码中的宏定义、文件包含和条件编译等。
10. 文件操作C语言提供了丰富的文件操作API,允许程序员读写文件。
《C#从入门到精通(第5版)》读书笔记PPT模板思维导图下载
书名页
内容简介
如何使用本书开发资源库
前言
“开发资源库”目录
第1篇 基础知识
0 1
第1章 初 识C#及 其开发环 境
0 2
第2章 开 始C#之 旅
0 3
第3章 变 量与常量
0 4
第4章 表 达式与运 算符
0 6
第6章 流 程控制语 句
0 5
第5章 字 符与字符 串
第8章 属性和方 法
第7章 数组和集 合
最新版读书笔记,下载可以直接修改
《C#从入门到精通(第5版)》
PPT书籍导读
读书笔记模板
最
新
版
本
01 书名页
目录
02 内容简介
03
如何使用本书开发资 源库
04 前 言
05 “开发资源库”目录
06 第1篇 基础知识
目录
07 第2篇 核心技术
08 第3篇 高级应用
09 第4篇 项目实战
010 附 录
第9章 结构和类
第2篇 核心技术
第10章 Windows窗体
第11章 Windows应用程
序常用控件
第12章 Windows底甩稍 庐髟纨推价
第13章 数据访问 技术
第15章 LINQ数 据访问技术
第14章 DataGridView
数据控...
第16章 程序调 试与异常处理
第3篇 高级应用
0 1
第17章 面向对象 技术高级 应用
0 2
第18章 迭代器和 分部类
0 3
第19章 泛型
0 4
第20章 文件及数 据流技术
0 5
第21章 GDI+图 形图像技 术
C语言程序设计教程(第5版)王秀鸾全册PPT课件
ANSI 标准
2. C语言的特点
(1)语言简洁、紧凑,使用方便、灵活。 (2)支持结构化程序设计 。 (3)运算符丰富。 (4)数据类型丰富。 (5)较强的编译预处理功能。 (6)C语言的可移植性好。 (7)C语言本身既有一般高级语言的优点,又有低级 (汇编)语言的特点 。 (8)语法限制不太严格,程序设计自由度大。
printf(“sum is %d \n”,sum ); /* 输出sum的值 */
}
程序的运行结果为:
sum is 8
【例1.5】求两个整数中的较小者
#include “stdio.h”
main( )
/* 主函数 */
{ int x,y,m;
/* 定义变量 */
int fun(int a,int b);
1.1 程序设计的基本概念
1.1.2程序设计的一般过程
① 分析、理解问题 ② 解决方案(大致的思路),建立数学模型 ③ 求解步骤和流程(算法)(文字、符号等的描述) ④ 使用程序设计语言编写源程序 ⑤ 运行调试程序 ⑥ 整理输出结果,写出相关文档
分析 问题
确定处 理方案
确定操 作步骤
编写 程序
图1.1 程序设计的一般过程
1.2.2 初识C语言程序
(1) C程序的构成 【例1.4】求两个整数m与n的和。
#include “stdio.h”
main( )
/* 主函数 */
{int m,n,sum;/* 定义变量m,n, sum*/
m=5; n=3; /* 给变量m,n赋值 */
sum=m+n; /* 求m+n的值,并赋给变量sum */
上机运 行程序
整理 结果
vc中控件字体的设置
vc中控件字体的设置和所有初学者一样,刚开始接触新的东西,总想把画面做的漂亮些,可是在vc中很难做到,比如对话框中按钮等控件的字体设置,就颇费了我一番功夫。
一。
做成一个函数,改变字体大小,方法如下:1。
在最开头声明一个全局的字体指针CFont *my_font=new CFont();//注意初始化,不能为空2。
在需要改变字体的地方调用函数:set_font(60,my_font,"隶书"); //字体大小、指针、名称GetDlgItem(IDC_anniu)->SetFont(my_font);//改变字体3。
对与不同的字体,你需要设置不同的字体指针就可以了。
4。
注意在退出时要删除字体,否则多次调用出现问题BOOL CMyDlg::DestroyWindow(){if (my_font) my_font->DeleteObject();return CDialog::DestroyWindow();}5。
以下是函设置字体函数的详细内容:void set_font(int height,CFont *font,char *name){// font=new CFont();//不在此,要在外部初始化,否则找不到指针LOGFONT lf;lf.lfHeight=20; lf.lfWidth= 0;lf.lfEscapement=0; lf.lfOrientation= 0;lf.lfWeight= 760; lf.lfItalic= 0;lf.lfUnderline =0; lf.lfStrikeOut =0;lf.lfCharSet =134; lf.lfOutPrecision =3;lf.lfClipPrecision =2; lf.lfQuality= 1;lf.lfPitchAndFamily =2; lstrcpy(lf.lfFaceName, "宋体");lf.lfOutPrecision =OUT_TT_ONLY_PRECIS;//OUT_TT_PRECIS;lf.lfHeight= height; //字体大小lstrcpy(lf.lfFaceName, name);//名称if (font!=NULL){font->DeleteObject();font->CreateFontIndirect(&lf);}}#define say(ch) AfxMessageBox(ch)//自己使用的提示函数#define bt(ch) SetWindowText(ch)//自己使用的提示函数二。
可视化程序设计VC++教学大纲
《可视化程序设计VC++》教学大纲课程名称:可视化程序设计VC++ 课程代码:08120130课程类型: 专业核心课学分:4 总学时:80 理论学时:48 上机学时:32先修课程:《面向对象程序设计C++》适用专业:计算机科学与技术本科专业一、课程性质、目的和任务《可视化程序设计VC++》是计算机科学与技术本科专业的核心课程。
通过该课程的学习,培养和提高掌握C++程序设计以及应用Visual C++解决实际问题的能力。
二、教学基本要求1、知识、能力、素质的基本要求通过本课程的学习,学生要掌握C++语言的基本语法,了解面向对象的概念、MFC基本应用程序的建立、掌握对话框、常用控件、菜单、窗口、图形、文本、位图、数据库编程。
能正确运用面向对象的思维方法分析问题和解决问题,要具有较好的职业道德,具有创新意识。
2、教学模式基本要求本课程采用理论与实践相结合的教学方式。
理论课需要在多媒体教室进行,教师主要讲授VC++的基础知识和基本理论,学生在实验课上进行编程练习。
三、教学内容及要求第一章基本C++语言了解C++预处理,理解C++程序结构,C++基本语法,C++函数,C++指针和引用。
第二章 C++面向对象程序设计了解输入、输出流库,理解类和对象,继承、多态、虚函数、运算符第三章 MFC基本应用程序的建立了解Windows编程基础,编制一个MFC应用程序,掌握使用MFC AppWizard、类向导第四章对话框和常用控件掌握对话框的创建和使用,常用控件的创建和使用第五章菜单、工具栏和状态栏理解工具栏、状态栏,掌握菜单第六章框架窗口、文档和视图了解文档序列化、文档视图结构,理解视图及视图类、框架窗口、文档窗口第七章图形、文本和位图理解位图、图标与光标,掌握字体与文字处理、简单图形绘制第八章数据库编程了解MFC ODBC数据库概述、ADO 数据库编程、数据库相关的Active 控件,理解MFC ODBC 应用编程四、实验(上机)内容实验一认识Visual C++中文版开发环境、C++程序设计实验二 MFC基本应用程序的建立实验三对话框的建立实验四按钮控件的建立和应用实验五编辑框、列表框、组合框的建立实验六进展条、滚动条和滑动条的建立实验七菜单的建立实验八工具栏和状态栏的建立实验九框架窗口的建立实验十文档和视图的建立实验十一图形实验实验十二文本实验实验十三位图实验实验十四 ODBC数据库编程实验十五 ADO数据库编程实验十六综合案例:学生信息系统五、学时分配六、考核方法本课程突出过程考核和编程能力考核。
C++实验五文本的输出与字体的设置
{
CFontShowTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i;
CRect rect;
GetClientRect(&rect);
CBrush*pOldBrush=(CBrush *)pDC->SelectStockObject(WHITE_BRUSH);
dc.SelectObject(&fontsel);
dc.SetTextColor(colorsel);
dc.TextOut(80,190,"字体对话框设置的字体");
dc.SelectObject(oldbrush);
dc.SelectObject(old);
CDialog::OnPaint();
(6)在MFC ClassWizard对话框中单击Edit Code按钮,为新增的两个消息处理函数添加代码如下:
void CCommonDialogTestDlg::OnColordlg()
{
COLORREF color;
CString str;
CColorDialog dlg(0,CC_FULLOPEN);
if(dlg.DoModal())
{
color=dlg.GetColor();
colorsel=dlg.GetColor();
str.Format("%x",color);
MessageBox("已取得颜色,值为"+str,"选择颜色");
this->Invalidate();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 获取字符串长度
int lstrlen(LPCTSTR lpString);
数字转字符串
• char itoa (long value, char *str, int radix );
– value ——要转换的值(整型) – str ——结果字符串 – radix ——转换进制数(2–36) – itoa(50,buf,10);
5.3 文本操作实例——GDIFontBasic
switch(iMessage) //处理消息 {case WM_CREATE: //处理窗口创建消息 hDC=GetDC(hWnd) ; //获取当前设备表句柄 GetTextMetrics(hDC,&tm); //获取字体信息 nXChar=tm.tmAveCharWidth; //获取字符宽度 nYChar=tm.tmHeight+tm.tmExternalLeading; ReleaseDC(hWnd,hDC); //释放当前设备句柄 return 0; case WM_PAINT: //处理重画消息 hDC=BeginPaint(hWnd,&PtStr); //开始绘画 for(x=0;x<LnCount;x=x+1) //输出文本
cy=tm.tmHeight+tm.tmExternalLeading;
5.2 文本的输出过程
• 文本输出
– 常用的文本输出函数TextOut,原型如下:
BOOL TextOut ( HDC hdc, int X, int Y, LPCTSTR lpstring, int nCount );
//字符串的起始坐标 //被显示的字符串 //字符串的字节数
– 获取字体信息 – 格式化文本
• 确定后续文本坐标 • 确定换行时文本坐标
– 调用函数输出文本
5.2 文本的输出过程
• 获取字体信息
– 输出文本之前,必须获取字体的信息,如字符 高度等,以确定输出格式和下一行字符的位置。 – 调用GetTextMetrics()获取字体的信息 GetTextMetrics (hdc,&tm); – tm为TEXTMETRICS结构体,存放字体的信息
2013-6-7 7
字符集—— character set character encoding character map
• ANSI_CHARSET • BALTIC_CHARSET • CHINESEBIG5_CHARSET • DEFAULT_CHARSET • EASTEUROPE_CHARSET • GB2312_CHARSET • GREEK_CHARSET • • • • • • • • HANGUL_CHARSET MAC_CHARSET OEM_CHARSET RUSSIAN_CHARSET SHIFTJIS_CHARSET SYMBOL_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET
• int sprintf(char *buffer, const char *format [,argument]);
– #include stdio.h – sprintf(buf,"(%d,%d)\n",x,y);
5.3 文本操作实例——GDIFontBasic
• 在用户窗口上输出几行字符串,每当窗口 接收到WM_PAINT消息后,显示的文本都 被刷新
TextOut(hDC,nXChar,nYChar*(1+x),textbuf[x], lstrlen(textbuf[x]));
EndPaint(hWnd,&PtStr); return 0; case WM_DESTROY: //结束应用程序 PostQuitMessage(0); return 0; default: //其他消息处理程序 return(DefWindowProc(hWnd,iMessage,wParam,lParam)) ; } }
6
5.1 设置文本的设备环境
• 创建自定义字体——CreateFont()函数
HFont=CreateFont ( int nHeight, //字体高度,0采用系统缺省值,使用逻辑单位 int nWidth, //字体宽度,取0则取最佳高宽比值 int nEscapement, //每行文字相对于页底的角度,单位为0.1度 int nOrientation, //每个文字相对于页底的角度,单位为0.1度 int nWeight, //字体粗细度,取值范围为0~1000 DWORD Dwltalic, //若字体倾斜,则取非零 DWORD dwUnderline, //若带下划线,则取非零 DWORD dwStrikeout, //若带删除线,则取非零 DWORD dwCharset, //字体所属字符集 DWORD dwOutputPrecision,//输出精度,缺省值OUT_DEFAULT_PRECIS DWORD dwClipPrecision, //剪裁精度,缺省值CLIP_DEFAULT_PRECIS DWORD dwQuality, //输出质量,缺省值DEFAULT_QUALITY DWORD dwPitchAndFamily, //字体的斜度及字体的系列,缺省值DEFAUL_PITCH DWORD lpszFacename //字体名 );
Visual C++
第五章 文本与字体
1
内容提要
• 设置文本的设备环境 • 文本的输出过程 • 文本操作实例
2
5.1 设置文本的设备环境
• 有关基本概念
– Windows的显示任何内容
• 在一定意义上,都可看成借助GDI绘制的图形实体
– 文本输出
• 使用预定义好的特殊图形元素——字体集
பைடு நூலகம்
– 字体
• 描述文本文字的大小、类型和外形 • Windows 系统提供七种基本字体,并允许用户创建 新的字体。
5.3 文本操作实例——GDIFontColor
• 本程序在窗口中分五行分别显示五行文本 • 源程序:GDIFontColor
2013-6-7
20
5.3 文本操作实例——GDIFontColor
LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam) { HDC hdc; HFONT hF_black,hF_big; //定义两种字体句柄 PAINTSTRUCT ps; TEXTMETRIC tm; //定义一个TEXTMETRIC结构,用以记录字体信息 char lpsz_1[]=“这是一行红色的、字体为SYSTEM_FONT的文字,
5.2 文本的输出过程
• 格式化文本
– 确定后续文本坐标
typedef struct tagSIZE { LONG cx; LONG cy; } SIZE;
• GetTextExtentPoint32 获取当前的字符串的宽度,并存于SIZE。
BooL GetTextExtentPoint32 ( HDC hdc, LPCTSTR lpszString,//指定的字符串 int nLength, //字符串中的字符数 LPSIZE lpSize //返回加字符串宽度及高度的SIZE数据结构的地
• 源程序: GDIFontBasic
2013-6-7
17
5.3 文本操作实例——GDIFontBasic
//消息处理函数
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{ static long nXChar, nYChar; HDC hDC; //定义指向设备上下文的句柄 short x; TEXTMETRIC tm; short LnCount=6; PAINTSTRUCT PtStr; //定义向包含绘图信息的结构变量 static char *textbuf[]= { "This is the First line", "This is the second line", 输出的 "This is the third line", "This is the fourth line", 文本内容 "This is the fifth line", "This is the sixth line" };
址
)
例如:X轴起始坐标为cx0,后续文本起始坐标cx1为:
cx1=cx0+size.cx;
5.2 文本的输出过程
• 格式化文本
– 确定换行时文本坐标 在tm指向的TEXTMETRICS结构中,存有: 字符高度 tmHeight 行间隔 tmExternalLeading 。 换行时,新一行文本的y坐标的增量值为:
Windows提供的七种基本字体
– – – – – – – ANSI_FIXED ANSI_VAR DEFAULT_GUI OEM_FIXED DEVICE_DEFAULT SYSTEM_FIXED SYSTEM ANSI标准的固定宽度的字体 ANSI标准的可变宽度的字体 当前GUI的缺省字体 由标准原设备制造商(OEM)提供 当前图形设备的字体 Windows的标准固定宽度的字体 Windows提供的可变宽度的字体
常作为缺省字体 Win用它作为系统界面字体
5.1 设置文本的设备环境
• 文本操作要点:
– 获得文本句柄 – 设置字体、字符大小、字符颜色等属性; – 将这些属性选入设备环境
5.1 设置文本的设备环境
• 选择系统字体的步骤
– (1) 定义字体句柄变量: HFONT hF; //hF为字体的句柄 – (2) 调函数GetStockObject获得系统字体句柄, 返回系统缺省字体 hF= GetStockObject( ); – (3) 调函数SelectObject将字体选入设备环境 SelectObject(hdc,hF);