自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hlfkyo的专栏

三维场景可视化开发,threejs、opengl、osg、forge、cesium、CAD/Revit/3dMax开发、bim/gis、gltf/glb/fbx/3dtiles大场景数据的程序生成处理

  • 博客(61)
  • 资源 (3)
  • 收藏
  • 关注

原创 Three.js漫游相机控制器/three.js第三人称视角漫游/three.js第一人称视角漫游

Three.js漫游相机控制器/three.js第三人称视角漫游/three.js第一人称视角漫游

2022-09-25 12:07:39 1918 1

原创 Three.js大场景camera相机控制/OrbitControls升级修改/threejs以鼠标为中心的场景相机

Three.js大场景camera相机控制/OrbitControls升级修改/threejs以鼠标为中心的场景相机

2022-09-05 21:44:12 2272 4

原创 C++字符串流操作

字符流操作

2017-06-16 17:20:35 549

翻译 zlip

#include "zlib.h"#include #include #define CHUNK 32768bool compress(std::ostream & fout, const std::string & source){    int ret, flush = Z_FINISH;    unsigned have;    z_stream strm

2017-06-16 09:44:01 670

翻译 字符集之 MBCS与UNICODE使用问答

1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。2. 如何对DBCS(双字节字符集)字符串进行操作?函数 描述

2012-04-16 12:53:30 781

翻译 字符集之 Unicode与字符串对象

1.unicode简介如今,Windows操作系统的使用已经遍及世界,为使Windows操作系统及运行在操作系统上的应用软件更容易被世界所有国籍的用户所使用,需要使Windows及运行在其上的应用程序本地化,即使用用户本民族语言的字符集。字符集的不统一使得本地化变得很困难,这需要对操作系统的源代码根据不同的字符集进行全方位的定制,还要提供API的不同字符集的版本,此外,编写应用软件也要针对不同

2012-04-14 13:35:41 1101

原创 字符集之 代码书写和底层探索

遭遇问题:1.工程配置为多字节字符集时,工程中代码书写用宽字节字符类型和函数的情况是基本无实际用途的,因为我用了MFC等三方库,界面显示到底是由它负责的,在机子配置是非本地语言的情况下界面显示还是乱码,原因估计是三方库这部分还是处理成了ANSI的情况。2.当主工程和动态链接库工程采用不同的字符集配置时,出现了启动对话框崩溃现象,尽管dll接口中没有出现使用字符串对象的现象。我想原因还是出在

2012-04-14 13:14:47 1339

原创 VC编程工具

1. IDE:钟情于VC++6.0,据说这是最精简灵活的,但是也感觉Visual Studio2008和2010的强大,可能迟早得转到VS高版本上来。在安装VC++6.0的时候记得安装sp6补丁和msdn(MSDN_1.5_精简安装版 )2. 辅助:Visual Assist,喜欢它代码自动补全,快速注释,头文件源文件切换:VC_VA_X_1561(最适合VC6)  WndTabs:很实用

2012-02-04 12:49:27 680

原创 类对象及类成员函数作为函数参数的方法

