VFW-2.cpp
上传用户:sslongxi
上传日期:2022-03-01
资源大小:1059k
文件大小:4k
源码类别:

多媒体

开发平台:

Visual C++

  1. // VFW-2.cpp : 定义应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "VFW-2.h"
  5. #define MAX_LOADSTRING 100
  6. // 全局变量:
  7. HINSTANCE hInst; // 当前实例
  8. TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
  9. TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
  10. // 此代码模块中包含的函数的前向声明:
  11. ATOM MyRegisterClass(HINSTANCE hInstance);
  12. BOOL InitInstance(HINSTANCE, int);
  13. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  14. INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
  15. int APIENTRY _tWinMain(HINSTANCE hInstance,
  16.                      HINSTANCE hPrevInstance,
  17.                      LPTSTR    lpCmdLine,
  18.                      int       nCmdShow)
  19. {
  20. UNREFERENCED_PARAMETER(hPrevInstance);
  21. UNREFERENCED_PARAMETER(lpCmdLine);
  22.   // TODO: 在此放置代码。
  23. MSG msg;
  24. HACCEL hAccelTable;
  25. // 初始化全局字符串
  26. LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  27. LoadString(hInstance, IDC_VFW2, szWindowClass, MAX_LOADSTRING);
  28. MyRegisterClass(hInstance);
  29. // 执行应用程序初始化:
  30. if (!InitInstance (hInstance, nCmdShow))
  31. {
  32. return FALSE;
  33. }
  34. hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_VFW2));
  35. // 主消息循环:
  36. while (GetMessage(&msg, NULL, 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. //  注释:
  52. //
  53. //    仅当希望
  54. //    此代码与添加到 Windows 95 中的“RegisterClassEx”
  55. //    函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
  56. //    这样应用程序就可以获得关联的
  57. //    “格式正确的”小图标。
  58. //
  59. ATOM MyRegisterClass(HINSTANCE hInstance)
  60. {
  61. WNDCLASSEX wcex;
  62. wcex.cbSize = sizeof(WNDCLASSEX);
  63. wcex.style = CS_HREDRAW | CS_VREDRAW;
  64. wcex.lpfnWndProc = WndProc;
  65. wcex.cbClsExtra = 0;
  66. wcex.cbWndExtra = 0;
  67. wcex.hInstance = hInstance;
  68. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VFW2));
  69. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  70. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  71. wcex.lpszMenuName = MAKEINTRESOURCE(IDC_VFW2);
  72. wcex.lpszClassName = szWindowClass;
  73. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  74. return RegisterClassEx(&wcex);
  75. }
  76. //
  77. //   函数: InitInstance(HINSTANCE, int)
  78. //
  79. //   目的: 保存实例句柄并创建主窗口
  80. //
  81. //   注释:
  82. //
  83. //        在此函数中,我们在全局变量中保存实例句柄并
  84. //        创建和显示主程序窗口。
  85. //
  86. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  87. {
  88.    HWND hWnd;
  89.    hInst = hInstance; // 将实例句柄存储在全局变量中
  90.    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  91.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  92.    if (!hWnd)
  93.    {
  94.       return FALSE;
  95.    }
  96.    ShowWindow(hWnd, nCmdShow);
  97.    UpdateWindow(hWnd);
  98.    return TRUE;
  99. }
  100. //
  101. //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
  102. //
  103. //  目的: 处理主窗口的消息。
  104. //
  105. //  WM_COMMAND - 处理应用程序菜单
  106. //  WM_PAINT - 绘制主窗口
  107. //  WM_DESTROY - 发送退出消息并返回
  108. //
  109. //
  110. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  111. {
  112. int wmId, wmEvent;
  113. PAINTSTRUCT ps;
  114. HDC hdc;
  115. switch (message)
  116. {
  117. case WM_COMMAND:
  118. wmId    = LOWORD(wParam);
  119. wmEvent = HIWORD(wParam);
  120. // 分析菜单选择:
  121. switch (wmId)
  122. {
  123. case IDM_ABOUT:
  124. DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  125. break;
  126. case IDM_EXIT:
  127. DestroyWindow(hWnd);
  128. break;
  129. default:
  130. return DefWindowProc(hWnd, message, wParam, lParam);
  131. }
  132. break;
  133. case WM_PAINT:
  134. hdc = BeginPaint(hWnd, &ps);
  135. // TODO: 在此添加任意绘图代码...
  136. EndPaint(hWnd, &ps);
  137. break;
  138. case WM_DESTROY:
  139. PostQuitMessage(0);
  140. break;
  141. default:
  142. return DefWindowProc(hWnd, message, wParam, lParam);
  143. }
  144. return 0;
  145. }
  146. // “关于”框的消息处理程序。
  147. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  148. {
  149. UNREFERENCED_PARAMETER(lParam);
  150. switch (message)
  151. {
  152. case WM_INITDIALOG:
  153. return (INT_PTR)TRUE;
  154. case WM_COMMAND:
  155. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  156. {
  157. EndDialog(hDlg, LOWORD(wParam));
  158. return (INT_PTR)TRUE;
  159. }
  160. break;
  161. }
  162. return (INT_PTR)FALSE;
  163. }