摘要:以下代码可在windows与linux上正确编译和执行。 日志按照QQ号和日期为单位分类进行存放,可防止不同QQ号的日志混放在一起,以及日志随着时间逐渐变大等问题。 1 #include <stdio.h> 2 #include <stdarg.h> 3 #include <time.h> 4 5
阅读全文
摘要:具体做法是:打开一个obj文件,查找含有“v x y z"的字串,然后对z的字串进行符号处理:若为"-",直接将该符号删除;不为"-"且z值不为0,则在z的字串前加上"-"。示例(原始文件box.obj)## object Box01#v -39.306316 -32.828358 -29.183971v -39.306316 33.259296 -29.183971v 39.726025 33.259296 -29.183971v 39.726025 -32.828358 -29.183971v -39.306316 -3
阅读全文
摘要:单件模式要保证的是:类只能实例化一个对象。为了保证这点,需要将类的构造函数和析构函数声明为私有类型!代码如下: 1 class single 2 { 3 private: 4 single():m_chs("Hello"){} 5 ~single(){} 6 7 public: 8 void printHello() 9 {10 printf("%s\n",m_chs);11 }12 13 public:14 static single* getInstance()15 {16 if (!m_instan...
阅读全文
摘要:QT-GUI程序显示命令行调试窗口,Qt/VS2008具体配置细节方法如下:1. Qt Creator - pro工程文件用文本工具打开pro文件,在其中加入:CONFIG += console1 HEADERS = mainwindow.h 2 SOURCES = mainwindow.cpp 3 RESOURCES = diagramscene.qrc4 CONFIG += console2. vs2008 -vcproj工程文件修改工程属性配置 Linker - System - SubSystemWindows (/SUBSYSTEM:WI...
阅读全文
摘要:0. 定义一个常驻内存的CFont对象1. 创建一个雅黑字体,并设置字体大小2. 将该字体对象指针赋值给Status Bar对象MFC单文档示例: 1 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 2 { 3 if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 4 return -1; 5 6 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_T...
阅读全文
摘要:在glBegin和glEnd之间执行有效的函数glVertex*() //设置顶点坐标glColor*() //设置当前颜色glIndex*() //设置当前颜色索引glNormal*() //设置法线向量坐标glTexCoord*() //设置纹理坐标glMultiTexCoord*ARB() //为多重纹理映射设置纹理坐标glEdgeFlag*() //控制边的绘制glMaterial*() //设置材质属性glArrayElement() //抽取顶点数组数据glEvalCoord*()、glEvalPoint*() //生成坐标g...
阅读全文
摘要:0 原始贴图1 Nearest滤波纹理2 线性滤波纹理3 MipMapped纹理int LoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理{ int Status=FALSE; // 状态指示器 AUX_RGBImageRec *TextureImage[1]; // 创建纹理的存储空间 memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL // 载入位图,检查有错,或位图不存在的话退出 if (TextureImage[0]=LoadBMP("E:/OpenSource/Nehe/code/07_F
阅读全文
摘要:创建OpenGL窗口: 1 HDC hDC=NULL; // 窗口着色描述表句柄 2 HGLRC hRC=NULL; // OpenGL渲染描述表句柄 3 HWND hWnd=NULL; // 保存我们的窗口句柄 4 HINSTANCE hInstance; // 保存程序的实例 5 6 bool fullscreen=TRUE; // 全屏标志缺省,缺省设定成全屏模式 7 8 /* 这个函数创建我们OpenGL窗口,参数为: ...
阅读全文
摘要:在MFC编程的过程中,我们经常会使用icon和bitmap,例如:给树节点加上一个图标,工具条,按钮上放置一个图片等。但VC的资源编辑器是不支持真彩色图标。为了能制作真彩色图标,需要如下三步:(1)使用其他图像处理工具(例如PS)制作真彩色ICO/BMP(2)将ICO/BMP作为资源加入到VC中,并为其设置一个ID号(3)使用CImageList将这些资源加载到内存以供树、工具条、按钮等使用,细节如下 【关键】// 注:CImageList m_imgList;// CTreeCtrl m_wndLayerTree;// ---------------------------------...
阅读全文
摘要:PictureConverter基于cximage实现,为命令行图片批量转换工具。支持如下格式图片的互转:bmp gif jpg(jpeg) png ico tif(tiff) tga wbmp wmf jp2(j2k)jpc(j2c) pgx pnm(pgm,ppm) ras mng ska raw++++++++++++++++++++++++++可以从这里下载该工具:PictureConverter输入PictureConverter /?来获取帮助!用法示例: PictureConverter d:\picFiles png bmp参数1:待转图片目录参数2:源格式参数3:目标格式--
阅读全文
摘要:OpenGL纹理贴图渲染主要包含三步:(1)在绘制前,加载OpenGL纹理资源 a. 读取bmp宽高值和像素矩阵 b. 调用glGenTextures获取纹理对象ID c. 调用glBindTextures绑定纹理对象ID,使得后续OpenGL指令使用该ID的纹理 d. 调用glTexImage2D生成纹理 e. 设置一些OpenGL处理纹理的参数BOOL LoadGLTextures() // 载入位图并转换成纹理{ int Status=FALSE; // 状态指示器 int w = 0; int h = 0; unsigned char* pImage=NUL...
阅读全文
摘要:以下内容以VS2008为例,测试通过! 增加外部命令 点击Tools -- External Tools...菜单项,点击Add按钮,新增名为 BuildScriptDebug 自定义菜单项: 勾选“Use Output window”表示将执行日志内容输出到VS的Output窗口中 点击OK后,T
阅读全文
摘要:友元不存在权限的概念,原因是友元函数(友元类)并不属于该类的一部分。用friend关键字将一个函数(类)声明在该类之下,只是表明这个函数(类)的内部可以访问该类的私有成员。美其名曰:友元函数(友元类)。意思就是你是我的好朋友,可以随便拿。++++++++++++++class A{ friend class B; // B为A的友元类 friend int add(A& a, int m, int n) // add为A的友元函数 { return a.m_scale*(m+n); }private: int m_scale;public: A() { m_scale= 2; }};c
阅读全文
摘要:今天在移植一个开源代码到windows的VC6工程,编译时出现了这些奇怪的LINK错误。++++++++++++++++++++++++msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(tolower.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _isupper alr
阅读全文
摘要:IDE为:VS2008+SP1A为经典MFC单文档界面:B为Ribbon风格的MFC单文档界面:在生成A和B的基础框架代码之后,通过对比工具,发现这两种不同风格的界面主要在MainFrame类中存在一些差异。应用程序类(CXXXApp)的InitInstance()函数中,B风格在调用InitContextMenuManager()之后,执行了InitShellManager()的初始化。该句代码主要是为CMFCShellTreeCtrl(文件目录树)和CMFCShellListCtrl(文件列表)的使用做一些Shell的初始化工作。++++++++++++++++++++++++++++++
阅读全文
摘要:1. 前序/中序/后序遍历(递归实现)// 前序遍历void BT_PreOrder(BiTreePtr pNode){ if (!pNode) return; visit(pNode); BT_PreOrder(pNode->left); BT_PreOrder(pNode->right); }// 中序遍历void BT_PreOrder(BiTreePtr pNode){ if (!pNode) return; BT_PreOrder(pNode->left); visit(pNode); BT_PreOrder(p...
阅读全文
摘要:昨天在将一个vc6的mfc dll工程转成vs2008时(使用vs2008进行转换),在编译时提示如下问题:WINVER not defined. Defaulting to 0x0600 (Windows Vista) 整个编译和链接过程没有其他问题,但在vs2008中使用该dll创建界面控件时,控件背景刷新和字体颜色(颜色和背景颜色一样,只有选中这些字体时才能看到)存在问题。在其生成的vs2008工程的stdafx.h最前面加入如下代码,问题得到解决。#ifndef WINVER // Specifies that the minimum required platform is Wind
阅读全文
摘要:C++异常机制由两部分组成,即抛出端和处理端。当程序抛出一个异常,控制权不会再回到抛出端。 在抛出端,我们可以抛出一个数或对象,也可以抛出一个指针。 值得注意的是:被抛出的数、对象或指针都会产生一个副本,这个副本最后被传递给处理端。 完成抛出动作之后,原来的数、对象或指针会随之被销毁。 因此要保证此
阅读全文
摘要:数组对应着一块内存区域,而指针是指向一块内存区域。数组其地址和容量在生命期里不会改变,只有内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。声明一个数组时,编译器会根据数组中元素的个数为其分配空间,数组名存放在符号表中,该值为数组的起始地址,为常量,不能被修改。而指针指向一个地址,而且其本身也需要空间来存储。如下图所示:注:a=0xD2D61000 在符号表中,为一常量,并不占用内存空间。&a应该是没有意义,在vc6下,&a=a=0xD2D61000 b=0xD2D61000 在内存中,为一
阅读全文
摘要:MatrixTransform是从Transform - Group继承而来,因此可以在它的下面挂接Node对象。通过设置其矩阵,来实现其下子节点的模型变换。-- 用局部坐标系来理解(局部坐标系又称惯性坐标系,其与模型的相对位置在变换的过程中始终不变)如下代码:// 创建圆柱体double r = 0.5;double h = 3.0;osg::Vec3 orginPt(0.0, 0.0, 0.0);osg::ref_ptr<osg::Geode> cylinderGeode = new osg::Geode;osg::ref_ptr<osg::Cylinder> ge
阅读全文