以此类为例:class CA{public:CA(CString str){m_str = str;} void Fff(CString str){cout public:CString m_str;} //函数:void  f1(CA *a, void(CA::*f)(CString), CString str){ (a->*f)(

2012-01-21 13:08:03 1030

原创 窗口创建和关系

//结论1:模态或非模态子窗口,选中激活中时都不会显示在其父窗口后面,全部窗口区域总位其于父窗口前面。//结论2:模态或非模态窗口的窗口性质不受其在哪个窗口代码中弹出的影响,只受制于其父窗口。//结论3:主框架最后弹出的那个模态对话框会占用当前的消息循环,此前的非模态窗口也选不中。//结论4:父窗口关闭时子窗口也随之关闭,但当子窗口有消息循环(模态)时不是这样。如从一个非模态窗口中弹出

2011-12-02 13:48:25 696

原创 消息处理相关函数讲解

一、SendMessage :该函数将指定的消息发送到一个或多个窗口(以下消息发送函数皆是如此不必多言)。如果指定窗口由调用线程创建,那么窗口过程会被当成一个子程序立即调用。如果指定窗口由另外一个线程创建,那么系统会切换到那个线程,并且调用合适的窗口过程。在线程之间传递的消息仅仅

2011-09-16 19:19:14 1700

翻译 windows消息队列

本节详细描述消息和消息队列以及如何在你的程序中使用他们。关于消息和消息队列与传统的应用程序不同,Microsoft Windows应用程序并不显式地用一个函数的调用(如c运行库)来获取输入,而是,等待windows系统把输入传给它们。windows系统把应用程序的

2011-09-11 18:07:25 999

翻译 Windows消息调度机制和线程同步控制

windows的所谓事件驱动核心是消息!    消息分为进队消息消息和非进队消息。所谓进队消息就是windows将消息发送到每个线程所专有的队列中,然后由程序自主处理,这种消息基本上是由用户输入产生(wm_keydown,wm_keyup,wm_char,wm_mouse**

2011-09-11 15:55:00 4142 1

翻译 让程序在崩溃时体面的退出

一、 让程序在崩溃时体面的退出之Unhandled Exception :程序是由代码编译出来的,而代码是由人写的。人非圣贤,孰能无过。所以由人写的代码有缺陷是很正常的。当然很多异常都在开发阶段被考虑到而添加了处理代码,或者用try/catch对可能出现异常的地方进行额外的照

2011-07-29 19:05:03 1000

原创 软件安装卸载后为何要重启

什么有些软件要安装,直接拷贝过去不能用?为什么一些软件安装或卸载之后要重启。这就需要我们知道软件安装时都干了些啥? 首先,在不同版本的操作系统上,如WINDOWS98,WIN2K和WINXP等上它们都有共同点的地方。这里不针对具体的某个操作系统,而对共同的规律来探讨,不过我自己用

2011-07-26 19:19:31 2922 1

转载 【Brep】

Brep】: Boundary Representation 边界表示法:       计算机中表示三维形体的模型,按照几何特点进行分类,大体上可以分为三种:线框模型、表面模型和实体模型。如果按照表示物体的方法进行分类,实体模型基本上可以分为分解表示、构造表示CSG(Constructive Solid Geometry)和边界表示BREP(Boundary Representation)三大

2011-06-18 09:37:00 7264

原创 3D 游戏为什么选择OpenGL

<br />对于3d 图形程序员,看到了这个标题,可能想到了硝烟弥漫的API大战… 首先声明,这篇文章并不参战,当然也不希望任何人利用本文的观点作为API战争的佐证,本文是要客观的阐述OpenGL 足以实现现代游戏的3d图形表现需要,而不是要贬低其它的API,比如Direct3D,当然本文的读者也不仅限于3d 图形程序员,也可以作为项目制作人选择什么API的一个参考。 <br />如题所言,使用OpenGL制做3D游戏,当然,这不是说一定就直接使用OpenGL API来开发游戏;采用基于OpenGL的Gra

2011-03-28 19:03:00 1454 3

转载 VC中的一些常用方法

<br />//一、打开CD-ROM<br />mciSendString("Set cdAudio door open wait",NULL,0,NULL);<br />//二、关闭CD_ROM<br />mciSendString("Set cdAudio door closed wait",NULL,0,NULL);<br />//三、关闭计算机<br />OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构<br />OsVersionInfo.dwOSVer

2010-09-14 08:32:00 485

翻译 架构师

<br />我最早听说“软件架构”这个概念以及UML的名字,是在1999年的水木清华BBS上。当时有一篇文章介绍了软件架构作为一个相对独立的领域的发展情况,顺便提到在此前一年被接纳为OMG标准的UML。该文作者断言,UML的出现将能“彻底”改变软件开发的工作方式,甚至“若干年之后,不通UML者无法染指软件开发”。三年之后,《程序员》杂志专访Ivar Jacobson时,UML已经是尽人皆知。记得Jacobson在那次采访中劝告中国的开发者,赶快去学习RUP。从那时候起,越来越多的人顶上了“软件架构师”的头衔

2010-09-01 13:51:00 636

原创 二. Windows 剪贴板

<br />一、概述 <br />---- 在Windows操作系统中存在两种剪贴板机制:Windows标准剪贴板和OLE剪贴板机 <br />制。 <br />---- 标准的Windows剪贴板是一个被所有Windows应用程序共享的系统服务,因此它并 <br />没有自己的句柄或类。但你可以通过CWnd类的成员函数来管理剪贴板。 <br />---- 自从OLE(Object Linking and Embedding,对象链接和嵌入)诞生之后, <br />Windows操作系统中便出现了第二种剪贴

2010-08-27 14:09:00 5700

原创 一. 内存操作与分配

一.内存操作:void *memset(void *s, int ch, unsigned n);将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。memmove、memcpy和memccpy三个函数都是内存的拷贝,从一个缓冲区拷贝到另一个缓冲区。表头文件: #include 定义函数: void *memcpy(void *dest, const void *src, size_t n)函

2010-08-26 14:54:00 821

原创 全局变量管理方案

<br />1. 在stdafx.cpp中加入:int myInt;  然后在stdafx.h中加入:extern int myInt。这样定义以后无论在什么文件中都是可见<br /><br />3. 应用程序类的主头文件处定义变量,在程序的任何地方,都可以用AfxGetApp()访问该变量,本质上并非真的全局<br /> <br />2. 比较规范是,先定义global.h,把全局变量原始定义放进去后定义一个globalExt.h,把你先前定义在Glbs.h中的变量都加上extern.第一次调用#incl

2010-08-07 15:26:00 979

原创 MFC设计或实现之漏洞

<br />一.<br />我使用了OnNcLButtonDown可以响应消息,之后使用OnNcLButtonUp却不能响应单击消息,但双击能响应。<br />因为窗口管理器在处理 OnNcLButtonDown 的时候捕捉了鼠标焦点,即使用了 SetCapture 函数,在捕捉了鼠标焦点后,窗口就不会发送 WM_NCLBUTTONUP 消息而会发送 WM_LBUTTONUP 消息。<br /><br />解决办法:<br />在你的CXXDialog中的消息处理函数OnSysCommand()(对WM_S

2010-07-14 13:54:00 1027

原创 MFC之控件扩展

      MFC给程序员们提供了一个很强大的开发模板用于Windows编程,简单的界面创建方法更是方便了程序员。但是MFC提供的界面控件虽然挺多挺强大,但却不能满足某些功能的特殊需求。还好,C++的类继承机制和MFC精致的设计给我们带来了无限的发挥空间。       1. CListCtrl 的扩展:          CListCtrl控件不支持单元格的背景和字体颜色改变,单元格的

2010-04-29 12:53:00 4266

原创 模板和泛型编程

      C++之父Bjarne Stroustrup认为模板和泛型编程是现代C++的核心,是无损效率、类型安全代码的关键。然而它们并不适合经典的面向对象编程思维模型。C++的强项恰恰在于它支持多种有效的编程风格(多种的思维模型,如果你一定要这么说)以及他们之间的相互组合。后来Alex创造性地使用了我所设计的模板特性,这就导致了STL的诞生,使得目前人们开始重视泛型及生成编程。      S

2010-04-28 13:34:00 618

转载 C++ 函数调用方式(_stdcall, _pascal, _cdecl...)总结

__stdcall:       _stdcall 调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前

2010-04-28 08:53:00 491

原创 函数的解析之C/C++

      函数是程序的执行模块,是整个项目的细胞,如何组织好每一个函数的结构,如何提高程序的可读性和运行效率,是程序员们不断品味的主体。有时函数的设计能直接体现出程序员对C/C++的理解和感悟。       C/C++的函数类型不对外乎以下几种,有些描述可能不太贴切:      一般函数,函数重载,虚函数,函数模板,内联函数,静态函数,回调函数,宏定义实现函数效果。 1. 函

2010-04-27 19:01:00 521

原创 三. 实现回调

声明函数指针    回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非常类似。请看下面的例子:void f();// 函数原型上面的语句声明了一个函数,没有输入参数并返回void。那么函数指针的声明方法如下:void (*) ();   

2010-04-25 15:43:00 490

转载 二. 回调函数

什么是回调函数?  简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。  为什么要使用回调函数?  因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。  如果想知道回调函数在实际中有什么作

2010-04-25 15:26:00 501

转载 一. 异步消息的传递-回调机制

1. 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方

2010-04-25 14:49:00 738

原创 脚印--看过的书

这些是我毕业之后看过的书或接触过的软件: 用过的软件:Google SketchUp 7 汉化版pkpm3d-佳园-园林设计AutoCAD 2004Autodesk 3ds Max 2010VRP-中视典仔细看过的书:C 程序设计C++ 程序设计教程高质量C++编程指南C++Primer3rdEdition中文完美版Effective C

2010-04-24 18:55:00 696

原创 七. 让EXE导出函数及DLL木马

偶然发现OllyDBG.exe导出了一堆函数,这些函数都是供其插件调用的。对这种体系结构很感兴趣,想弄清楚它的实现原理。后来又看到梁肇新的书《编程高手箴言》第278页提到的调用门,觉得都应该差不多。三种不同的解决办法(原理可能是一样的,:)):1)在导出函数声明之前加上__declspec(dllexport)。例:__declspec(dllexport) int Add(int a, int

2010-04-24 13:36:00 1777

转载 六. MFC扩展DLL的创建

MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样。除了可以在MFC扩展DLL的内部使用MFC以外, MFC扩展DLL与应用程序的接口部分也可以是MFC。我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic、 CButton等类使之具备更强大的能力。   使用Visual C++向导生产MFC扩展DLL时,MFC向导会自动

2010-04-24 13:04:00 1409

翻译 五. MFC规则DLL(Regular)

5.1 概述  MFC规则DLL的概念体现在两方面:  (1) 它是MFC的  “是MFC的”意味着可以在这种DLL的内部使用MFC;  (2) 它是规则的  “是规则的”意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是其与应用程序的接口不能是MFC。而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的派生类

2010-04-23 18:53:00 831

翻译 四. 一个简单的DLL(非MFC动态链接库)

第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数。  在VC++中new一个Win32 Dynamic-Link Library工程dllTest。注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是第5、6节要讲述的MFC 动态链接库。  在建立的工程中添加lib.h及li

2010-04-23 13:26:00 1490 1

原创 三. 库的调试与查看

由于库文件不能单独执行,因而在按下F5(开始debug模式执行)或CTRL+F5(运行)执行时,其弹出如图3所示的对话框,要求用户输入可执行文 件的路径来启动库函数的执行。这个时候我们输入要调用该库的EXE文件的路径就可以对库进行调试了,其调试技巧与一般应用工程的调试一样。    通常有比上述做法更好的调试途径,那就是将库工程和应用工程(调用库的工程)放置在同一VC工作区,只对应用工程进行

2010-04-22 12:59:00 708

原创 二. 静态链接库

对静态链接库的讲解不是本文的重点,但是在具体讲解DLL之前,通过一个静态链接库的例子可以快速地帮助我们建立“库”的概念。 建立一个静态链接库在VC++6.0中new一个名称为libTest的Win32 Static Library工程,并新建lib.h和lib.cpp两个文件,lib.h和lib.cpp的源代码如下://文件:lib.h#ifndef LIB_H#define LI

2010-04-21 13:33:00 1283

转载 一. 链接库概述

  先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。   静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使 用DLL,该DLL不必

2010-04-21 13:13:00 845

转载 如何加快C++代码的编译速度-以及stdafx.h解析

C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 -

2010-04-20 12:59:00 1929

翻译 五. 线程的同步

虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是

2010-04-19 19:31:00 520

文件压缩的库引用实现

文件压缩的库引用实现,

2014-09-04

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

高质量C++编程指南,主要介绍C++编程的一些规范和主要事项,是C++新手提高代码质量的有效参考。

2010-07-22

空空如也

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

TA关注的人

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