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, , ))
  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. // 函数: MyRegisterClass()
  60. //
  61. // 目的: 注册窗口类。
  62. //
  63. ATOM MyRegisterClass(HINSTANCE hInstance)
  64. {
  65. WNDCLASSEXW wcex;
  66.  
  67. wcex.cbSize = sizeof(WNDCLASSEX);
  68.  
  69. wcex.style = CS_HREDRAW | CS_VREDRAW;//从这个窗口类派生的窗口具有的风格
  70. wcex.lpfnWndProc = WndProc;//窗口处理函数的指针, 处理主窗口的消息
  71. wcex.cbClsExtra = ;//指定紧跟在窗口类结构后的附加字节数。
  72. wcex.cbWndExtra = ;
  73. wcex.hInstance = hInstance;//本模块的实例句柄。
  74. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GAMESERVER));
  75. wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);//光标的句柄
  76. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+);
  77. wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_GAMESERVER);//指向菜单的指针
  78. wcex.lpszClassName = szWindowClass;//指向类名称的指针
  79. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标
  80.  
  81. return RegisterClassExW(&wcex);
  82. }
  83.  
  84. //
  85. // 函数: InitInstance(HINSTANCE, int)
  86. //
  87. // 目的: 保存实例句柄并创建主窗口
  88. //
  89. // 注释:
  90. //
  91. // 在此函数中,我们在全局变量中保存实例句柄并
  92. // 创建和显示主程序窗口。
  93. //
  94. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  95. {
  96. hInst = hInstance; // 将实例句柄存储在全局变量中
  97.  
  98. HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  99. CW_USEDEFAULT, , CW_USEDEFAULT, , nullptr, nullptr, hInstance, nullptr);
  100.  
  101. if (!hWnd)
  102. {
  103. return FALSE;
  104. }
  105.  
  106. ShowWindow(hWnd, nCmdShow);
  107. UpdateWindow(hWnd);
  108.  
  109. return TRUE;
  110. }
  111.  
  112. //
  113. // 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
  114. //
  115. // 目的: 处理主窗口的消息。
  116. //
  117. // WM_COMMAND - 处理应用程序菜单
  118. // WM_PAINT - 绘制主窗口
  119. // WM_DESTROY - 发送退出消息并返回
  120. //
  121. //
  122. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  123. {
  124. switch (message)
  125. {
  126. case WM_COMMAND:
  127. {
  128. int wmId = LOWORD(wParam);
  129. // 分析菜单选择:
  130. switch (wmId)
  131. {
  132. case IDM_ABOUT:
  133. DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  134. break;
  135. case IDM_EXIT:
  136. DestroyWindow(hWnd);
  137. break;
  138. default:
  139. return DefWindowProc(hWnd, message, wParam, lParam);
  140. }
  141. }
  142. break;
  143. case WM_PAINT:
  144. {
  145. PAINTSTRUCT ps;
  146. HDC hdc = BeginPaint(hWnd, &ps);
  147. // TODO: 在此处添加使用 hdc 的任何绘图代码...
  148. EndPaint(hWnd, &ps);
  149. }
  150. break;
  151. case WM_DESTROY:
  152.  
  153. // 退出程序 窗口销毁后(调用DestroyWindow()后),消息队列得到的消息。
  154.  
  155. PostQuitMessage();
  156. break;
  157. default:
  158.  
  159. // hWnd 指向接收消息的窗口过程的句柄。
  160. // Msg:指定消息类型
  161. // wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关
  162. // IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关
  163. // 返回值:返回值就是消息处理结果,它与发送的消息有关。
  164. // 当 DefWindowProc 处理 WM_DESTROY 消息时,它不自动调用 PostQuitMessage
  165. return DefWindowProc(hWnd, message, wParam, lParam);
  166. }
  167. return ;
  168. }
  169.  
  170. // “关于”框的消息处理程序。
  171. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  172. {
  173. UNREFERENCED_PARAMETER(lParam);
  174. switch (message)
  175. {
  176. case WM_INITDIALOG:
  177. return (INT_PTR)TRUE;
  178.  
  179. case WM_COMMAND:
  180. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  181. {
  182. EndDialog(hDlg, LOWORD(wParam));
  183. return (INT_PTR)TRUE;
  184. }
  185. break;
  186. }
  187. return (INT_PTR)FALSE;
  188. }

