自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 VS2005快捷键

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

2008-10-30 11:28:00 1420 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 980 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 1221 3

原创 SetCapture

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

2008-10-29 13:41:00 4766

转载 GetSafeHwnd

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

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

转载 汉字编码

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

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

转载 OutputDebugString

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

2008-10-29 10:18:00 1213

原创 精确获取时间(QueryPerformanceCounter)

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

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

转载 堆与栈

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

2008-10-28 18:04:00 900

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

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

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

转载 顶点格式

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

2008-10-28 15:05:00 1874

原创 D3DCULL_MODE

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

2008-10-28 14:31:00 1361

转载 D3DFVF_XYZ和D3DFVF_XYZRHW的区别

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

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

转载 几种DrawPrimitive用法

前面的学习,我们知道如何现实一个三角形了,这就意味着我们掌握了如何把我们需要的顶点参数(例如坐标,颜色等等)送入后台缓冲,然后提交前台显示。今天给大家说说对自己的顶点的渲染方式的问题。大家先一起回顾下上节课的代码片断:VOID Render(){g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(10,10,100),1.0f,0)

2008-10-28 13:31:00 15242 1

转载 DirectX编程入门

 DirectX编程入门初始化一个D3D对象#include #pragma comment(lib,"d3d9.lib")int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){LPDIRECT3D9 d3d = NULL;if(NULL == (d3d=

2008-10-28 11:26:00 3353

转载 D3DPRESENT_PARAMETERS 参数说明

 D3DPRESENT_PARAMETERS 参数说明struct D3DPRESENT_PARAMETERS{    UINT BackBufferWidth;    UINT BackBufferHeight;    D3DFORMAT BackBufferFormat;    UINT BackBufferCount;    D3DMULTISAMPLE_TYPE MultiSa

2008-10-28 10:14:00 1622

转载 关闭 C4996 警告

 在使用VC 2005 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告:         warning C4996: strcpy was declared deprecated    出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、s

2008-10-28 10:01:00 2076 1

原创 游戏中Edit的制作

     Edit,也就是文本框了,是玩家可输入的控件,也是游戏中UI中最难实现的一个控件(相比button,list,checkbox)。原理:1 先定义一条数据结构,用于处理输入字符串,比如分行,光标位置等。2 把用户输入的内容写到内存中。3 从内存中读取数据,放到游戏引擎中,让引擎显示到界面。详细:1 是比较麻烦的,当然,不同的需求有不同的实现,这里就不多说了,重点讲

2008-10-23 09:49:00 883

原创 const的一个问题

 今天写程序,出了一个小问题:struct Test{    int Msgtype;    int szMsg[];};class A{    Test t;public:    Test GetT()const//注意这行的变化    {        return t;    }};int main(array ^a

2008-10-22 15:59:00 503

原创 数组的使用

一 初始值对于数组,尽量在申明的时候就赋初值(C++不会自动赋初值的),否则容易使用未初始化的变量,如:    int a[10];    for(int i=0;i    {        cout    } 结果让你摸不清方向。对于字符数组(数组名有指针的功能)则更应当这样,由于C++继承了C的字符处理方式(char *),字符串以/0结尾。

2008-10-20 17:08:00 579 1

原创 尽量使用引用做函数参数

 如果是不修改参数值,可改为const引用。传引用主要是可提高效率:如果参数是类的话,不使用引用传递,则需要构造新的对象,如下:class A{public:    A()    {        cout"AA"    }    A(const A& a)    {        cout"A"    }};void f(A &

2008-10-20 16:49:00 669

原创 函数参数个数

 函数参数不宜过多,除了代码美观外,参数传递时的开销也比较大,建议不要超过5个,四个以上就可以考虑使用结构代替,使用结构是做好传引用,效率高些

2008-10-20 16:45:00 994

原创 变量使用

1 变量命名:符合公司规则,符合大众口味,符合自己习惯2 变量申明:尽量一个变量申明占一行:    int i;    int j;3 变量赋值:变量申明时赋初值,防止使用未初始化的值(对整型变量好像一般都没初始化):    bool b=false;//当然,也是整型4 变量使用:对一些变量的使用需判断是否为空,是否越界等。5 变量销毁:一些变量使用后

2008-10-20 16:35:00 560

原创 尽量少使用unsigned

 unsigned 可能一部分人对于非负数习惯使用unsigned类型:一来是使的代码清晰易懂(有点类似于const,但问题多多,下面会讲到),二来是可以表达更大的数(这种情况应当比较少吧)。本人不使用的原因:1 如果从一致性来讲,对于自己确认(只是自己确认)为非负数加unsigned,那对于for( int i=0; i2 unsigned类型的变量,在进行比较操作时经常出现比较怪异

2008-10-20 16:16:00 887 2

原创 bool,float,指针变量 与 “零值” 比较的if语句

 1 bool:if(b)或if(!b) 2 float:const float EPSINON = 0.00001;if((x>=-EPSINON )&&(x 3 指针变量:if(p==NULL)或if(p!=NULL) (以上参考高质量C++编程)

2008-10-20 15:47:00 575

原创 嵌套for循环的使用

 1 如果两个或两个以上的for嵌套使用,则执行循环次数多的放最里面,即执行次数由内到外布局,这样可以提高执行速度,如以下应当这样:     const int min = 10;    const int max = 100;    for(int i=0;i    {        for(int j=0;j        {        } 

2008-10-20 15:25:00 1269

原创 尽量使用const

 C++中const的使用与不使用有种这样的味道:1 你不能这样做; 2 你可以这样做,但可能出错。const就是为了防止出错而产生的,也是C++健壮性的一个表现。const主要用在四个地方:1 申明一个常量:如 const int i = 10;2 做函数参数,表明此参数不可改变:如 void f(const int * p);3 申明常成员函数,表明此成员函数不修改类的成员:如

2008-10-20 15:08:00 922 1

原创 内存使用习惯

  1 先申请再使用,不要在申请内存之前使用  char *p ; memcpy(p,"asdf",strlen("asdf"));//出错  return p;2 申请了内存,检查是否申请成功 char *p = new char[size];if(p == NULL){}3 做参数使用时,检查是否为空

2008-10-20 14:51:00 511

原创 防止内存泄漏

 在小的系统中,内存泄漏可能不会表现出对程序的影响(注意是可能不会表现),但对于大的系统,内存泄漏是个不能忽视的问题,有可能影响系统系能。1 尽量不要把内存申请和释放放在不同的函数中(当然,类的构造和析构函数除外)char * f(){    char *p = new char[size];    return p;} 此函数申请了内存但没释放,很容易

2008-10-20 14:25:00 603

原创 对系统调用和内存分配检查是否执行成功

 1 对于系统调用,比如打开一个文件,检查是否执行成功。这种情况出现在很多API调用上,由于参数传递不对,或者平台不同,经常导致这些函数执行失败。 FILE *fp; fp=fopen("aaa.aaa","r"); //if(fp如何) or assert(fp如何) 2 对于内存申请,由于现在系统配置都比较高,一般不会出现内存申请失败,除非特意或失误。当然,为了防止这类事情发生,申

2008-10-20 14:14:00 553

原创 检查传入参数

 对函数传入的参数进行检查:1 既能提高程序的效率;2 也能使程序变得更健壮,防止程序运行时崩溃可从以下方面入手:1 传入指针,需检查指针是否有效。void f(char *p){    if(NULL == p)    {        //处理     }}2 传入的是数组下标,对下标范围检查。int operator [](int 

2008-10-20 13:58:00 693

原创 C++虚函数

 有虚函数的类,编译器会创建一张虚函数表,类的实例会通过一个指针指向这个虚函数表:class A{public:    A(){}    virtual void Print()    {        cout"A"    }};class B : public A{public:    B(){}    void Print(

2008-10-20 13:22:00 462

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

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

2008-12-08

effectivec+++

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

2008-12-08

空空如也

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

TA关注的人

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