C++
红色代码
Debug The World
展开
-
VARIANT 传递字符串数组
TCHAR* strArray[2] = {_T("Hello"),_T("World")}; int arraySize = sizeof(strArray) / sizeof(strArray[0]); //创建 VARIANT vtArray; VariantInit(&vtArray); vtArray.vt = VT_ARRAY | VT_VARIANT; vtArray.parray = SafeArrayCreateVecto...原创 2022-04-12 10:23:35 · 686 阅读 · 0 评论 -
WTL设置工具栏按钮不同大小和文字
CToolBarCtrl aToolBar=m_hWndToolBar; TBBUTTONINFO btnInfo={0}; btnInfo.cbSize=sizeof(TBBUTTONINFO); btnInfo.dwMask=TBIF_LPARAM|TBIF_BYINDEX|TBIF_SIZE|TBIF_TEXT; //必须指定TBIF_LPARAM aToolBar...原创 2013-10-12 01:06:35 · 2321 阅读 · 0 评论 -
WTL自绘CListViewCtrl
//自绘的控件从CWindowImpl和COwnerDraw 继承class CListViewCtrlEx : public CWindowImpl<CListViewCtrlEx,CListViewCtrl>, public COwnerDraw<CListViewCtrlEx>void DrawItem(LPDRAWITEMSTRUCT /*lpDr...原创 2013-11-01 23:37:38 · 2486 阅读 · 0 评论 -
WTL自绘ClistViewCtrl 没有触发MeasureItem
// 自绘ClistViewCtrl,可以相应DrawItem消息,但是却相应不了MeasureItem,解决如下void CListEx::SetItemHeight(UINT nHeight){m_uItemHeight = uHeight; WINDOWPOS wp; wp.hwnd = m_hWnd; wp.flags = SWP_N...原创 2013-11-06 00:56:01 · 1219 阅读 · 0 评论 -
让WTL支持CString和CRect,CPoint等类
// 在Stdafx.h 中加入下面四句,像这个样子#define _WTL_NO_CSTRING#define _WTL_NO_WTYPES#include <atlstr.h>#include <atltypes.h>#include <atlbase.h>#include <atlapp.h>extern CAppModul...原创 2013-11-02 20:35:17 · 1973 阅读 · 0 评论 -
QMake 生成VS2013的工程文件
QT的bin目录加入到系统环境变量打开CMD,切换到源代码文件夹下,输入 qmake -project 生成.pro的QT工程文件再次输入 qmake -r -spec win32-msvc2013 -tp vc 即可生成2013的vcxproj工程文件...原创 2014-11-06 20:41:28 · 5478 阅读 · 1 评论 -
无法打开包括文件: corecrt.h: No such file or directory
INCLUDEPATH = "C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt"LIBS += -L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -L"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.1...原创 2017-04-28 01:59:24 · 14316 阅读 · 1 评论 -
HBITMAP另存为JPEG/PNG/TIFF/GIF/BMP
BOOL GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; UINT size = 0; GetImageEncodersSize(&num, &size); if(size == 0) r...原创 2014-07-28 18:05:13 · 3990 阅读 · 0 评论 -
A2W和W2A宏可能引起栈内存溢出
这两个宏使用alloca在栈上分配内存,退出生命周期后才会释放所占用的内存.所以在一个函数的循环体中使用A2W等字符转换宏可能引起栈溢出。真想在循环中使用的话,这个宏用单独的大括号包含起来,类似这样void fn() { while(true) { {DoSomething(A2W("SomeString"));} // 这个大括号的作原创 2016-04-11 10:16:08 · 3226 阅读 · 1 评论 -
C++中explicit关键字的作用
explicit用来防止由构造函数定义的隐式转换。要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。例如:转载 2014-08-17 15:02:16 · 744 阅读 · 0 评论 -
静态多态(模版模拟多态)的讨论
说到面向对象特性之一“多态”,以我的水平已经说不出太多新意了。相信很多程序员代码K多了,做梦都在“多态中”运行着。常规的多态是C++语义内置支持的一种特性,通过虚函数可以实现这个特性,为了后面以示区别,我们姑且把这种多态称为“动态多态”或”运行期多态“,而本文总主要想讨论下“静态多态”,也可以叫“编译期多态”,同时一起来看下,静态多态会给我们带来哪些惊喜之处,拭目以待吧。 首先看个正常转载 2014-08-18 12:30:45 · 904 阅读 · 0 评论 -
STL算法之remove要注意的地方。以及迭代时如何正确的删除迭代器
std::array intArray = {1, 2, 3, 4, 5, 6}; std::vector intVector; for(auto& i : intArray) intVector.push_back(i); cout << "intVector Size=" << intVector.size() << endl; intVe原创 2014-07-02 16:23:34 · 1967 阅读 · 0 评论 -
赋值操作符
默认的赋值操作符用于处理同类对象之间的赋值,不要与复制构造函数混淆.如果是创建新的对象,则调用复制(拷贝)构造函数,如果是修改已有对象的值,则调用赋值操作符MyClass aClass;MyClass bClass=aClass; // 调用复制构造函数MyClass cClass;cClass=aClass; // 调用赋值操作符一般来说,如果需要显式定义复制构造函数,则基于原创 2014-06-24 23:27:37 · 936 阅读 · 0 评论 -
复制(拷贝)构造函数
复制(拷贝)构造函数接受其所属类的对象作为参数,原型如下 MyClass::MyClass(const MyClass& aClass);在下述情况下,将使用复制(拷贝)构造函数1 将新的对象初始化为一个同类对象. MyClass aClass;MyClass bClass(aClass);2 按值将对象传递给函数. void MyFunction(MyClass aClass);3 函数原创 2014-06-24 23:19:52 · 835 阅读 · 0 评论 -
C++转换函数
在C++中,可以利用构造函数将一个int型变量转换为一个类对象,如CMyClass aClass(5);有人便会问,可以进行相反的转换吗?例如将一个类对象转换为一个int值, int nTemp=aClass;C++可以实现这一需求.但不是构造函数.构造函数只能用于某种类型到类类型的转换.要进行相反的转换,则需要使用重载操作符函数--转换函数来实现.转换函数是用户定义的强制类型原创 2014-06-24 22:54:20 · 1586 阅读 · 0 评论 -
C++默认构造函数
默认构造函数要么没有参数,要么所有参数都有默认值,如果没有定义任何构造函数,编译器将自动生成一个不带任何参数的构造函数,让程序猿能创建对象.自动生成的默认构造函数的另一项功能是:调用基类的默认构造函数以及调用本身是对象的成员所属类的默认构造函数.如果派生类构造函数的成员初始化列表没有显示的调用基类构造函数,则编译器将使用基类的默认构造函数来构造派生类对象的基类部分.在这种情况下,如果基原创 2014-06-24 23:10:53 · 900 阅读 · 0 评论