鱼C论坛

 找回密码
 立即注册
查看: 2392|回复: 1

BEEPER1 程序测试问题

[复制链接]
发表于 2013-12-3 14:39:11 | 显示全部楼层 |阅读模式
1鱼币
BEEPER1 程序书上说移动窗口的时候 会停止发出嘟嘟声音,我测试的时候怎么不是这样啊

代码如下:
  1. /*-----------------------------------------
  2. BEEPER1.C -- Timer Demo Program No. 1
  3. (c) Charles Petzold, 1998
  4. -----------------------------------------*/

  5. #include <windows.h>

  6. #define ID_TIMER 1

  7. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

  8. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  9. PSTR szCmdLine, int iCmdShow)
  10. {
  11. static TCHAR szAppName[] = TEXT ("Beeper1") ;
  12. HWND hwnd ;
  13. MSG msg ;
  14. WNDCLASS wndclass ;

  15. wndclass.style = CS_HREDRAW | CS_VREDRAW ;
  16. wndclass.lpfnWndProc = WndProc ;
  17. wndclass.cbClsExtra = 0 ;
  18. wndclass.cbWndExtra = 0 ;
  19. wndclass.hInstance = hInstance ;
  20. wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
  21. wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
  22. wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  23. wndclass.lpszMenuName = NULL ;
  24. wndclass.lpszClassName = szAppName ;

  25. if (!RegisterClass (&wndclass))
  26. {
  27. MessageBox (NULL, TEXT ("Program requires Windows NT!"),
  28. szAppName, MB_ICONERROR) ;
  29. return 0 ;
  30. }

  31. hwnd = CreateWindow (szAppName, TEXT ("Beeper1 Timer Demo"),
  32. WS_OVERLAPPEDWINDOW,
  33. CW_USEDEFAULT, CW_USEDEFAULT,
  34. CW_USEDEFAULT, CW_USEDEFAULT,
  35. NULL, NULL, hInstance, NULL) ;

  36. ShowWindow (hwnd, iCmdShow) ;
  37. UpdateWindow (hwnd) ;

  38. while (GetMessage (&msg, NULL, 0, 0))
  39. {
  40. TranslateMessage (&msg) ;
  41. DispatchMessage (&msg) ;
  42. }
  43. return msg.wParam ;
  44. }

  45. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  46. {
  47. static BOOL fFlipFlop = FALSE ;
  48. HBRUSH hBrush ;
  49. HDC hdc ;
  50. PAINTSTRUCT ps ;
  51. RECT rc ;

  52. switch (message)
  53. {
  54. case WM_CREATE:
  55. SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
  56. return 0 ;

  57. case WM_TIMER :
  58. MessageBeep (MB_ICONASTERISK) ;
  59. fFlipFlop = !fFlipFlop ;
  60. InvalidateRect (hwnd, NULL, FALSE) ;
  61. return 0 ;

  62. case WM_PAINT :
  63. hdc = BeginPaint (hwnd, &ps) ;

  64. GetClientRect (hwnd, &rc) ;
  65. hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) : RGB(0,0,255)) ;
  66. FillRect (hdc, &rc, hBrush) ;

  67. EndPaint (hwnd, &ps) ;
  68. DeleteObject (hBrush) ;
  69. return 0 ;

  70. case WM_DESTROY :
  71. KillTimer (hwnd, ID_TIMER) ;
  72. PostQuitMessage (0) ;
  73. return 0 ;
  74. }
  75. return DefWindowProc (hwnd, message, wParam, lParam) ;
  76. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-12-6 14:32:48 | 显示全部楼层
...你确定这个代码是完整的?
这个代码的消息响应函数中,只处理了WM_CREATE, WM_PAINT, WM_DESTROY, WM_TIIME,四种消息
这四种消息都和窗口移动没关系. 你应该响应些和窗口移动相关的消息,比如WM_MOVING
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 04:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表