ZBLOG

怎么通过句柄给窗口设置图片,并且后面不要让这张图片被刷新掉

要通过句柄给窗口设置图片,并确保该图片不会被刷新掉,可以使用窗口的WM_PAINT消息来绘制图像。

下面是一个示例代码,展示如何在窗口中绘制一张静态图片:

  1. #include <windows.h>
  2. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  3. int main()
  4. {
  5. // 创建窗口类注册
  6. WNDCLASSEX wc = { 0 };
  7. wc.cbSize = sizeof(WNDCLASSEX);
  8. wc.style = CS_HREDRAW | CS_VREDRAW;
  9. wc.lpfnWndProc = WindowProc;
  10. wc.hInstance = GetModuleHandle(NULL);
  11. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  12. wc.lpszClassName = L"MyWindowClass";
  13. RegisterClassEx(&wc);
  14. // 创建窗口
  15. HWND hwnd = CreateWindowEx(
  16. 0,
  17. L"MyWindowClass",
  18. L"窗口标题",
  19. WS_OVERLAPPEDWINDOW,
  20. CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  21. NULL,
  22. NULL,
  23. GetModuleHandle(NULL),
  24. NULL
  25. );
  26. if (hwnd == NULL)
  27. return 0;
  28. // 显示窗口
  29. ShowWindow(hwnd, SW_SHOWDEFAULT);
  30. UpdateWindow(hwnd);
  31. // 消息循环
  32. MSG msg;
  33. while (GetMessage(&msg, nullptr, 0, 0))
  34. {
  35. TranslateMessage(&msg);
  36. DispatchMessage(&msg);
  37. }
  38. return static_cast<int>(msg.wParam);
  39. }
  40. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  41. {
  42. switch (uMsg)
  43. {
  44. case WM_PAINT:
  45. {
  46. PAINTSTRUCT ps;
  47. HDC hdc = BeginPaint(hwnd, &ps);
  48. // 在绘制区域绘制图片
  49. HBITMAP hBitmap = static_cast<HBITMAP>(LoadImage(NULL,
  50. L"path_to_image_file.bmp",
  51. IMAGE_BITMAP,
  52. 0, 0,
  53. LR_LOADFROMFILE));
  54. if (hBitmap != NULL)
  55. {
  56. HDC hdcMem = CreateCompatibleDC(hdc);
  57. HGDIOBJ hOldBitmap = SelectObject(hdcMem, hBitmap);
  58. // 获取图片的尺寸
  59. BITMAP bm;
  60. GetObject(hBitmap, sizeof(bm), &bm);
  61. int width = bm.bmWidth;
  62. int height = bm.bmHeight;
  63. // 将图片绘制到窗口客户区
  64. BitBlt(hdc, 0, 0, width, height, hdcMem, 0, 0, SRCCOPY);
  65. // 清理资源
  66. SelectObject(hdcMem, hOldBitmap);
  67. DeleteDC(hdcMem);
  68. }
  69. EndPaint(hwnd, &ps);
  70. break;
  71. }
  72. case WM_DESTROY:
  73. PostQuitMessage(0);
  74. break;
  75. default:
  76. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  77. }
  78. return 0;
  79. }

在上述代码中,我们使用WM_PAINT消息来处理窗口的绘制事件。当收到该消息时,我们在窗口的客户区域绘制一张指定路径的位图(.bmp)。

你需要将 L"path_to_image_file.bmp" 替换为实际的图片文件路径。

通过以上代码,在窗口创建后,图片将会被绘制到窗口的客户区域,并且不会被刷新掉。在窗口重绘时,WM_PAINT消息会再次触发绘制操作,确保图像的持久显示。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13737

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?