VC++ MFC应用程序项目文件2.cpp的更多相关文章

  1. VC++ MFC应用程序项目文件

    <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Bu ...

  2. VC++MFC对话框程序中给对话添加背景图片

    VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^   工具/原料 Visual C++ 2010 方法一:用Pic ...

  3. DCMTK354之VC++ 2008 MFC应用程序配置完整过程

    花了一个礼拜,终于在VC++2008 MFC 应用程序中完成了首个基于DCMTK354的首个程序ECHOSCUWIN32,现将过程记录下来,便于日后查阅,同时也提供给那些有幸看到此博文而对他们又有帮助 ...

  4. VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异

    VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异 一直用VC++6.0,对VS2005不太了解,下面简单的熟悉一下VS2005的一下功能,总结一下VS2005在编写MFC时候的应用. ...

  5. vc++MFC开发上位机程序

    用vc++MFC开发过不少跟单片机通讯的上位机程序了.搞懂了MFC架构,开发还是很快的,与底层单片机程序通讯,可以用串口.usb.网络.短信形式.串口现在用的越来越少了,一般电脑跟单片机在一块,使用串 ...

  6. VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误

    1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...

  7. VC++ MFC SDI/MDI Ribbon程序的停靠窗格被关闭后如何再次显示

    VC++ 创建基于MFC的SDI应用程序,Visual Studio风格的主界面如下图所示,在该主界面上的视图菜单下包含有队对各个可停靠窗格显示或隐藏的控制菜单项.而基于Ribbon风格的应用程序,所 ...

  8. MFC应用程序框架(转)

    对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便.其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用 ...

  9. MFC应用程序框架入门(转)

    1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的.自20世纪90年代初问世以来,M ...

随机推荐

  1. java入门学习(十四)运算语句for

    循环可用来重复执行一条语句或者含有多条语句的语句块.在大多数程序中都会需要重复执行一块语句. for 循环的基本语法是: for (表达式1:表达式2:表达式3) { 若干语句 } for语句由关键字 ...

  2. bash 脚本中分号的作用

    在Linux bash shell中,语句中的分号一般用作代码块标识 1.单行语句一般要用到分号来区分代码块.比如: weblogic@pmtest:/$if [ "$PS1" ] ...

  3. 使用log4jdbc记录SQL信息

    一.log4jdbc的简单介绍 使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况. 平时开发使用的ibatis,hibernate,spring jdbc的sq ...

  4. jeffy-vim-v3.2

    jeffy-vim-v3.2 增加了vim-gutentags 插件,支持tags自动生成.

  5. 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级.整理这篇文章的动机是两个问题: 问题一: 使用Windows记事本的“另存为 ...

  6. 【pycharm】pycharm上安装tensorflow,报错:AttributeError: module 'pip' has no attribute 'main' 解决方法

    pycharm上安装tensorflow,报错:AttributeError: module 'pip' has no attribute 'main' 解决方法 解决方法: 在pycharm的安装目 ...

  7. Android项目更换开发环境时出现的 java.lang.VerifyError 异常解决办法

    from://http://blog.csdn.net/wudiwo/article/details/7548451 项目是从同事的电脑上直接拷贝过来的,项目里面的jar包是在项目跟下libs里面存放 ...

  8. VisualStudio:如何监控 ADO.NET?

    背景 很多场景下我们都需要监控 ADO.NET,如:查看某些框架(ORM)生成的 SQL.如何在不能使用 SQL Profile 的情况下监控 SQL 呢?VS 为我们提供了一个工具,本文做一些介绍! ...

  9. Java中使用正则表达式获取网页中所有图片的路径

    public static List<String> getImageSrc(String htmlCode) { List<String> imageSrcList = ne ...

  10. ios成长之每日一遍(day 8)

    这几天都有一些任务要跟, 把ios的学习拉后, 看看要抓紧咯, 看看轮到的学习的是UITableView. BIDAppDelegate.h #import <UIKit/UIKit.h> ...