VC编程心得.docx

上传人:b****3 文档编号:2172682 上传时间:2022-10-27 格式:DOCX 页数:30 大小:39.95KB
下载 相关 举报
VC编程心得.docx_第1页
第1页 / 共30页
VC编程心得.docx_第2页
第2页 / 共30页
VC编程心得.docx_第3页
第3页 / 共30页
VC编程心得.docx_第4页
第4页 / 共30页
VC编程心得.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

VC编程心得.docx

《VC编程心得.docx》由会员分享,可在线阅读,更多相关《VC编程心得.docx(30页珍藏版)》请在冰豆网上搜索。

VC编程心得.docx

VC编程心得

VC编程心得

1在视类里显示东西ONDRAW(),在文档里显示东西用ONPAINT;

2以AFX_开头的注释对是ClassWizard添加并管理的,用户不要对其进行任何修改,即使是注释也不要删除它们;

3UpdateData(TRUE);//更新控件变量,TRUE--从“控件”到“变量”传递;

UpdateData(False)//更新对话框,FALSE—从变量到控件;

4pView->IsKindOf(RUNTIME_CLASS(CTgtDRTView)))//IsKindOf判断运行时是否为我们自己定义的视图;

5str.MakeLower();//转换成小写字母,voidMakeUpper()转换成大写字母;

6BMP格式:

((m_lWidth*8)+31)/32*4,要能被4整除;

BMP文件格式组成:

文件头(14字节)+信息头(40字节)+调色板+图像数据(按行存放)

BMP像的描述信息

TypedefstructtagBITMAPINFOHEADER{//bmih

DWORDbiSize;//数据结构的尺寸

LONGbiWidth;//位图以像素为单位的宽

LONGbiHeight;//位图以像素为单位的高

WORDbiPlanes;//目标设备的平面数,必须为1

WORDbiBitCount;//每一个色平面像素位数1、4

DWORDbiCompression;//压缩类型BI_RGB,BI_REL4

DWORDbiSizeImage;//图象以字节为单位的尺寸

LONGbiXPelsPerMeter;//x方向的分辨率dpm

LONGbiYPelsPerMeter;//y方向的分辨率dpm

DWORDbiClrUsed;//实际使用色彩数

DWORDbiClrImportant;//重要色彩数

}BITMAPINFOHEADER

24位真彩色图象存储格式

24位真彩色图象格式在16位编辑器(例如VC编辑器)中打开,可以看到图象的二进制数据。

24位真彩色的二进制数据为:

包括位图文件头、位图信息头和位图阵列三部分。

1、位图文件头

位图文件头用来记录文件大小的一些信息,在文件中占14个字节,存储的内容如下:

字节1234567891011121314

000000424DCCB402000000000036000000

其中:

424D为位图的标志,即ASCII码BM

CCB402表示位图文件的总字节数,换算成十进制为(CCB402)H=(177356)10,即这副图象的大小为177356字节。

00000000为保留字节,用来存储文件大小的数据;

3600000000表示位图阵列的起始位置,(36)H=(54)10即54字节开始为位图阵列。

2、位图信息头

位图信息头记录和位图相关的一些信息,在文件中占40个字节,存储的内容为:

字节12345678910111213141516

0000002800

00001600002C010000C5000000010018000000

000032000000000000120B0000120B00000000

000048000000000000

其中:

28000000表示信息头的长度,(28)H=(40)10,即信息头占40个字节;

2C010000表示位图宽度,单位为像素。

(012C)H=(300)10,即位图的宽度为300个像素。

C5000000表示位图高度,单位为像素。

(C5)H=(197)10,即位图的高度为197个像素。

0100表示位图设备级别

1800位图级别,(0018)H=(24)10,即24位真彩色;

00000000表示压缩类型,为零表示不压缩;

00000000保留字节;

120B0000表示水平分辨率

120B0000表示垂直分辨率

00000000表示位图实际使用的颜色表中的颜色变址数

00000000表示位图显示过程中被认为重要颜色变址数。

3、位图阵列

位图阵列,即像素表示部分,每个像素点由3个字节的数据组成,按照从左到右的顺序,分别表示蓝色、绿色、红色。

在VC++中的WINGDI.h中对于位图的编码和格式有更加详细的定义,下面给出24位真彩色位图格式在VC++中的定义。

TypedefstructtagBITMAPFILEHEADER{//位图文件头

WORDbfType;//位图标志:

BM

DWORDbfSize;//位图文件总字节数

WORDbfReseaved1;

WORDbfReseaved2;

DWORDbfOffBits;

}BITMAPFILEHEADER;

TypedefstructtagBITMAPINFOHEADER{//位图信息头格式定义

DWORDbiSize;//位图信息头占用字节数

LONGbiWidth;//位图图象宽度(以像素为单位)

LONGbiHeight;//位图图象高度(以像素为单位)

WORDbiplanes;//位图设备级别

WORDbiBitCount;//位图级别设定,每个像素所需要的位数,必须是1(双色),

//4(16色),8(256色)或24(真彩色)之一

DWORDbiCompression;//压缩类型

DWORDbiSizeImage;//位图阵列表字节数

LONGbiXPelsPerMeter;//水平分辨率

LONGbiYPelsPerMeter;//垂直分辨率

DWORDbiClrUsed;//位图实际使用的颜色表中的颜色变址数

DWORDbiClrImportant;//位图显示过程中被认为重要颜色变址数

}BITMAPINFOHEADER;

