c++
文章平均质量分 79
jnpher
软件工程的初学者!什么都不懂的小混混!
展开
-
this 指针
一下内容来自深入浅出mfc(侯捷)this 指针 刚刚我才说过,两个矩形对象rect1 和rect2 各有自己的m_color 成员变量,但rect1.setcolor 和rect2.setcolor却都通往唯一的 CRect::setcolor成 员 函 数 。 那么CRect::setcolor如何处理不同对象中的m_color?答案是:成员函数有一个隐藏参数,名为this指翻译 2012-10-17 15:22:44 · 453 阅读 · 0 评论 -
一些API函数(Console居多)Console API
Console API 可以取代 stdio以下是一些API函数:FillConsoleOutputAttribute API 将属性写入屏幕缓冲区 FillConsoleOutputCharacter API 将字符写入屏幕缓冲区 FlushConsoleInputBuffer API 清除控制台输入缓冲区 FlushFileBuffers API 清除文件缓冲区 FreeC...原创 2012-10-17 14:28:18 · 2497 阅读 · 0 评论 -
异步消息的传递-回调机制
1 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的转载 2012-10-17 15:23:25 · 694 阅读 · 0 评论 -
Callback 函数
说明:此文章出自《深入浅出mfc》第6章的“Callback 函数”Callback 函数 Hello的OnPaint在程序收到 WM_PAINT之后开始运作。为了让"Hello, MFC" 字样从天而降并有动画效果,程序采用LineDDA API 函数。我的目的一方面是为了示范消息的处理,一方面也为了示范 MFC 程序如何调用 Windows API 函数。许多人可能不熟悉Lin...原创 2012-10-17 15:56:10 · 1124 阅读 · 0 评论 -
静态成员(变量与函数)
注:一下来自侯捷著《深入浅出mfc 第二版》静态成员(变量与函数) 我想你已经很清楚了,如果你依据一个类产生出三个对象,每一个对象将各有一份成员变量。有时候这并不是你要的。假设你有一个类,专门用来处理存款账户,它至少应该要有存户的姓名、地址、存款额、利率等成员变量:class SavingAccount{private:char m_name[40]; // 存户姓名...原创 2012-10-17 15:31:07 · 523 阅读 · 0 评论 -
string、wstring、cstring、 char、 tchar、int、dword转换方法
string、wstring、cstring、 char、 tchar、int、dword转换方法最近编程一直头痛这集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结一下。以备以后方便使用,当然有些方法可能不是最新的,或者最简单的,但是对于自己已经了解的使用起来应该方便的多: 1》string转wstringwstring s2ws(con...原创 2012-10-27 20:14:40 · 732 阅读 · 0 评论 -
mouse_event
简介函数功能:该函数综合鼠标击键和鼠标动作。 VOID mouse_event( DWORD dwFlags, // motion and click options DWORD dx, // horizontal position or change DWORD dy, // vertical position or change DWORD dwData, /...原创 2012-10-24 12:38:10 · 1380 阅读 · 0 评论 -
FormatMessage
FormatMessage的用法 根据一个错误码返回一个错误讯息DWORD FormatMessage( DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list* Arguments ...原创 2012-10-24 21:36:44 · 1656 阅读 · 0 评论 -
string和wstring相互转换
第1种方法:采用ATL封装_bstr_t的过渡:(注,_bstr_是Microsoft Specific的,所以下面代码可以在VS2005通过,无移植性);#include <string>#include <comutil.h>using namespace std;#pragma comment(lib, "comsuppw.lib")string ws2s(...原创 2012-10-27 21:15:54 · 829 阅读 · 0 评论 -
c++回调函数 callback
C++中实现回调机制的几种方式(1)Callback方式Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一...原创 2012-12-05 23:03:19 · 51471 阅读 · 4 评论 -
c++ 高低位例子
#include <stdio.h>#include <windows.h>main(){DWORD a=0x12345678;char * a1=(char *)&a;char b[4];b[0]=(*a1);b[1]=*(a1+1);b[2]=*(a1+2);b[3]=*(a1+3);printf("%0x %0x %0x %0x\n",b...原创 2012-12-26 16:55:07 · 2215 阅读 · 0 评论 -
C++四种cast操作符
C 风格(C-style)强制转型如下:(T) expression 或T(expression) //函数风格(Function-style)两种形式之间没有本质上的不同。对于具有转换的简单类型而言C 风格转型工作得很好。然而,这样的转换符也能不分皂白地应用于类(class)和类的指针。ANSI-C++标准定义了四个新的转换符:reinterpret_cast, sta...原创 2013-01-04 09:42:59 · 572 阅读 · 0 评论 -
Overlapped I/O 学习
1、Overlapped I/O 的含义Overlapped I/O 是WIN32的一项技术,可以让操作系统进行I/O操作而不阻塞的程序执行,并且I/O操作完成时通知程序。事实上Overlapped I/O操作系统最终是以线程的方式实现。2、使用Overlapped I/OWindows中通过CreateFile来打开各种资源。如:文件、串口、并口、Name pipes、Co...原创 2012-09-26 22:45:29 · 1762 阅读 · 0 评论 -
c++ 中的重载全局new,delete
最近做一个小项目,对c++又有很多新的理解。实在不的不让人发出感叹,c++太强大了,绝对不是一朝一夕就可以领悟她的内涵的。 首先我们要清楚,为什么我们要重载new,和delete了?这还不是指针造成的,确实指针是一件让人喜欢的东西,用起来如此让人喜欢,让人顺手。然而小程序我们完全可以避免内存泄露问题,大程序就不那么容易了,然而我们有一种特别好的方法可以跟踪我们new,和delete动...原创 2013-01-05 15:28:14 · 592 阅读 · 0 评论 -
内联(inline)函数与虚函数(virtual)的讨论
内联(inline)函数与虚函数(virtual)的讨论函数的inline属性是在编译时确定的, 然而,virtual的性质是在运行时确定的,这两个不能同时存在,只能有一个选择,文件中的inline关键字只是对编译器的建议,编译器是否采纳是编译器的事情。 1. 内联函数是个静态行为,而虚函数是个动态行为,他们之间是有矛盾的。2. 我们之所以能看到...原创 2013-01-18 11:04:56 · 712 阅读 · 0 评论 -
C++ 得到成员变量的偏移值
#include <iostream>#define GET(A,m) (int)(&((A*)0)->m);using namespace std;struct A{int a;//4char b[3];//4int d;//4int c;};int main(int argc, char *argv[]){//-----------------...原创 2013-03-24 17:00:31 · 2257 阅读 · 0 评论 -
unity3d 笔记
public void doo(){transform.Translate();//设置游戏对象平移方向transform.Rotate();//绕自身旋转Vector3.forward;//移动方向为前方Vector3.up;//自身方向为y轴Time.deltaTime;//一帧持续时间GUI.backgroundColor=Color.red;//设置GUI背景颜色GUI.co...原创 2013-03-25 12:01:59 · 1068 阅读 · 0 评论 -
new A与new A();
解释以下语句的含义: 1、new A; 2、new A(); 对于new A和 new A() 的区别,我们可以得出下面的结论: 1、类体含有显示适合地默认构造函数时,new A和new A()的作用一致,都是首先调用operator new分配内存,然后调用默认构造函数初始化对象。 2、类体无显示构造函数时,new ...原创 2013-04-12 09:21:56 · 1590 阅读 · 0 评论 -
CRectTracker 使用方法
CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类。你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用。如何通过编程来实现这种功能呢?这就是CRectTracker类的作用; (框选) (显示边界并可以缩放)你打开上面的那个工程文件,编译运行一下转载 2013-05-05 12:45:08 · 1274 阅读 · 0 评论 -
GDI 闪烁消除 双缓冲(Double buffer)
如果你真正实现动画的话,你会发现画面一闪一闪的,十分的不爽。 很多人都会怪到GDI头上,他们又会骂MS,说GDI太慢了。其实非也(不是指MS不该骂,呵呵),任何直接写屏幕的操作都会产生闪烁,在DOS下 直接写显存或者用DirectDraw API直接写Primary Surface都会闪烁,因为你每个更新显示的操作都会被用户马上看到(因为垂直回扫的原因, 或许会有延迟)。 消除闪...原创 2013-05-09 10:37:06 · 1492 阅读 · 0 评论 -
c++/c 获取cpp文件行号跟文件名
编译器内置宏:先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。ANSI C标准中有几个标准预定义宏(也是常用的):__LINE__:在源代码中插入当前源代码行号;__FILE__:在源文件中插入当前源文件名;__DATE__:在源文件中插入当前的编译日期__TIME__:在源文件中插入当前编译时...原创 2013-06-17 16:06:45 · 9293 阅读 · 0 评论 -
c++ 给枚举类型设置基础类型
C++里是枚举类型名后加个冒号再加基础类型enum Test:byte{ a,b,c }; 当然int好,比byte/short快。但是这样一来就可以设置自己想要的任何枚举基础类型的!(请注意:此任何只是c++的基础类型哦,用户自定义类型是不能的,也就是跟temple里的参数传递类似的类型(缺少typename 与 class ))(说这么多其实就是 浮点类型一下的类...原创 2013-09-02 15:40:54 · 1738 阅读 · 0 评论 -
c++/c/java 资源共享群
Hi,我邀请你加入360云盘文件共享群:编程爱好,打开邀请链接:http://qun.yunpan.360.cn/10005202 ,输入邀请码:1357 获取更多帮主请关注小程序原创 2013-09-10 14:19:32 · 1723 阅读 · 0 评论 -
Boost::tuple
引领Boost(三)(Boost::tuple)Boost::tuple一 Boost::tuple 很多的时候我们经常需要为我们的函数返回多个值,一般的做法是通过传入非常量的指针或引用,但是这样的话可能可读性就要差一些,使用者可能需要确切的文档才能确定到底哪个是返回值,为了更好的可读性,我们可以使用class或struct来封装我们要返回的多个值,然后返回封装struc转载 2013-10-12 10:46:29 · 1794 阅读 · 0 评论 -
windows 操作系统 配置directshow sdk
下载DirectShow由于现在directShow没有和direcxtx一起发布,而是和windows sdk 打包发布了,可以到官网下载最新的windows sdk 开发包。windows sdk 地址:http://www.microsoft.com/download/en/details.aspx?id=8442按系统类型下载。GRMSDK_EN_DVD.iso x86GRMSDKIA...原创 2013-10-13 01:03:37 · 1494 阅读 · 0 评论 -
编写批处理文件编译.Net工程
使用随Visual Studio一块安装的devenv.com,再加上参数可以对.Net进行编译,如下 "D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com" d:\Projects\YourProject.csproj /rebuild "Release" "D:\Program Files (x86)...原创 2013-11-01 14:03:49 · 2340 阅读 · 0 评论 -
Boost智能指针——weak_ptr
Boost智能指针——weak_ptr循环引用:引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下:#include #include #include #include class parent;class children;typedef boost::shared_ptr parent_转载 2013-11-28 12:53:37 · 523 阅读 · 0 评论 -
在MFC程序中增加控制台
MFC程序中,如果想要输出调试信息,我们一般都是TRACE或者使用LOG文件,都不是很方便,第一个需要我们在调试状态下,第二个也要配置麻烦而且不直观。而使用Console来显示调试信息应该是更好的选择。下面介绍几种在MFC程序中,使用控制台来输出调试信息。1. 我们可以自己创建一个命令行窗口,在主程序的初始化的时候调用AllocConsole()函数。相应的退出的时候调用FreeConsole...原创 2012-09-25 15:37:38 · 970 阅读 · 0 评论 -
WinDbg分析DMP文件方法完全攻略
前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010远程调试的方法,请参考http://blog.sina.com.cn/s/blog_a459dc转载 2013-12-04 17:59:55 · 4775 阅读 · 0 评论 -
std::tr1::function
std::tr1::function在C++的TR1中(Technology Report)中包含一个function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时。可以参考Scott Meyers. >. Item 35.下面具体说明其使用方法。一、指向全局函数或静态成员函数时因为在本质上讲全局函数转载 2013-12-04 16:15:33 · 680 阅读 · 0 评论 -
生成dmp的程序方法
1、生成dmp的程序#include dbghelp.h> #pragma comment(lib, "dbghelp.lib")//设置异常处理回调函数SetUnhandledExceptionFilter(UnhandledExceptionFilter);//异常处理代码//EXCEPTION_EXECUTE_HANDLER equ 1 表示我转载 2013-12-04 17:44:09 · 5345 阅读 · 0 评论 -
sizeof的内幕
0. 前向声明sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,那么这篇文章对你或许有所帮助。菜鸟我对C++的掌握尚未深入,转载 2013-12-13 10:53:54 · 665 阅读 · 0 评论 -
windows 禁用中文输入法
windows 程序禁用中文输入法方法:1、添加windows头文件及dll文件 //输入法相关#include <imm.h>#pragma comment (lib ,"imm32.lib")//---------------------------end 2、禁用: HIMC g_hIMC = NULL;//g_hIMC 用于恢复时使用...原创 2014-01-06 11:21:07 · 10388 阅读 · 2 评论 -
c++ 处理中文乱码
char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) ); setlocale( LC_CTYPE,"chs");//设置为中文。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。setlocale( LC_CTYPE, old_locale ); /原创 2014-01-09 16:57:27 · 8681 阅读 · 0 评论 -
程序结束后调用的函数 注册终止函数
相关函数:_exit, atexit, exit注册终止函数:1,on_exit头文件:#include <stdlib.h>定义函数:int on_exit(void (* function) (int void*), void *arg);函数说明:on_exit()用来设置一个程序正常结束前调用的函数. 当程序通过调用exit()或从main 中返回时, 参...原创 2014-01-16 18:02:03 · 1423 阅读 · 0 评论 -
boost 计时器精度扩展 progress_timer 计时器扩展 类模版
//---------------------xxj#include <boost/progress.hpp>template<int N = 2>class new_progress_timer : public boost::timer, private boost::noncopyable//:public boost::progress_timer{p...原创 2014-02-07 14:05:32 · 1250 阅读 · 0 评论 -
c++ 打印堆栈信息
void printStack( void ){ unsigned int i; void * stack[ 100 ]; unsigned short frames; SYMBOL_INFO * symbol; HANDLE process; process = GetCurrentProcess(); SymInitialize( p...原创 2014-02-21 08:47:34 · 9931 阅读 · 0 评论 -
c++ 复数控制向量旋转
std::complex 复数可以很方便的做旋转以下为实现: //待旋转的点坐标 (fRotationX,fRotationY)//中心点坐标 (fCenterX, fCenterY)//旋转角度void Rotation(float &fRotationX, float &fRotationY,float fCenterX, float fCente...原创 2014-02-11 15:37:44 · 3135 阅读 · 0 评论 -
C++ VC 开发3D风格按钮控件
主要是通过 Owner Draw 属性实现。1.运行 AppWizard 生成一个基于对话框的 test 工程,在对话框中加入一个 CButton 控件。在 CButton 控件的 General 属性页将控件的 ID 改为 IDC_3DTEXTBTN,Caption 改为“谁与争疯”,在控件 Styles 属性页选中 OwnerDraw,其余设置保持默认。2.用 类向导 创建一个新类:C...原创 2014-02-11 09:42:43 · 1966 阅读 · 0 评论 -
c++ 旋转算法 硬件加速
c++旋转算法:此算法主要优点在于采用先计算矩阵参数速查表来做硬件加速。首先要有个基础表其定义与声明如下: typedef struct tagAreaLookUpRecord { __int64 nFactQW0; __int64 nFactQW1; __int64 nFactQW2; __int64 nFactQW3; }AreaLookUpReco...原创 2014-01-27 18:02:02 · 2581 阅读 · 0 评论