loadbitmapW()
场景:LoadBitmapW(IDB_BITMAP_BACKGROUND) 和CreateCompatibleBitmap报错解决方案
LoadBitmapW(IDB_BITMAP_BACKGROUND) 和CreateCompatibleBitmap报错
int a, b, c,x,y,y1,x1,x2;
CString str,str1,str2;
CString astr;
CClientDC dc(this);
CRect rectClient;
GetClientRect(rectClient);
CBitmap bmp;
GetWindowRect(&rectClient);
bmp.LoadBitmapW(IDB_BITMAP_BACKGROUND);//IDB_BITMAP_BACKGROUND为背景图片
bmp.CreateCompatibleBitmap(&dc,GetSystemMetrics(SM_CXSCREEN)*2,GetSystemMetrics(SM_CYSCREEN)*2);
CDC dcBmp;
dcBmp.CreateCompatibleDC(&dc);
CBitmap* pOldBmp = dcBmp.SelectObject(&bmp);
TEXTMETRIC tm;
dcBmp.GetTextMetrics(&tm);
a = 255; b = 0; c = 0;
dcBmp.SetTextColor(RGB(a, b, c));
CFont font;
VERIFY(font.CreatePointFont(400, _T("黑体"), &dcBmp));//创建字体 Arial格式 400为字高
dcBmp.SelectObject(&font); //选择该字体进入PDC
dcBmp.SetTextAlign( TA_BASELINE | TA_CENTER );
dcBmp.SetBkMode(TRANSPARENT);
x=rectClient.Width()/2;
y=rectClient.Height()*2/16;
str=_T("谢谢");
TCHAR * t = str.GetBuffer();
dcBmp.TextOutW(x,y,t);
dc.BitBlt(0,0,GetSystemMetrics(SM_CXSCREEN)*2,GetSystemMetrics(SM_CYSCREEN)*2, &dcBmp, 0,0,SRCCOPY); //将位图画到客户区上
dcBmp.SelectObject(pOldBmp);
现在程序运行到 bmp.LoadBitmapW(IDB_BITMAP_BACKGROUND);之后再运行bmp.CreateCompatibleBitmap(&dc,GetSystemMetrics(SM_CXSCREEN)*2,GetSystemMetrics(SM_CYSCREEN)*2);就会报错“Debug Assertion Failed!" File:f:\ftm\vctools\vc7libs\ship\atlmfc\src\mfc\wingdi.cpp Line:1157 这个问题都困扰我好几天了。麻烦哪位大侠帮小弟解决一下。在此先谢了。
------解决方案--------------------
LoadBitmapW(IDB_BITMAP_BACKGROUND) 和CreateCompatibleBitmap报错
int a, b, c,x,y,y1,x1,x2;
CString str,str1,str2;
CString astr;
CClientDC dc(this);
CRect rectClient;
GetClientRect(rectClient);
CBitmap bmp;
GetWindowRect(&rectClient);
bmp.LoadBitmapW(IDB_BITMAP_BACKGROUND);//IDB_BITMAP_BACKGROUND为背景图片
bmp.CreateCompatibleBitmap(&dc,GetSystemMetrics(SM_CXSCREEN)*2,GetSystemMetrics(SM_CYSCREEN)*2);
CDC dcBmp;
dcBmp.CreateCompatibleDC(&dc);
CBitmap* pOldBmp = dcBmp.SelectObject(&bmp);
TEXTMETRIC tm;
dcBmp.GetTextMetrics(&tm);
a = 255; b = 0; c = 0;
dcBmp.SetTextColor(RGB(a, b, c));
CFont font;
VERIFY(font.CreatePointFont(400, _T("黑体"), &dcBmp));//创建字体 Arial格式 400为字高
dcBmp.SelectObject(&font); //选择该字体进入PDC
dcBmp.SetTextAlign( TA_BASELINE | TA_CENTER );
dcBmp.SetBkMode(TRANSPARENT);
x=rectClient.Width()/2;
y=rectClient.Height()*2/16;
str=_T("谢谢");
TCHAR * t = str.GetBuffer();
dcBmp.TextOutW(x,y,t);
dc.BitBlt(0,0,GetSystemMetrics(SM_CXSCREEN)*2,GetSystemMetrics(SM_CYSCREEN)*2, &dcBmp, 0,0,SRCCOPY); //将位图画到客户区上
dcBmp.SelectObject(pOldBmp);
现在程序运行到 bmp.LoadBitmapW(IDB_BITMAP_BACKGROUND);之后再运行bmp.CreateCompatibleBitmap(&dc,GetSystemMetrics(SM_CXSCREEN)*2,GetSystemMetrics(SM_CYSCREEN)*2);就会报错“Debug Assertion Failed!" File:f:\ftm\vctools\vc7libs\ship\atlmfc\src\mfc\wingdi.cpp Line:1157 这个问题都困扰我好几天了。麻烦哪位大侠帮小弟解决一下。在此先谢了。
------解决方案--------------------
- C/C++ code
CBitmap bmp1; CPaintDC dc(this); CDC memdc; memdc.CreateCompatibleDC(&dc); bmp1.CreateCompatibleBitmap(&memdc,20,20);
------解决方案--------------------
注意这时应为:bmp1.CreateCompatibleBitmap(&dcBmp,20,20);
------解决方案--------------------
你LoadBitmap以后怎么又CreateCompatibleBitmap呢?你这是在干什么?
LoadBitmap以后,你的HBITMAP就不为NULL了,所以后面的CreateCompatibleBitmap就错了。
------解决方案--------------------
按照3楼的,可以通过编译并运行。
但是不知道你的代码要完成什么功能?
另外,这个时候你要看看是不是函数没有用对,也就是说传入的参数以及前提条件是不是都对。
------解决方案--------------------
bmp1.CreateCompatibleBitmap(&memdc,20,20);这句放在dcBmp.CreateCompatibleDC(&dc);