寫MFC程式過程中的BUG記錄
阿新 • • 發佈:2019-01-05
- 關於_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)
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();
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);
}
}