请教大家一个问题,要在我的子窗口控件中贴一张图片,为什么没贴上?下面是代码
case WM_PAINT:
hdc = BeginPaint (p->WndMyButtons0, &Paint) ;
hBitmap = LoadBitmap(p->Win.Module,TEXT( "sun.bmp"));
GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;
cxBitmap = bitmap.bmWidth ;
cyBitmap = bitmap.bmHeight ;
hMemDC = CreateCompatibleDC(hdc);
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
BitBlt (hdc, 0, 0, cxBitmap, cyBitmap,
hMemDC, 0, 0, SRCCOPY) ;
SelectObject(hMemDC,hOldBitmap);
DeleteDC (hdc) ;
DeleteDC (hMemDC) ;
EndPaint (p->WndMyButtons0, &Paint) ;
return 0;
case WM_DESTROY:
DeleteObject (hBitmap) ;
DeleteObject (hOldBitmap) ;
PostQuitMessage (0) ;
return 0 ;
我是BS_OWNERDRAW属性的,这个应该没问题吧?下面是创建窗口的全部代码.
WNDCLASS WinClass; memset(&WinClass,0,sizeof(WinClass));
WinClass.style = CS_HREDRAW | CS_VREDRAW;
WinClass.lpfnWndProc = (WNDPROC) MyButtonsProc0;
WinClass.cbClsExtra = 0;
WinClass.cbWndExtra = 0;
WinClass.hInstance = p->Win.Module;
WinClass.hCursor = WinCursorArrow();
WinClass.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
WinClass.lpszMenuName = 0;
WinClass.lpszClassName = T("MyButtonBar");
RegisterClass(&WinClass);
p->WndMyButtons0 = CreateWindowEx(
0,
WinClass.lpszClassName,
T("MyButton"),
WS_CHILD | WS_VISIBLE |BS_OWNERDRAW,
// 10, 22,
// 30, 30,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
p->Win.Wnd,
NULL,//(HMENU) ,
p->Win.Module,
NULL
);
改成
DeleteDC (hBitmap) ;
试试看
上面这句出问题的可能性比较大. 建议用较一般的写法"
CBitmap bitmap;
bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
你先把位图导入资源后,试试
g_skin_bmp = (HBITMAP)LoadImage(hInstance,MAKEINTRESOURCE(IDB_skin),IMAGE_BITMAP,0,0,0);if(g_skin_bmp==NULL) return false;case WM_PAINT:{ hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... //<-绘制皮肤-------------------------------------------------------> HDC hSrcDC = CreateCompatibleDC(NULL); SelectObject(hSrcDC,g_skin_bmp); BitBlt(hdc, 0, 0, g_nBmpW, g_nBmpH, hSrcDC, 0, 0, SRCCOPY); DeleteDC(hSrcDC); //<----------------------------------------------------------------> EndPaint(hWnd, &ps); break;}
用这句就可以了
hBitmap = LoadBitmap(((LPCREATESTRUCT) lParam)->hInstance, MAKEINTRESOURCE(IDB_PINERY1));