建立一个应用程序,想为弹出的对话框设置背景图片,代码如下:
case WM_ERASEBKGND:
{
HDC hdc = GetDC(hDlg);
HDC hDCMem = CreateCompatibleDC(hdc);
HBITMAP hbm;
HBITMAP hbmpOld;
hbm=LoadBitmap(NULL, MAKEINTRESOURCE(IDB_BITMAP_TEST));
hbmpOld = (HBITMAP)SelectObject(hDCMem,hbm);
BitBlt(hdc, 0, 0, 200,200, hDCMem, 0, 0, SRCCOPY);
SelectObject(hDCMem,hbmpOld);
DeleteDC(hDCMem);
return TRUE;
}
结果:只出现透明的对话框,但是背景图片并不显示,不知哪儿有问题?
你还没有在初始化的地方把图片贴进去啊。。。。
ERASEBKGND是擦除背景的。
要在OnInitDialog里对背景初始化。
不用LoadBitmap, 用(HBITMAP)LoadImage (AfxGetInstanceHandle(), szFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);
試試看。
利用LoadImag也一样的结果.要在OnInitDialog里对背景初始化,怎么初始化?
HDC hdc = GetDC(hDlg);
HDC hDCMem = CreateCompatibleDC(hdc);
HBITMAP hbm;
HBITMAP hbmpOld;
hbm=LoadBitmap(NULL, MAKEINTRESOURCE(IDB_BITMAP_TEST));
hbmpOld = (HBITMAP)SelectObject(hDCMem,hbm);
BitBlt(hdc, 0, 0, 200,200, hDCMem, 0, 0, SRCCOPY);
SelectObject(hDCMem,hbmpOld);
DeleteDC(hDCMem);
贴图的代码放到 onpaint中就行了。
CreateCompatibleDC(hdc);//这里指定一下大小,如果把整个copy过来把大小设置和图片一样大
在INTDIALOG()中初始化背景先,初始化就是先贴上背景图,
OnInitDialog() 把HIBITMAP dc 都建立起来 然后在OnPaint()里面 Bitblt();