TypedefstructtagRGBTRIPLE{//位图阵列格式定义

BYTErgbBlue;//定义蓝色

BYTErgbGreen;//定义绿色

BYTErgbRed;//定义红色

}RGBTRIPLE;//构成一个3字节的RGBTRIPLE

灰度位图存储格式

typedefstructtagBITMAPINFO{//bmi

BITMAPINFOHEADERbmiHeader;

RGBQUADbmiColors[1];

}BITMAPINFO;

灰度位图比24位真彩色位图增加了一部分:

颜色索引表(RGBQUAD)。

因此,灰度位图的像素阵列的起始位置不是第(36)H=(54)10个字节,而是第(436)H=(1078)10个字节,同时灰度位图用一个字节表示一个像素。

这样,灰度位图的像素阵列小了三分之二。

颜色索引表定义为:

typedefstructtagRGBQUAD

BYTEred;

BYTEgreen;

BYTEblue;

BYTEnull;

}tagRGBQUAD;

在实际的编程中,读取数据的方式发生了变化,除了要读取文件头,文件信息头外,还要设置变量读取颜色索引表。

除此以外,灰度图象的编程读取显示方式与24位真彩色位图的方式完全相同。

7字符格式:

.f符点数表示方法,例如要表示:

4.0符点数,可以表示成:

4.f;还有,在进行除法运算,3/2时,结果是1,但若写成:

3/2.f,这时结果是1.5。

8HWNDGetDlgItem(intnID)const;//返回指定子窗口的句柄;

HWNDGetDlgItem(

HWNDhDlg,//handleofdialogbox

intnIDDlgItem//identifierofcontrol

);//返回指定子窗口中某一控件的句柄;

9//选中当前黑色画笔,并保存以前的画笔

CGdiObject*pOldPen=pDC->SelectObject(pPenBlack);

10SetBkColor(:

:

GetSysColor(COLOR_APPWORKSPACE));

这里“:

:

”代表WindowsAPI函数(是SDK函数,不是MFC函数),全局作用域,全局变量。

与绘图有关的操作或信息

DC

11在Windows程序中,所谓的“设备环境(DC:

DeviceContext)”就是一种电子画布;电子画笔被称为“GDI对象(GDIObject)”。

除画笔之外,GDI对象还包括画刷、字体、位图和调色板等。

应该说,GDI对象就是那些可以用来在设备环境上绘图的工具。

在Windows程序中,一个设备环境只能拥有一种画笔、一种画刷和一种字体,也就是说,一个设备环境不能同时拥有同一类型的多个GDI对象。

CDC

12在MFC中,CDC类实现了对设备环境的封装。

所有的绘图操作都必须通过一个CDC类(或其派生类)的对象来完成。

CDC类提供了许多函数,可以完成各种与设备环境有关的操作,如选择GDI对象、使用颜色与调色板、绘制图形、显示字体、设置设备环境的属性和坐标转换等。

CDC类的派生类包括:

CPaintDC类、CClientDC类、CWindowDC类和CMetaFileDC类。

CDC为我们提供了四个输出文本的函数:

TextOut、ExtTextOut、TabbedTextOut、DrawOut,分别用于不同的场合。

如果想要绘制的文本需要支持Tab符,那么采用TabbedTextOut函数,可以使绘制出来的文本效果更佳;如果需要在一个矩形区域内绘制多行文本,那么采用DrawOut函数,会更富于效率;如果文本和图形结合紧密,字符间隔不等,并要求有背景颜色或矩形裁剪特性,那么ExtTextOut函数就将是最好的选择。

如果没有什么特殊要求,那使用TextOut函数就显得简练多了。

GDI

13在MFC中,CgdiObject类封装了GDI对象。

但是,用户几乎不直接使用CgdiObject类,而是使用该类的派生类(包括:

Cpen类、Cbrush类、Cfont类、Cbitmap类、Cpalette类和Crgn类)。

其中,Crgn类封装了GDI区域,区域是窗口中特定的一块,通常用来指定操作的范围,以免干扰其他不需要修改的区域。

显示位图资源

CRectrect;

CDChMemDC;

GetClientRect(&rect);//获得客户窗口的大小

BITMAPBmp;

HBITMAPhbitmap=LoadBitmap(:

:

AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDB_BITMAP_VIEW));//装入位图资源

hMemDC.CreateCompatibleDC(NULL);//创建内存设备上下文

SelectObject(hMemDC,hbitmap);//位图选入上下文中

GetObject(hbitmap,sizeof(BITMAP),(LPSTR)&Bmp);//获得位图大小

StretchBlt(dc.m_hDC,0,0,rect.right,rect.bottom,

hMemDC,0,0,Bmp.bmWidth,Bmp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1