win32_instance.cpp
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:4k
源码类别:

DirextX编程

开发平台:

Visual C++

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