1. 程式人生 > >寫MFC程式過程中的BUG記錄

寫MFC程式過程中的BUG記錄

  1. 關於_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();

5.子對話方塊透明
a) 過載系統訊息:WM_CTLCOLOR, 在此訊息所關聯的函式中寫這麼一行程式碼:return (HBRUSH)GetStockObject(HOLLOW_BRUSH);

  1. 使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); } }