VS中为对话框设置背景

zkissinger   2008-8-4 16:23 楼主
建立一个应用程序,想为弹出的对话框设置背景图片,代码如下:

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;
        }

结果:只出现透明的对话框,但是背景图片并不显示,不知哪儿有问题?

回复评论 (11)

你还没有在初始化的地方把图片贴进去啊。。。。
ERASEBKGND是擦除背景的。
要在OnInitDialog里对背景初始化。
点赞  2008-8-4 17:03
不用LoadBitmap, 用(HBITMAP)LoadImage (AfxGetInstanceHandle(), szFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);
試試看。
点赞  2008-8-4 20:26
利用LoadImag也一样的结果.要在OnInitDialog里对背景初始化,怎么初始化?
点赞  2008-8-5 09:10
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中就行了。
点赞  2008-8-5 09:38
CreateCompatibleDC(hdc);//这里指定一下大小,如果把整个copy过来把大小设置和图片一样大
点赞  2008-8-5 10:28
在WM_PAINT中添加也没结果,奇怪.
点赞  2008-8-5 13:36
为背景添加图像方法.
点赞  2008-9-2 14:17
很多方法的。还可以擦了背景然后贴背景。
点赞  2008-9-3 08:49
在INTDIALOG()中初始化背景先,初始化就是先贴上背景图,
点赞  2008-10-23 11:52
OnInitDialog() 把HIBITMAP dc 都建立起来 然后在OnPaint()里面 Bitblt();
点赞  2008-10-23 12:39
做个记号
点赞  2008-10-23 13:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复