当前位置:   article > 正文

win32表白小程序_qt爱心表白小程序

qt爱心表白小程序

窗口进程不会在通知栏,VS运行的时候还不会显示在任务管理器中,大家只需要正常点<好!>就能关闭窗口,窗口可以直接鼠标点击移动。

  1. // WindowsProject3.cpp : 定义应用程序的入口点。
  2. //
  3. #include <windows.h>
  4. #include <time.h>
  5. #define MAX_LOADSTRING 100
  6. HWND hbutton1;
  7. HWND hbutton2;
  8. // 全局变量:
  9. HINSTANCE hInst; // 当前实例
  10. WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
  11. WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
  12. // 此代码模块中包含的函数的前向声明:
  13. ATOM MyRegisterClass(HINSTANCE hInstance);
  14. BOOL InitInstance(HINSTANCE, int);
  15. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  16. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  17. _In_opt_ HINSTANCE hPrevInstance,
  18. _In_ LPWSTR lpCmdLine,
  19. _In_ int nCmdShow)
  20. {
  21. UNREFERENCED_PARAMETER(hPrevInstance);
  22. UNREFERENCED_PARAMETER(lpCmdLine);
  23. // TODO: 在此处放置代码。
  24. // 初始化全局字符串
  25. LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  26. LoadStringW(hInstance, IDC_WINDOWSPROJECT3, szWindowClass, MAX_LOADSTRING);
  27. MyRegisterClass(hInstance);
  28. // 执行应用程序初始化:
  29. if (!InitInstance (hInstance, nCmdShow))
  30. {
  31. return FALSE;
  32. }
  33. HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT3));
  34. MSG msg;
  35. // 主消息循环:
  36. while (GetMessage(&msg, nullptr, 0, 0))
  37. {
  38. if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  39. {
  40. TranslateMessage(&msg);
  41. DispatchMessage(&msg);
  42. }
  43. }
  44. return (int) msg.wParam;
  45. }
  46. //
  47. // 函数: MyRegisterClass()
  48. //
  49. // 目标: 注册窗口类。
  50. //
  51. ATOM MyRegisterClass(HINSTANCE hInstance)
  52. {
  53. WNDCLASSEXW wcex;
  54. wcex.cbSize = sizeof(WNDCLASSEX);
  55. wcex.style = CS_HREDRAW | CS_VREDRAW| CS_DBLCLKS;
  56. wcex.lpfnWndProc = WndProc;
  57. wcex.cbClsExtra = 0;
  58. wcex.cbWndExtra = 0;
  59. wcex.hInstance = hInstance;
  60. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT3));
  61. wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
  62. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  63. wcex.lpszMenuName = NULL;
  64. wcex.lpszClassName = szWindowClass;
  65. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  66. return RegisterClassExW(&wcex);
  67. }
  68. //
  69. // 函数: InitInstance(HINSTANCE, int)
  70. //
  71. // 目标: 保存实例句柄并创建主窗口
  72. //
  73. // 注释:
  74. //
  75. // 在此函数中,我们在全局变量中保存实例句柄并
  76. // 创建和显示主程序窗口。
  77. //
  78. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  79. {
  80. hInst = hInstance; // 将实例句柄存储在全局变量中
  81. HWND hWnd = CreateWindowEx(
  82. WS_EX_TOOLWINDOW, // 使用 WS_EX_TOOLWINDOW 样式
  83. szWindowClass,
  84. szTitle,
  85. WS_POPUP| WS_BORDER,
  86. 400, 300,
  87. 600, 400,
  88. NULL,
  89. NULL,
  90. hInstance,
  91. NULL
  92. );
  93. hbutton1 = CreateWindow(_T("button"), _T("按钮"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER, 400, 300, 100, 30, hWnd, (HMENU)10086, hInstance, NULL);
  94. hbutton2 = CreateWindow(_T("button"), _T("按钮"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER, 100, 300, 100, 30, hWnd, (HMENU)10087, hInstance, NULL);
  95. SetWindowText(hbutton1, _T("拒绝"));
  96. SetWindowText(hbutton2, _T("好!"));
  97. srand((unsigned)time(0));
  98. if (!hWnd)
  99. {
  100. return FALSE;
  101. }
  102. ShowWindow(hWnd, nCmdShow);
  103. UpdateWindow(hWnd);
  104. return TRUE;
  105. }
  106. //
  107. // 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
  108. //
  109. // 目标: 处理主窗口的消息。
  110. //
  111. // WM_COMMAND - 处理应用程序菜单
  112. // WM_PAINT - 绘制主窗口
  113. // WM_DESTROY - 发送退出消息并返回
  114. //
  115. //
  116. bool isPointInRect(const RECT& rect, const POINT& point) {
  117. if (point.x >= rect.left && point.x <= rect.right &&
  118. point.y >= rect.top && point.y <= rect.bottom) {
  119. return true;
  120. }
  121. else {
  122. return false;
  123. }
  124. }
  125. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  126. {
  127. switch (message)
  128. {
  129. case WM_CREATE:
  130. SetTimer(hWnd, 10001, 1, NULL);
  131. break;
  132. case WM_TIMER:
  133. {
  134. RECT r1 = { 0 }; //窗口坐标
  135. GetWindowRect(hWnd, &r1);
  136. RECT r2 = { 0 }; //按钮坐标
  137. GetWindowRect(hbutton1, &r2);
  138. POINT p1 = { 0 }; //鼠标坐标
  139. GetCursorPos(&p1);
  140. if (isPointInRect(r2, p1)) //鼠标是否在按钮上
  141. {
  142. r2.left = rand() % 500;
  143. r2.top = rand() % 370;
  144. MoveWindow(hbutton1, r2.left, r2.top, 100, 30, true);
  145. InvalidateRect(hWnd, &r1, TRUE);
  146. }
  147. else
  148. {
  149. }
  150. }
  151. break;
  152. case WM_NCHITTEST:
  153. return HTCAPTION;
  154. case WM_COMMAND:
  155. {
  156. int wmId = LOWORD(wParam);
  157. // 分析菜单选择:
  158. switch (wmId)
  159. {
  160. case 10087:
  161. MessageBox(0, 0, 0, 0);
  162. break;
  163. default:
  164. return DefWindowProc(hWnd, message, wParam, lParam);
  165. }
  166. }
  167. break;
  168. case WM_PAINT:
  169. {
  170. PAINTSTRUCT ps;
  171. HDC hdc = BeginPaint(hWnd, &ps);
  172. // TODO: 在此处添加使用 hdc 的任何绘图代码...
  173. HBITMAP bit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
  174. HDC hBuffDC = CreateCompatibleDC(hdc);
  175. SelectObject(hBuffDC, bit);
  176. BitBlt(hdc, 80, 50, 220, 220, hBuffDC, 0, 0, SRCCOPY);
  177. HBITMAP bit1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));
  178. HDC hBuffDC1 = CreateCompatibleDC(hdc);
  179. SelectObject(hBuffDC1, bit1);
  180. BitBlt(hdc, 310, 50, 220, 220, hBuffDC1, 0, 0, SRCCOPY);
  181. EndPaint(hWnd, &ps);
  182. }
  183. break;
  184. case WM_DESTROY:
  185. PostQuitMessage(0);
  186. break;
  187. default:
  188. return DefWindowProc(hWnd, message, wParam, lParam);
  189. }
  190. return 0;
  191. }

效果图:

鼠标放在拒绝按钮上,拒绝按钮会自己随机在窗口内移动,点击好的判断在WM_COMMAND消息中的case 10087:自己给messagebox加上要显示的字符串,

关键部分:

1、CreateWindowEx创建窗口函数,注意他和普通的函数是不一样,多了一个参数,也就是第一个参数WS_EX_TOOLWINDOW,工具窗口的风格,这种就不会显示通知栏的图标

2、只有1中的宏还是会保留标题栏的,所以在第四个参,风格的位置,改为WS_POPUP弹出式窗口的风格,那么就不存在标题栏了

3、这种WS_EX_TOOLWINDOW风格的窗口接收不到鼠标移动消息,所以用了一个计时器间隔1毫秒就判断鼠标位置是否在按钮中,如果在就移动按钮,不在就不动

4、关于点击<好!>就退出,记得加上PostQuitMessage(0);调用就可以了

最后实现这样一个程序,需要有基本的win32编程基础,剩下的就是自己随意发挥了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/194607
推荐阅读
相关标签
  

闽ICP备14008679号