1、使用OnEraseBkgnd函數實現對話框位圖背景
BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);
CBitmap m_pBmp;
BITMAP bm;
CDC dcMem;
m_pBmp.LoadBitmap(IDB_BITMAP1);
m_pBmp.GetBitmap(&bm);//得到位圖尺寸
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp);
pDC->SetStretchBltMode(COLORONCOLOR);//這個模式不設置的話會導致圖片嚴重失真
pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),
&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
return TRUE;
}

好多新手都不知道OnEraseBkgnd這個函數在對話框里是怎么添加的,有手工自己寫和系統添加兩種方式,具體使用方法見《VC對話框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函數)》到這里就可以實現位圖了,但STATIC控件背景不透明,顯得很難看。
到這里其實就可以了,BMP的圖片背景實現了,文本框的透明也實現了。
3、補充說明:如果程序運行過程中,需要設置文本框的字體的話,會出現顯示"字體重疊不刷新"的問題

4、這就要對該控件或者對話框處理了,要刷出新字體來。
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText("guohaiyang.blog.163.com");//需要修改的控件標題
//這里可以刷整個對話框,但如果較頻繁的話,很明顯能看出來,就選擇刷顯示字體的那塊區域就可以了
pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);
好了,沒有問題了,剩下隨便你玩吧,這個解決方法不像網上說的,非要借用人家的自己寫的函數,現在完全用VC提供的就可以了,免得加這個那個的頭文件
