8Windows_paint2_bimap 位图

  1. #include <windows.h>
  2. #include <iostream>
  3. #include "resource1.h"
  4. //宏定义输出函数
  5. #define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL);
  6. HINSTANCE g_hInst;
  7. HANDLE g_hStdout = NULL;
  8. CHAR szText[256] = { 0 };
  9. //DrawBmp
  10. void DrawBmp(HDC hDC)
  11. {
  12. //加载位图
  13. HBITMAP hBMap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BALL01));
  14. //获取位图相关信息。。。新增加,对应笔记里的第8条
  15. BITMAP bmpInfo = { 0 };
  16. GetObject(hBMap, sizeof(bmpInfo), &bmpInfo); //得到一个BITMAP结构体的数据,就可以直接使用得到bmpInfo.bmWidth
  17. //创建放置位图的DC
  18. HDC hBmpDC = CreateCompatibleDC(hDC);
  19. //将位图放入创建的hBmpDC中
  20. HBITMAP hOldBmp = (HBITMAP)SelectObject(hBmpDC, hBMap);
  21. //绘制位图 BitBlt
  22. BitBlt(hDC, 100, 100, 48, 48, hBmpDC, 0, 0, SRCCOPY);
  23. //拉伸绘制位图 StretchBlt
  24. StretchBlt(hDC, 200, 100, 200, 200, hBmpDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY); //拉伸方式绘制
  25. //取出位图
  26. SelectObject(hBmpDC, hOldBmp);
  27. //删除DC
  28. DeleteDC(hBmpDC);
  29. //删除位图
  30. DeleteObject(hBMap);
  31. }
  32. //OnPaint
  33. void OnPaint(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  34. {
  35. PAINTSTRUCT ps = { 0 };
  36. HDC hDC = BeginPaint(hWnd, &ps);
  37. DrawBmp(hDC);
  38. EndPaint(hWnd, &ps);
  39. }
  40. //OnCommand
  41. void OnCommand(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  42. {
  43. int hMenuID = LOWORD(wParam);
  44. switch (hMenuID)
  45. {
  46. case ID_EXIT:
  47. PostQuitMessage(0);
  48. break;
  49. }
  50. }
  51. LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  52. {
  53. switch (nMsg)
  54. {
  55. case WM_PAINT:
  56. OnPaint(hWnd, nMsg, wParam, lParam);
  57. break;
  58. case WM_COMMAND:
  59. OnCommand(hWnd, nMsg, wParam, lParam);
  60. break;
  61. case WM_DESTROY:
  62. PostQuitMessage(0);
  63. break;
  64. }
  65. return DefWindowProc(hWnd, nMsg, wParam, lParam);
  66. }
  67. BOOL RegisterWnd(LPSTR pszClassName)
  68. {
  69. WNDCLASSEX wce = { 0 };
  70. wce.cbSize = sizeof(wce);
  71. wce.cbClsExtra = 0;
  72. wce.cbWndExtra = 0;
  73. wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  74. wce.hCursor = NULL;
  75. wce.hIcon = NULL;
  76. wce.hIconSm = NULL;
  77. wce.hInstance = g_hInst;
  78. wce.lpfnWndProc = WndProc;
  79. wce.lpszClassName = pszClassName;
  80. wce.lpszMenuName = NULL;
  81. wce.style = CS_VREDRAW | CS_HREDRAW;
  82. ATOM aTom = RegisterClassEx(&wce);
  83. if (aTom == 0)
  84. {
  85. return FALSE;
  86. }
  87. else
  88. {
  89. return TRUE;
  90. }
  91. }
  92. HWND CreateWnd(LPSTR pszClassName)
  93. {
  94. //加入菜单
  95. HMENU hMainMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MAIN));
  96. HWND hWnd = CreateWindowEx(0, pszClassName, "风火中原", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  97. NULL, hMainMenu, g_hInst, NULL);
  98. return hWnd;
  99. }
  100. void showWnd(HWND hWnd)
  101. {
  102. ShowWindow(hWnd, SW_SHOW);
  103. UpdateWindow(hWnd);
  104. }
  105. void msg()
  106. {
  107. MSG msg = { 0 };
  108. while (GetMessage(&msg, NULL, 0, 0))
  109. {
  110. TranslateMessage(&msg);
  111. DispatchMessage(&msg);
  112. }
  113. }
  114. //控制台
  115. void ConsoleWnd()
  116. {
  117. AllocConsole();
  118. g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  119. CHAR szText[] = "Debug start:\n";
  120. PrintLog(szText);
  121. }
  122. int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
  123. {
  124. g_hInst = hInstance;
  125. ConsoleWnd();
  126. RegisterWnd("OOOO");
  127. HWND hWnd = CreateWnd("OOOO");
  128. showWnd(hWnd);
  129. msg();
  130. return 0;
  131. }





posted @ 2016-06-10 08:17  -刀狂剑痴-  阅读(183)  评论(0编辑  收藏  举报