11WinDlg 对话框一

  1. #include <windows.h>
  2. #include <iostream>
  3. #include "resource.h"
  4. CHAR szText[256] = { 0 };
  5. #define PrintLog(x) WriteConsole(g_hStdout, x, strlen(x), NULL, NULL)
  6. HINSTANCE g_hInst = NULL; //窗口句柄
  7. HANDLE g_hStdout = NULL; //控制台句柄
  8. //Dlg Proc
  9. BOOL CALLBACK SettingDialogProc(
  10. HWND hwndDlg,
  11. UINT nMsg,
  12. WPARAM wParam,
  13. LPARAM lParam
  14. ){
  15. PrintLog("SettingDialogProc\n");
  16. //return DefDlgProc(hwndDlg, nMsg, wParam, lParam);
  17. switch (nMsg)
  18. {
  19. case WM_SYSCOMMAND:
  20. {
  21. switch(wParam)
  22. case SC_CLOSE:
  23. EndDialog(hwndDlg, 2);
  24. }
  25. break;
  26. }
  27. return 0;
  28. }
  29. //Setting
  30. void Setting(HWND hWnd)
  31. {
  32. //创建对话框,这里的返回值和EndDialog的第二个参数相同
  33. int nRet = DialogBox(g_hInst, MAKEINTRESOURCE(IDD_SETTING), hWnd, SettingDialogProc);
  34. sprintf_s(szText, 256, "Setting:%d\n", nRet);
  35. PrintLog(szText);
  36. }
  37. //OnCommand
  38. void OnCommand(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  39. {
  40. int hCommandID = LOWORD(wParam);
  41. sprintf_s(szText, 256, "%d\n", hCommandID);
  42. PrintLog(szText);
  43. switch (hCommandID)
  44. {
  45. case ID_SETTING:
  46. Setting(hWnd);
  47. break;
  48. case ID_EXIT:
  49. PostQuitMessage(0);
  50. break;
  51. }
  52. }
  53. LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
  54. {
  55. switch (nMsg)
  56. {
  57. case WM_COMMAND:
  58. OnCommand(hWnd, nMsg, wParam, lParam);
  59. break;
  60. case WM_DESTROY:
  61. PostQuitMessage(0);
  62. break;
  63. }
  64. return DefWindowProc(hWnd, nMsg, wParam, lParam);
  65. }
  66. BOOL RegisterWnd(LPSTR pszClassName)
  67. {
  68. WNDCLASSEX wce = { 0 };
  69. wce.cbSize = sizeof(wce);
  70. wce.cbClsExtra = 0;
  71. wce.cbWndExtra = 0;
  72. wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
  73. wce.hCursor = NULL;
  74. wce.hIcon = NULL;
  75. wce.hIconSm = NULL;
  76. wce.hInstance = g_hInst;
  77. wce.lpfnWndProc = WndProc;
  78. wce.lpszClassName = pszClassName;
  79. wce.lpszMenuName = NULL;
  80. wce.style = CS_HREDRAW | CS_VREDRAW;
  81. ATOM atom = RegisterClassEx(&wce);
  82. if (atom == NULL)
  83. {
  84. return FALSE;
  85. }
  86. else
  87. {
  88. return TRUE;
  89. }
  90. }
  91. HWND CreateWnd(LPSTR pszClassName)
  92. {
  93. HMENU hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));
  94. HWND hWnd = CreateWindowEx(0, pszClassName, "灭天", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  95. CW_USEDEFAULT, NULL, hMenu, g_hInst, 0);
  96. return hWnd;
  97. }
  98. void ShowWnd(HWND hWnd)
  99. {
  100. ShowWindow(hWnd, SW_SHOW);
  101. UpdateWindow(hWnd);
  102. }
  103. void Msg()
  104. {
  105. MSG msg = { 0 };
  106. while (GetMessage(&msg, NULL, 0, 0))
  107. {
  108. TranslateMessage(&msg);
  109. DispatchMessage(&msg);
  110. }
  111. }
  112. void ConsoleWnd()
  113. {
  114. AllocConsole();
  115. g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  116. CHAR szText[] = "Debug start:\n";
  117. WriteConsole(g_hStdout, szText, strlen(szText), NULL, NULL);
  118. }
  119. int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
  120. {
  121. g_hInst = hInstance;
  122. ConsoleWnd();
  123. RegisterWnd("oooo");
  124. HWND hWnd = CreateWnd("oooo");
  125. ShowWnd(hWnd);
  126. Msg();
  127. return 0;
  128. }





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