zoukankan      html  css  js  c++  java
  • VC++ MFC应用程序项目文件2.cpp

      1 //GameServer.cpp: 定义应用程序的入口点。
      2 //
      3 
      4 #include "stdafx.h"
      5 #include "GameServer.h"
      6 
      7 #define MAX_LOADSTRING 100
      8 
      9 // 全局变量: 
     10 HINSTANCE hInst;                                // 当前实例
     11 WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
     12 WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
     13 
     14 // 此代码模块中包含的函数的前向声明: 
     15 ATOM                MyRegisterClass(HINSTANCE hInstance);
     16 BOOL                InitInstance(HINSTANCE, int);
     17 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
     18 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
     19 
     20 int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
     21                      _In_opt_ HINSTANCE hPrevInstance,
     22                      _In_ LPWSTR    lpCmdLine,
     23                      _In_ int       nCmdShow)
     24 {
     25     UNREFERENCED_PARAMETER(hPrevInstance);
     26     UNREFERENCED_PARAMETER(lpCmdLine);
     27 
     28     // TODO: 在此放置代码。
     29 
     30     // 初始化全局字符串
     31     LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
     32     LoadStringW(hInstance, IDC_GAMESERVER, szWindowClass, MAX_LOADSTRING);
     33     MyRegisterClass(hInstance);
     34 
     35     // 执行应用程序初始化: 
     36     if (!InitInstance (hInstance, nCmdShow))
     37     {
     38         return FALSE;
     39     }
     40 
     41     HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GAMESERVER));
     42 
     43     MSG msg;
     44 
     45     // 主消息循环: 
     46     while (GetMessage(&msg, nullptr, 0, 0))
     47     {
     48         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
     49         {
     50             TranslateMessage(&msg);
     51             DispatchMessage(&msg);
     52         }
     53     }
     54 
     55     return (int) msg.wParam;
     56 }
     57 
     58 
     59 
     60 //
     61 //  函数: MyRegisterClass()
     62 //
     63 //  目的: 注册窗口类。
     64 //
     65 ATOM MyRegisterClass(HINSTANCE hInstance)
     66 {
     67     WNDCLASSEXW wcex;
     68 
     69     wcex.cbSize = sizeof(WNDCLASSEX);
     70 
     71     wcex.style          = CS_HREDRAW | CS_VREDRAW;//从这个窗口类派生的窗口具有的风格
     72     wcex.lpfnWndProc    = WndProc;//窗口处理函数的指针, 处理主窗口的消息
     73     wcex.cbClsExtra     = 0;//指定紧跟在窗口类结构后的附加字节数。
     74     wcex.cbWndExtra     = 0;
     75     wcex.hInstance      = hInstance;//本模块的实例句柄。
     76     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GAMESERVER));
     77     wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);//光标的句柄
     78     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
     79     wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_GAMESERVER);//指向菜单的指针
     80     wcex.lpszClassName  = szWindowClass;//指向类名称的指针
     81     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标
     82 
     83     return RegisterClassExW(&wcex);
     84 }
     85 
     86 //
     87 //   函数: InitInstance(HINSTANCE, int)
     88 //
     89 //   目的: 保存实例句柄并创建主窗口
     90 //
     91 //   注释: 
     92 //
     93 //        在此函数中,我们在全局变量中保存实例句柄并
     94 //        创建和显示主程序窗口。
     95 //
     96 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
     97 {
     98    hInst = hInstance; // 将实例句柄存储在全局变量中
     99 
    100    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    101       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    102 
    103    if (!hWnd)
    104    {
    105       return FALSE;
    106    }
    107 
    108    ShowWindow(hWnd, nCmdShow);
    109    UpdateWindow(hWnd);
    110 
    111    return TRUE;
    112 }
    113 
    114 //
    115 //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
    116 //
    117 //  目的:    处理主窗口的消息。
    118 //
    119 //  WM_COMMAND  - 处理应用程序菜单
    120 //  WM_PAINT    - 绘制主窗口
    121 //  WM_DESTROY  - 发送退出消息并返回
    122 //
    123 //
    124 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    125 {
    126     switch (message)
    127     {
    128     case WM_COMMAND:
    129         {
    130             int wmId = LOWORD(wParam);
    131             // 分析菜单选择: 
    132             switch (wmId)
    133             {
    134             case IDM_ABOUT:
    135                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
    136                 break;
    137             case IDM_EXIT:
    138                 DestroyWindow(hWnd);
    139                 break;
    140             default:
    141                 return DefWindowProc(hWnd, message, wParam, lParam);
    142             }
    143         }
    144         break;
    145     case WM_PAINT:
    146         {
    147             PAINTSTRUCT ps;
    148             HDC hdc = BeginPaint(hWnd, &ps);
    149             // TODO: 在此处添加使用 hdc 的任何绘图代码...
    150             EndPaint(hWnd, &ps);
    151         }
    152         break;
    153     case WM_DESTROY:
    154 
    155         // 退出程序 窗口销毁后(调用DestroyWindow()后),消息队列得到的消息。 
    156 
    157         PostQuitMessage(0);
    158         break;
    159     default:
    160 
    161         // hWnd 指向接收消息的窗口过程的句柄。
    162         // Msg:指定消息类型
    163         // wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关
    164         // IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关
    165         // 返回值:返回值就是消息处理结果,它与发送的消息有关。
    166         // 当 DefWindowProc 处理 WM_DESTROY 消息时,它不自动调用 PostQuitMessage
    167         return DefWindowProc(hWnd, message, wParam, lParam);
    168     }
    169     return 0;
    170 }
    171 
    172 // “关于”框的消息处理程序。
    173 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    174 {
    175     UNREFERENCED_PARAMETER(lParam);
    176     switch (message)
    177     {
    178     case WM_INITDIALOG:
    179         return (INT_PTR)TRUE;
    180 
    181     case WM_COMMAND:
    182         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    183         {
    184             EndDialog(hDlg, LOWORD(wParam));
    185             return (INT_PTR)TRUE;
    186         }
    187         break;
    188     }
    189     return (INT_PTR)FALSE;
    190 }
  • 相关阅读:
    jQuery EasyUI dialog 居中最简单的办法
    Sql Server 查看存储过程最后修改时间
    MyEclipse格式化JSP代码,其中Javascript无法格式化的原因
    MyEclipse格式化JSP代码导致Java表达式<%= %>自动换行的解决办法
    重新格式化hadoop的namenode导致datanode无法启动的最简单解决办法
    端口映射
    你以为的Jquery选择器是什么样子的?
    JS&Jquery基础之窗口对象的关系总结
    JS&Jquery基础之对象和数组以及类型转换
    SQL Server关于AlwaysOn的理解
  • 原文地址:https://www.cnblogs.com/endv/p/8337676.html
Copyright © 2011-2022 走看看