win32把位图在窗口显示出来C/C++ codeswitch (message){case WM_CREATE:{hBitmapLoadBitmap(hInstance,
win32 把位图在窗口显示出来
- C/C++ code
switch (message) { case WM_CREATE: { hBitmap=LoadBitmap(hInstance," G://1.bmp"); cxSource=bitmap.bmWidth; cySource=bitmap.bmheight; break; } case WM_SIZE: cxClient=LOWORD(lParam); cyClient=LOWORD(lParam); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... hdcMem = CreateCompatibleDC (hdc) ; SelectObject (hdcMem, hBitmap) ; for (y = 0 ; y < cyClient ; y += cySource) for (x = 0 ; x < cxClient ; x += cxSource) { BitBlt (hdc, x, y, cxSource, cySource, hdcMem, 0, 0, SRCCOPY) ; } DeleteDC (hdcMem) ; EndPaint(hWnd, &ps); break;各位大大,小弟初学windows编程,位图操作按上面的代码,结果显示出来的是空白窗口,请各位大大帮忙找找原因!
[解决办法]
1. 首先要确保LoadBitmap是执行成功的,应该判断下。
2. 参考下http://blog.csdn.net/joeblackzqq/article/details/7267873
- C/C++ code
BOOL DrawPic(HWND hWnd) // 在指定的控件上画图 { CImage img; if(SUCCEEDED(img.Load(imgPath))) { CWnd *pWnd = CWnd::FromHandle(hWnd); CPaintDC dc(pWnd); // dc必须用指定的控件窗口来初始化,否则将看不到绘图结果 CRect rect; pWnd->GetClientRect(rect); // 获取控件的大小 img.Draw(dc.m_hDC, rect); return TRUE; } return FALSE; // 绘图失败 }
[解决办法]
补充:
1.CImage在VC6中是没有的,在高版本中才有。
2.imgPath是我的全局变量,是图片的绝对路径。
3.hWnd是控件的句柄. 