- 关于_WDIR *转 string
_WDIR* patt;
wstring ws(patt); _wchar转char
string str(ws.begin(), ws.end());
//参考链接:http://stackoverflow.com/questions/27720553/conversion-of-wchar-t-to-string
2.”ASSERT_VALID fails with NULL pointer”错误
原因:此错误是由于使用了一个未经初始化的指针导致。
由来:在项目中,我想通过判断某个指针是否为空来进行资源的释放。形式为if(point)
。但是这里却是有一个潜在的隐患,我们在VS中创建一个指针,当我们没有使用new进行内存分配时,VS会默认对指针赋予一个0xcdcdcd的值。所以当我们使用if(point)
来进行指针是否为空判断时,此表达式为真,因为0xcdcdcd大于0。if语句不能用于判断指针是否为空,只能判断真假。
3.LPCTSTR转CString, CString转string
CString str1;
LPCTSTR str2;
string str3;
//L to C
str1.Format(str2);
//C to S
str3 = str1.GetString();
4.主线程ID获取
http://dearymz.blog.163.com/blog/static/2056574201111021156160/
5.子对话框透明
a) 重载系统消息:WM_CTLCOLOR, 在此消息所关联的函数中写这么一行代码:return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
- 使png格式的图片透明,代码如下:
//param1: 图片的路径
void DrawImg(string path)
{
CImage img;
img.Load(path.c_str());
if (!img.IsNull())
{
if (img.GetBPP() == 32) //确认该图像包含Alpha通道
{
int i;
int j;
for (i = 0; i < img.GetWidth(); i++)
{
for (j = 0; j < img.GetHeight(); j++)
{
byte *pByte = (byte *)img.GetPixelAddress(i, j);
pByte[0] = pByte[0] * pByte[3] / 255;
pByte[1] = pByte[1] * pByte[3] / 255;
pByte[2] = pByte[2] * pByte[3] / 255;
}
}
}
CDC* pdc = this->GetDC();
img.Draw(pdc->m_hDC, m_rect);
img.Destroy();
ReleaseDC(pdc);
}
}