自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 资源 (3)
  • 收藏
  • 关注

原创 vector 使用at 和 []访问元素

1 使用at,如果不存在,则会抛出C++异常,可以使用异常机制捕获vector vecvec.push_back(1);try{       int i = vec.at(2);}catch(...){       cout } 2 使用【】直接抛错(vc编译器)

2009-08-24 10:15:00 3569

转载 STL中用erase()方法遍历删除元素

http://www.cppblog.com/Herbert/archive/2009/01/08/70479.html      STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。      在使用 list、set 或 map

2009-08-23 10:10:00 5730

转载 STL:循环删除容器中元素的方法和陷阱

算法大师Donald Knuth:不成熟的优化是一切恶果的根源(Permature optimization is the root of all evil )。 STL中的容器主要是两种:序列式容器和关联式容器。下面讲到的都是我在开发中曾经遇到过的一些问题,有些例子我做了修改,我想初学STL的人基本都会遇到这些问题。序列式容器:vector list string等等关联式容

2009-08-23 09:25:00 988

转载 不同种类的整型比较,到底发生了什么?

 看这么两行代码:int i = -1;cout 在VC6.0下,永远输出0。而下面这两行代码也永远输出0int i = 255;cout 而实际上,以上两个代码中,char(i)和unsigned char(i)具有的内存布局都是完全相同的。由于整型之间的类型转换遵循这样的原则:当目标类型比原类型短的时候,直接截断原类型。而当目标类型较长,则无符号类型会直接在高位补0,有符号类型在高位补符号位。

2009-08-15 13:55:00 968

转载 原码、反码和补码

在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。    反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。1、原码、反码和补码的表示方法(1)    原码:在数值前

2009-08-15 13:53:00 1229

原创 stl对象的初始化方法

 stl对象有几种初始化方法:1 定义一个空的对象,如:vector vec;2 指定对象的大小,如:vector vec(10);3 指定初值,如:vector vec(10,1);//含有是个元素,每个值为14 以一个数组初始化,如:void Print(int PriVale){    cout }int main(arra

2008-12-04 10:24:00 3498

原创 C++中的##使用

 ##用于连接两个字符串,如:#define DEF(t) "str"##t int main(array ^args){    char ch[] = DEF("123");    cout     getchar();    return 0;} 返回:str123 但,下面会提示编译错误:#define DEF(t)

2008-11-27 14:41:00 729

原创 单字节/宽字节下的strlen,sizeof,lstrlen

 宽字节(unicode)下,一个字符占两个字节,所以:    char  ch1[]  = "123";    TCHAR ch2[8] = TEXT("123");    cout sizeof(ch1)     cout     cout sizeof(ch2)     cout  输出:4 3 16 3当然,最后那个字符串结束标记‘/0’

2008-11-27 14:26:00 3461

