fork download
  1. // test_wni32.cpp : 定義應用程式的進入點。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "test_wni32.h"
  6. #include <windowsx.h>
  7.  
  8. #define MAX_LOADSTRING 100
  9.  
  10. // 全域變數:
  11. HINSTANCE hInst; // 目前執行個體
  12. TCHAR szTitle[MAX_LOADSTRING]; // 標題列文字
  13. TCHAR szWindowClass[MAX_LOADSTRING]; // 主視窗類別名稱
  14.  
  15. WNDPROC oldEditProc;
  16.  
  17. // 這個程式碼模組中所包含之函式的向前宣告:
  18. ATOM MyRegisterClass(HINSTANCE hInstance);
  19. BOOL InitInstance(HINSTANCE, int);
  20. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  21. INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
  22.  
  23. int APIENTRY _tWinMain(HINSTANCE hInstance,
  24. HINSTANCE hPrevInstance,
  25. LPTSTR lpCmdLine,
  26. int nCmdShow)
  27. {
  28. UNREFERENCED_PARAMETER(hPrevInstance);
  29. UNREFERENCED_PARAMETER(lpCmdLine);
  30.  
  31. // TODO: 在此置入程式碼。
  32. MSG msg;
  33. HACCEL hAccelTable;
  34.  
  35. // 初始化全域字串
  36. LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  37. LoadString(hInstance, IDC_TEST_WNI32, szWindowClass, MAX_LOADSTRING);
  38. MyRegisterClass(hInstance);
  39.  
  40. // 執行應用程式初始設定:
  41. if (!InitInstance (hInstance, nCmdShow))
  42. {
  43. return FALSE;
  44. }
  45.  
  46. hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEST_WNI32));
  47.  
  48. // 主訊息迴圈:
  49. while (GetMessage(&msg, NULL, 0, 0))
  50. {
  51. if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  52. {
  53. TranslateMessage(&msg);
  54. DispatchMessage(&msg);
  55. }
  56. }
  57.  
  58. return (int) msg.wParam;
  59. }
  60.  
  61.  
  62.  
  63. //
  64. // 函式: MyRegisterClass()
  65. //
  66. // 用途: 註冊視窗類別。
  67. //
  68. // 註解:
  69. //
  70. // 只有當您希望此程式碼能相容比 Windows 95 的
  71. // 'RegisterClassEx' 函式更早的 Win32 系統時,
  72. // 才會需要加入及使用這個函式。
  73. // 您必須呼叫這個函式,讓應用程式取得與它相關的
  74. // 「格式正確」的圖示。
  75. //
  76. ATOM MyRegisterClass(HINSTANCE hInstance)
  77. {
  78. WNDCLASSEX wcex;
  79.  
  80. wcex.cbSize = sizeof(WNDCLASSEX);
  81.  
  82. wcex.style = CS_HREDRAW | CS_VREDRAW;
  83. wcex.lpfnWndProc = WndProc;
  84. wcex.cbClsExtra = 0;
  85. wcex.cbWndExtra = 0;
  86. wcex.hInstance = hInstance;
  87. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST_WNI32));
  88. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  89. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  90. wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TEST_WNI32);
  91. wcex.lpszClassName = szWindowClass;
  92. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  93.  
  94. return RegisterClassEx(&wcex);
  95. }
  96.  
  97. //
  98. // 函式: InitInstance(HINSTANCE, int)
  99. //
  100. // 用途: 儲存執行個體控制代碼並且建立主視窗
  101. //
  102. // 註解:
  103. //
  104. // 在這個函式中,我們會將執行個體控制代碼儲存在全域變數中,
  105. // 並且建立和顯示主程式視窗。
  106. //
  107. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  108. {
  109. HWND hWnd;
  110.  
  111. hInst = hInstance; // 將執行個體控制代碼儲存在全域變數中
  112.  
  113. hWnd = CreateWindow(TEXT("Edit"), szTitle, WS_OVERLAPPEDWINDOW,
  114. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  115.  
  116. oldEditProc = (WNDPROC) SetWindowLong(hWnd, GWL_WNDPROC, (LONG) WndProc);
  117.  
  118. if (!hWnd)
  119. {
  120. return FALSE;
  121. }
  122.  
  123. ShowWindow(hWnd, nCmdShow);
  124. UpdateWindow(hWnd);
  125.  
  126. return TRUE;
  127. }
  128.  
  129. //
  130. // 函式: WndProc(HWND, UINT, WPARAM, LPARAM)
  131. //
  132. // 用途: 處理主視窗的訊息。
  133. //
  134. // WM_COMMAND - 處理應用程式功能表
  135. // WM_PAINT - 繪製主視窗
  136. // WM_DESTROY - 顯示結束訊息然後返回
  137. //
  138. //
  139. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  140. {
  141. HMENU menu;
  142. int xPos = GET_X_LPARAM(lParam);
  143. int yPos = GET_Y_LPARAM(lParam);
  144. POINT pt;
  145. switch (message)
  146. {
  147. case WM_RBUTTONUP:
  148. menu = CreatePopupMenu();
  149. AppendMenu(menu, MF_STRING, 1001, L"123");
  150. AppendMenu(menu, MF_STRING, 1002, L"345");
  151. AppendMenu(menu, MF_STRING, 1003, L"4545");
  152. // MessageBox(NULL, L"sdfd", L"sdf", MB_OK);
  153.  
  154. pt.x = xPos;
  155. pt.y = yPos;
  156. ClientToScreen(hWnd, &pt);
  157. TrackPopupMenu(menu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
  158.  
  159. return 1;
  160. case WM_DESTROY:
  161. PostQuitMessage(0);
  162. break;
  163. default:
  164. return CallWindowProc(oldEditProc, hWnd, message, wParam, lParam);
  165. }
  166. return 0;
  167. }
  168.  
  169. // [關於] 方塊的訊息處理常式。
  170. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  171. {
  172. UNREFERENCED_PARAMETER(lParam);
  173. switch (message)
  174. {
  175. case WM_INITDIALOG:
  176. return (INT_PTR)TRUE;
  177.  
  178. case WM_COMMAND:
  179. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  180. {
  181. EndDialog(hDlg, LOWORD(wParam));
  182. return (INT_PTR)TRUE;
  183. }
  184. break;
  185. }
  186. return (INT_PTR)FALSE;
  187. }
  188.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty