如何在窗口上绘制图像?

我创build了一个窗口,使用Windows Vista上的C ++中的VS2005创build窗口()api

我的要求是在该窗口上绘制(任何格式的)图像。 我没有在这个应用程序中使用任何MFC。

请帮我一些代码片段。

不完全确定你的问题是什么:在窗体上画一个位图,或者你想知道如何处理各种图像格式,或者两者兼而有之。 反正下面是一个如何加载位图并在表单上绘制的例子:

HBITMAP hBitmap = NULL; LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch (message) { <...> case WM_CREATE: hBitmap = (HBITMAP)LoadImage(hInst, L"c:\\test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); break; case WM_PAINT: PAINTSTRUCT ps; HDC hdc; BITMAP bitmap; HDC hdcMem; HGDIOBJ oldBitmap; hdc = BeginPaint(hWnd, &ps); hdcMem = CreateCompatibleDC(hdc); oldBitmap = SelectObject(hdcMem, hBitmap); GetObject(hBitmap, sizeof(bitmap), &bitmap); BitBlt(hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY); SelectObject(hdcMem, oldBitmap); DeleteDC(hdcMem); EndPaint(hWnd, &ps); break; case WM_DESTROY: DeleteObject(hBitmap); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } 

LoadImage加载图标,光标,动画光标或位图。 详情在这里

要处理各种图像格式,您可以使用Windows图像处理组件(请参阅IWICBitmapDecoder )或此处的代码加载JPEG和GIF图片或第三方工具,如FreeImage或LeadTools

希望这有助于问候

 void LoadScreen(HWND hWnd) { RECT rect; HDC hdc = GetDC(hWnd); HBRUSH brush = CreatePatternBrush((HBITMAP)LoadImage(NULL, L"file.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)); GetWindowRect(hWnd, &rect); FillRect(hdc, &rect, brush); DeleteObject(brush); ReleaseDC(hWnd, hdc); }