原创 Switch接受的类型

 在C++中,Switch只接受整数类型,像char,int,short,long等,但string,float,double等就不支持,否则编译会出错:    string d = "1";    switch (d)    {    case "1":        cout "sd1"         break;    case "2":  

2008-11-27 14:22:00 1081

原创 关闭编译时的警告

编译程序时会出现各种警告,软件发布时须关闭1 C++从大范围的书转为小范围的数时就会有警告信息,如: int i = 10; double d = 10.2; i = d + i; cout  改为下面就好了: int i = 10; double d = 10.2; i = (int)d + i; cout

2008-11-27 14:13:00 865

原创 windows实现多线程的原子访问

一 较老的实现函数LONG InterlockedIncrement(PLONG plAddend);LONG InterlockedDecrement(PLONG plAddend);这两个函数只能对指定的数实现加1或减1,现在他们已经有其他函数代替了,先看他们使用的一个例子: // 11.cpp : main project file. #include "st

2008-11-25 09:46:00 1416

转载 大小端模式

 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; r( ~dLm,     所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低

2008-11-24 15:58:00 921

原创 CreateBitmaplndirect

     函数功能:该函数可以创建一个具有特定宽度、高度和颜色格式的位图。    函数原型:HBITMAP CreateBitmaplndirect(CONST BITMAP *lpbm);    参数:    ipbm:指向BITMAP结构的指针。该结构包含有关位图的信息。如果应用程序将其成员bmWidth或bmHeight设为0,那么CreateBitmaplndirect将返加一个只有1个像

2008-11-19 13:05:00 781

原创 重载new和delete运算符

 在C++中可以重载new和delete运算符,重载new时注意参数须设置为size_t,当然UINT也可以,其他的如WORD,DWORD都不行;重载delete是参数应设为void *。下面是一个例子,还模拟了构造函数与new的执行顺序:// 重载newdelete.cpp : main project file. #include "stdafx.h" #include

2008-11-19 10:40:00 2886

原创 CreateBitmap

     函数功能:该函数创建一个带有特定宽度、高度和颜色格式的位图。    函数原型:HBITMAP CreateBitmap(int nWidth,int nHeight, UINT cPlanes, UINT cBitsPeral,CONST VOID *lpvBits);    参数:    nWiath:指定位图宽度、单位为像素。    NHeight:指定位图高度、单位为像素。    

2008-11-18 18:03:00 7871

原创 半透明AlphaBlend

 1 AlphaBlend    函数功能:该函数用来显示透明或半透明像素的位图。    函数原型:AlphaBlend(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int hHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int

2008-11-18 11:31:00 9460 1

原创 AdjustWindowRect 与 SetWindowPos

 这两个函数经常一起使用,所以放到一起讲:1 AdjustWindowRect    函数功能:该函数依据所需客户矩形的大小,计算需要的窗口矩形的大小。计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。    函数原型:BOOL AdjustWindowRect(LPRECT lpRect ,DWORD dwStyle,BOOL bMENU); 

2008-11-18 09:11:00 4610

原创 线程安全的对象操作

  CRITICAL_SECTION cs;//全局临界区 class Lock//加-解锁 {public:    Lock()    {        EnterCriticalSection(&cs);    }    ~Lock()    {        LeaveCriticalSection(&cs);    }};

2008-11-17 15:26:00 805

原创 结构体

 1 命名使用如下形式:typedef struct Render_S { int i; int j;}Render, *RenderPtr; 注意加typedef,否则Render  r ;的话会出错,但Render_S  r;可以,还要注意变量的定义要分行。//待续

2008-11-17 09:46:00 586

转载 GetSystemMetrics

   下面是GetSystemMetrics函数参数nIndex的定义:  SM_ARRANGE Flags specifying how the system arranged minimized windows. For more information about minimized windows, see the following Remarks section.  SM_

2008-11-10 10:43:00 636

原创 COLORREF结构

1  定义typedef  DWORD   COLORREF;即为一个32为长整数2 初始化COLORREF col = RGB(100,200,10);其中用到了RGB,看看他是什么:#define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))原来也是一个COLORREF ,不过是把参数转换

2008-11-10 09:51:00 2140

原创 DX中灯光和材质续

 假如设置这样的顶点格式:#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ)//灵活顶点格式 struct CUSTOMVERTEX {    D3DXVECTOR3 position;}; 他告诉我们,顶点是未进行坐标转换和光照处理的,须我没手动处理,如果我们未处理会是怎样呢? 1 什么都不做:/*****

2008-11-04 16:40:00 853

原创 DX灯光与材质

 因为灯光与材质经常在一起使用,所以一起讲。一 基本概念在前面的例程中,通过对顶点颜色进行插值来获取实体表面的颜色,这种简化的计算模型无法如实地反映真实世界。在自然界中,我们所看到的一切都是由光线产生的:光由光源出发,沿直线传播;当光线遇到物体时,一部分被吸收,剩余的被反射,该过程反复进行,直至光线能量耗尽,或者被人眼接收从而产生视觉。在Direct3D中,用灯光和材质来模拟这个过程。灯光

2008-11-04 15:25:00 2484 1

原创 DX中的颜色表示

 DX中有很多种方式可以表示颜色:1 DWORD:定义:typedef unsigned long       DWORD;即为一个无符号32位(32机器)长整数,有四个字节,我们从左到右叫他1,2,3,4字节,每一个字节的范围是0~255。第一个字节表示alpha值,即透明度。如果是255,表示不透明,0表示完全透明(看不到),其他分别是R,G,B值。获取:可通过下列方法获得

2008-11-04 14:11:00 1349

原创 索引缓冲区

 在Direct3D中,实体模型中的一个点可能被多个三角形面所共用,如果每个三角形都构造三个顶点,对比较浪费资源的,为了节省资源,引入了索引缓冲区:把顶点的具体数据和代表图元格式的顶点顺序分开存储,顶点数据仍然放到顶点缓存区中,索引缓存区则按照图元格式,顺序存放顶点的索引。下面是一个简单的使用例子,画出两个三角形:/*********************************

2008-11-04 11:36:00 3332

原创 关于DX中三角形的构造顺序

 今天写了一个简单的程序,显示一个三角形,结果就是看不到在屏幕上,我构造的三角形如下:    vertices[0].position = D3DXVECTOR3(150.0f,  50.0f, 1.0f);//三个点     vertices[0].rhw      = 1.0f;    vertices[0].color    = 0xffff0000;    vert

2008-11-04 11:22:00 1235

原创 DX9三种缓冲区

 DX9中有三种缓冲区,分别是颜色缓冲区,深度缓冲区,模板缓冲区。 1 三种缓冲区简介颜色缓冲区:设置后备缓冲区的颜色,即背景的颜色。深度缓冲区:即所说的Z缓冲,每一个待绘制的三角形都有一个Z值(0-1),DX会比较当前位置的两个图元的Z值,决定绘制那个图元,即是否用当前图元的颜色代替已有位置图元的颜色。模板缓冲区:是一个记录每个像素信息的附加的缓冲区,很象一个 z 缓冲区。

2008-11-04 09:32:00 2013

转载 VS2005快捷键

 VS.net 2005快捷键一览表 全局”快捷键 下列快捷组合键可用于集成开发环境 (IDE) 中的不同位置。 命令名 快捷键 说明 编辑.复制 CTRL + C CTRL + INSERT 将当前选定的项复制到系统剪贴板。 编辑.剪切 CTRL + X SHIFT + DELETE 将当前选定的项移除到系统剪贴板。 编辑.循环应用剪贴板中的复制项 CTRL + SHIFT + INS CTRL

2008-10-30 11:28:00 1406 1

原创 全局变量先于main/winmain执行

 C++规定,全局对象的构建比程序的进入点(main/winmain)更早。class A{public:    A()    {        cout"A"    }};A a;int main(array ^args){    cout"main"    getchar();    return 0;}结果为

2008-10-30 10:16:00 957 1

原创 MFC的入口

 很多人找不到MFC中的WinMain函数在哪,其实是在crtexe.c文件中,有一个WinMain函数,他就是起点。然后调用appmodul.cpp的_tWinMain,这个函数只有一条语句:return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);程序进入winmain.cpp中的AfxWinMain(),这个函数再调

2008-10-30 09:20:00 1190 3

原创 SetCapture

     一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息。调用SetCapture后,即使鼠标移动出客户区,你也可以接受到鼠标消息。不过系统中只能有一个程序调用SetCapture,所以你需要在不使用时调用ReleaseCapture释放。而GetCapture可以知道当前哪个窗口调用了SetCapture。BLOKOUT2.C     /*---------

2008-10-29 13:41:00 4754

转载 GetSafeHwnd

 当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由:  CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器  HWND hwnd = pwnd->m_hwnd; //得到它的HWND  这样的代码当开始得到的pwnd为空的时

2008-10-29 11:30:00 955 1

转载 汉字编码

 一、汉字编码的种类    汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。    1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字

2008-10-29 10:47:00 69874 3

转载 OutputDebugString

 我们知道,Window系统中有一种称为Debuger的工具,可以捕获应用程序输出的调试信息,这是由OutputDebugString函数实现的。为什么要有这样一种调试机制呢?有果必有因:当一个大型程序中存在着一个非常隐蔽的错误(所谓隐蔽,指的是我从运行过程中发现程序不正常,但是即使检查源代码,也很难发现何处存在错误),于是乎,我们在运行过程中添加一些输出语句,把中间结果或者程序状态输出出来,根据

2008-10-29 10:18:00 1198

原创 精确获取时间(QueryPerformanceCounter)

LARGE_INTEGER tima,timb; QueryPerformanceCounter(&tima); 在 Windows Server 2003 和 WindowsXP 中使用 QueryPerformanceCounter 函数的程序可能执行不当QueryPerformanceCounter 來精確計算執行時間QueryPerformanceCounter 來精確計算執行時間

2008-10-29 09:34:00 28834 1

转载 堆与栈

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

2008-10-28 18:04:00 891

原创 把一张纹理贴到一个正方形上

  /******************************************************FileName: Demo.cppAuthor: lsm   Version:        Date: 08/10/28Description: 把一张纹理贴到一个正方形上.History:      ********************

2008-10-28 17:48:00 1485 6

转载 顶点格式

     下面我们来讨论有关声明顶点和顶点格式的有关内容:  注:在DirectX 6.0之前,程序使用三种顶点类型——D3DVERTEX、D3DLVERTEX和D3DTLVERTEX——中的一种时,需要考虑正在使用几何管道中的哪一部分。随着DirectX 6.0中更加灵活的顶点格式的出现,使得我们有了比以前更多的声明方式,但是仍然要使用预先定义的结构来描述不进行变换和灯光处理

2008-10-28 15:05:00 1842

原创 D3DCULL_MODE

 D3DCULL_MODE是背面隐藏消除的意思.    出于性能或者其它方面考虑,D3D默认在绘制三角形的时候,只绘制一面,D3DRS_CULLMODE可以设置绘制正面还是反面,或者两面都绘制,(可以这样定义:在观察空间观察某个三角形时,如果三角形的3个顶点p1、p2、p3呈逆(顺)时针排列时,显示这个三角形)。    SetRenderState(   D3DRS_CULLMODE,

2008-10-28 14:31:00 1336

转载 D3DFVF_XYZ和D3DFVF_XYZRHW的区别

 D3DFVF_XYZ和D3DFVF_XYZRHW有什么区别?以前好像没有仔细思考过。    今天,做了个实验得知,在顶点结构体中没有RHW时,Direct3D将执行视、投影、世界等变换以及进行光线计算,之后你才能在窗口中得到你所绘制的物体。当顶点结构体中有RHW时,就像上面那段英文所述,告知Direct3D使用的顶点已经在屏幕坐标系中了,不再执行视图、投影、世界等变换和光线计算,因为D3DF

2008-10-28 14:03:00 1821 1

高质量C++_C编程指南.pdf

高质量C++_C编程指南.pdf高质量C++_C编程指南.pdf

2008-12-08

effectivec+++

不用介绍了吧,太经典了!不用介绍了吧,太经典了!不用介绍了吧,太经典了!

2008-12-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除