静态控件背景透明

末蓝、 2021-09-22 08:50 554阅读 0赞

静态控件背景透明,能够完美的将字体显示到背景中去。
在实际应用中也是非常常用的。

赶紧拿去学习吧。。。。。。。。

主要代码:

  1. // TransparentWindow.cpp : Defines the entry point for the application.
  2. //
  3. /*
  4. // 静态控件背景透明化
  5. //By MoreWindows-(http://blog.csdn.net/MoreWindows)
  6. #include <windows.h>
  7. #include "resource.h"
  8. const char szDlgTitle[] = "静态控件背景透明化 MoreWindows-(http://blog.csdn.net/MoreWindows)";
  9. // 对话框消息处理函数
  10. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  11. int APIENTRY WinMain(HINSTANCE hInstance,
  12. HINSTANCE hPrevInstance,
  13. LPSTR lpCmdLine,
  14. int nCmdShow)
  15. {
  16. DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
  17. return 0;
  18. }
  19. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  20. {
  21. RECT rcDialog;
  22. HBITMAP hBitmap;
  23. static BITMAP s_bm;
  24. static HDC s_hdcMem;
  25. switch (message)
  26. {
  27. case WM_INITDIALOG:
  28. // 设置对话框标题
  29. SetWindowText(hDlg, szDlgTitle);
  30. // 设置对话框大小可调节
  31. SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);
  32. // 加载背影图片
  33. hBitmap = (HBITMAP)LoadImage(NULL, "006.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
  34. if (hBitmap == NULL)
  35. {
  36. MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
  37. exit(0);
  38. }
  39. else
  40. {
  41. // 将背影图片放入HDC - s_hdcMem
  42. HDC hdc;
  43. hdc = GetDC(hDlg);
  44. s_hdcMem = CreateCompatibleDC(hdc);
  45. SelectObject(s_hdcMem, hBitmap);
  46. ReleaseDC(hDlg, hdc);
  47. // 得到位图信息
  48. GetObject(hBitmap, sizeof(s_bm), &s_bm);
  49. }
  50. return 0;
  51. case WM_COMMAND:
  52. switch (LOWORD(wParam))
  53. {
  54. case IDCANCEL:
  55. DeleteDC(s_hdcMem);
  56. EndDialog(hDlg, LOWORD(wParam));
  57. return TRUE;
  58. }
  59. break;
  60. case WM_SIZE:
  61. InvalidateRect(hDlg, NULL, TRUE);
  62. return TRUE;
  63. case WM_CTLCOLORDLG:
  64. GetClientRect(hDlg, &rcDialog);
  65. //通过SetStretchBltMode的设置能使StretchBlt在缩放图像更加清晰
  66. SetStretchBltMode((HDC)wParam, COLORONCOLOR);
  67. StretchBlt((HDC)wParam, 0, 0, rcDialog.right, rcDialog.bottom, s_hdcMem, 0, 0, s_bm.bmWidth, s_bm.bmHeight, SRCCOPY);
  68. return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
  69. }
  70. return FALSE;
  71. }
  72. */
  73. // 静态控件背景透明化1 WM_CTLCOLORSTATIC中返回空画刷
  74. //By MoreWindows-(http://blog.csdn.net/MoreWindows)
  75. #include <windows.h>
  76. #include "resource.h"
  77. const char szDlgTitle[] = "静态控件背景透明化1 MoreWindows-(http://blog.csdn.net/MoreWindows)";
  78. // 对话框消息处理函数
  79. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  80. int APIENTRY WinMain(HINSTANCE hInstance,
  81. HINSTANCE hPrevInstance,
  82. LPSTR lpCmdLine,
  83. int nCmdShow)
  84. {
  85. DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
  86. return 0;
  87. }
  88. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  89. {
  90. RECT rcDialog;
  91. HBITMAP hBitmap;
  92. static BITMAP s_bm;
  93. static HDC s_hdcMem;
  94. switch (message)
  95. {
  96. case WM_INITDIALOG:
  97. // 设置对话框标题
  98. SetWindowText(hDlg, szDlgTitle);
  99. // 设置对话框大小可调节
  100. SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);
  101. // 加载背影图片
  102. hBitmap = (HBITMAP)LoadImage(NULL, "006.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
  103. if (hBitmap == NULL)
  104. {
  105. MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
  106. exit(0);
  107. }
  108. else
  109. {
  110. // 将背影图片放入HDC - s_hdcMem
  111. HDC hdc;
  112. hdc = GetDC(hDlg);
  113. s_hdcMem = CreateCompatibleDC(hdc);
  114. SelectObject(s_hdcMem, hBitmap);
  115. ReleaseDC(hDlg, hdc);
  116. // 得到位图信息
  117. GetObject(hBitmap, sizeof(s_bm), &s_bm);
  118. }
  119. return 0;
  120. case WM_COMMAND:
  121. switch (LOWORD(wParam))
  122. {
  123. case IDCANCEL:
  124. DeleteDC(s_hdcMem);
  125. EndDialog(hDlg, LOWORD(wParam));
  126. return TRUE;
  127. }
  128. break;
  129. case WM_SIZE:
  130. InvalidateRect(hDlg, NULL, TRUE);
  131. return TRUE;
  132. case WM_CTLCOLORSTATIC:
  133. SetBkMode((HDC)wParam, TRANSPARENT);
  134. return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
  135. case WM_CTLCOLORDLG:
  136. GetClientRect(hDlg, &rcDialog);
  137. //通过SetStretchBltMode的设置能使StretchBlt在缩放图像更加清晰
  138. SetStretchBltMode((HDC)wParam, COLORONCOLOR);
  139. StretchBlt((HDC)wParam, 0, 0, rcDialog.right, rcDialog.bottom, s_hdcMem, 0, 0, s_bm.bmWidth, s_bm.bmHeight, SRCCOPY);
  140. return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
  141. }
  142. return FALSE;
  143. }
  144. /*
  145. // 静态控件背景透明化2 - 在WM_CTLCOLORDLG返回窗口背景的位图画刷
  146. //By MoreWindows-(http://blog.csdn.net/MoreWindows)
  147. #include <windows.h>
  148. #include "resource.h"
  149. const char szDlgTitle[] = "静态控件背景透明化2 MoreWindows-(http://blog.csdn.net/MoreWindows)";
  150. // 对话框消息处理函数
  151. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  152. int APIENTRY WinMain(HINSTANCE hInstance,
  153. HINSTANCE hPrevInstance,
  154. LPSTR lpCmdLine,
  155. int nCmdShow)
  156. {
  157. DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
  158. return 0;
  159. }
  160. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  161. {
  162. static HBRUSH s_hBitmapBrush; //位图画刷
  163. switch (message)
  164. {
  165. case WM_INITDIALOG:
  166. // 设置对话框标题
  167. SetWindowText(hDlg, szDlgTitle);
  168. // 设置对话框大小可调节
  169. SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);
  170. // 加载背影图片
  171. HBITMAP hBitmap;
  172. hBitmap = (HBITMAP)LoadImage(NULL, "006.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
  173. if (hBitmap == NULL)
  174. {
  175. MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);
  176. exit(0);
  177. }
  178. // 创建位图画刷
  179. s_hBitmapBrush = CreatePatternBrush(hBitmap);
  180. return 0;
  181. case WM_COMMAND:
  182. switch (LOWORD(wParam))
  183. {
  184. case IDCANCEL:
  185. DeleteObject(s_hBitmapBrush);
  186. EndDialog(hDlg, LOWORD(wParam));
  187. return TRUE;
  188. }
  189. break;
  190. case WM_CTLCOLORSTATIC:
  191. SetBkMode((HDC)wParam, TRANSPARENT);
  192. case WM_CTLCOLORDLG:
  193. return (BOOL)s_hBitmapBrush;
  194. }
  195. return FALSE;
  196. }
  197. */

效果图:

20171009211430328

程序和源代码链接:

http://download.csdn.net/download/zhangxiaoyu_sy/9961978

发表评论

表情:
评论列表 (有 0 条评论,554人围观)

还没有评论,来说两句吧...

相关阅读

    相关 实现透明背景

    很多情况下,我们需要控件的背景是透明的,就是要求直接看到控件父窗口的背景颜色、背景位图,比如标签控件、单选Radio控件、复选Check控件,通常都要求在父窗口的背景上进行绘制

    相关 css背景透明

    css设置div背景透明有两种方法:第一种使用opacity:0~1,这个方法有个缺点,就是内容也会跟着透明;第二种方法就是background-color:rgba(0,0,

    相关 静态背景透明

      静态控件背景透明,能够完美的将字体显示到背景中去。 在实际应用中也是非常常用的。   赶紧拿去学习吧。。。。。。。。 主要代码:   // Tran