2windows_timer

  1. // 2Window_Timer.cpp : 定义应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "2Window_Timer.h"
  5. #include <iostream>
  6. HINSTANCE g_hInst;
  7. HANDLE g_hStdout = NULL;
  8. //宏定义输入函数
  9. #define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL);
  10. void CALLBACK TimerProc( //定时器回调函数
  11. HWND hwnd, //窗口句柄
  12. UINT uMsg, //WM_TIMER消息ID
  13. UINT idEvent, //定时器ID
  14. DWORD dwTime //当前系统时间
  15. ){
  16. CHAR szText[256];
  17. sprintf_s(szText, 256, "ID为%d调用系统时间%ld\n", idEvent,dwTime);
  18. //PrintLog(szText);
  19. }
  20. void OnTimer(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) //定时器触发函数
  21. {
  22. CHAR szText[256];
  23. sprintf_s(szText, 256, "编号ID为:%d的定时器被触发\n", wParam);
  24. PrintLog(szText);
  25. }
  26. void OnCreate(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  27. {
  28. PrintLog("SetTimer Begin:\n");
  29. SetTimer(hWnd, 1000, 3 * 1000, NULL); //设置一个定时器
  30. SetTimer(hWnd, 1001, 5 * 1000, NULL);
  31. //使用TimerProc处理多线程
  32. //如果不设置,则不会调用默认的WM_TIMER消息
  33. SetTimer(NULL, 0, 2 * 1000, TimerProc); //如果第一个参数为空时,则必须给出第四个参数,也就是回调函数
  34. SetTimer(NULL, 0, 3 * 1000, TimerProc); //因为第一参数和第四参数同时为空,所以不执行
  35. }
  36. LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  37. {
  38. switch (nMsg)
  39. {
  40. case WM_CREATE: //创建时的消息
  41. OnCreate(hWnd, nMsg, wParam, lParam);
  42. break;
  43. case WM_TIMER: //定时器
  44. OnTimer(hWnd, nMsg, wParam, lParam);
  45. switch (wParam) //这个switch只有放到WM_TIMER消息里面才会起作用
  46. {
  47. case 1000:
  48. PrintLog("1000定时器极招灭杀\n");
  49. break;
  50. case 1001:
  51. PrintLog("1001定时器极招黑天\n");
  52. break;
  53. }
  54. PrintLog("定时器极招黑天\n");
  55. break;
  56. case WM_DESTROY: //窗口销毁
  57. KillTimer(hWnd, 1000);
  58. PostQuitMessage(0);
  59. break;
  60. }
  61. return DefWindowProc(hWnd, nMsg, wParam, lParam);
  62. }
  63. BOOL RegisterWnd(LPSTR pszClassName)
  64. {
  65. WNDCLASSEX wce = { 0 };
  66. wce.cbSize = sizeof(wce);
  67. wce.cbClsExtra = 0;
  68. wce.cbWndExtra = 0;
  69. wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  70. wce.hCursor = NULL;
  71. wce.hIcon = NULL;
  72. wce.hIconSm = NULL;
  73. wce.hInstance = g_hInst;
  74. wce.lpfnWndProc = WndProc;
  75. wce.lpszClassName = pszClassName;
  76. wce.lpszMenuName = NULL;
  77. wce.style = CS_VREDRAW | CS_HREDRAW;
  78. ATOM aTom = RegisterClassEx(&wce);
  79. if (aTom == 0)
  80. {
  81. return FALSE;
  82. }
  83. else
  84. {
  85. return TRUE;
  86. }
  87. }
  88. HWND CreateWnd(LPSTR pszClassName)
  89. {
  90. HWND hWnd = CreateWindowEx(0, pszClassName, "ttttt", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  91. NULL, NULL, g_hInst, NULL);
  92. return hWnd;
  93. }
  94. void showWnd(HWND hWnd)
  95. {
  96. ShowWindow(hWnd, SW_SHOW);
  97. UpdateWindow(hWnd);
  98. }
  99. void msg()
  100. {
  101. MSG msg = { 0 };
  102. while (GetMessage(&msg,NULL,0,0))
  103. {
  104. TranslateMessage(&msg);
  105. DispatchMessage(&msg);
  106. }
  107. }
  108. //控制台
  109. void ConsoleWnd()
  110. {
  111. AllocConsole();
  112. g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  113. CHAR szText[] = "Debug start:\n";
  114. PrintLog(szText);
  115. }
  116. int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
  117. {
  118. g_hInst = hInstance;
  119. ConsoleWnd();
  120. RegisterWnd("OOOO");
  121. HWND hWnd = CreateWnd("OOOO");
  122. showWnd(hWnd);
  123. msg();
  124. return 0;
  125. }





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