很多同学在学习了C++后,会发现,我们用C++控制台写出的程序,总觉得不是我们想要的样子,每次运行程序都只是出现一个黑窗口,一点也不美观,,我们学习C++,大多数的同学都是想要自己写一些小游戏,如果要自己写小游戏,只有C++基础是不够的,现在的游戏大多都是有自己的窗口,在窗口中还有很多的菜单按钮,这就涉及到另一个概念------Windows窗口可视化编程。Windows可视化编程就是我们在电脑上的APP的样子。下面我们就来初步认识一下Windows窗口可视化编程。

目录

可视化编程代码结构包含

头文件:

程序入口点:

窗口设计:

WNDCLASSEX注册:

窗口创建命令:

完整代码如下

运行结果:


可视化编程代码结构包含

头文件:

和C++控制台程序中的#include <iosteam>一样的原理。

//定义宏
#include <windows.h>
#include <tchar.h>
#include <stdlib.h>
#include <string.h>

程序入口点:

在控制台应用程序中我们的程序始终是从mian函数开始的,同样的在可视化编程的过程中,我们也需要一个节点来识别程序的开始,这个开始的标志就是 WinMain函数,具体结构如下

int CALLBACK WinMain(
_In_HINSTANCE hInstance,
_In_HINSTANCE hPrevInstance,
_In_LPSTR lpCmdline,
_In_int nCmdShow
);

窗口设计:

在这些前期准备条件介绍完之后我们就可以开始设计我们想要的窗口类了,

窗口信息:所谓的窗口信息就是在Win Main函数中添加功能,在窗口信息中我们可以自己定义自己心中的窗口样式,包括窗口的大小,窗口的颜色,窗口图标,窗口名称等等。在窗口设计中我们要用到的结构如下。

WNDCLASSEX wcex;wcex.cbSize         = sizeof(WNDCLASSEX);
wcex.style          = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc    = WndProc;
wcex.cbClsExtra     = 0;
wcex.cbWndExtra     = 0;
wcex.hInstance      = hInstance;
wcex.hIcon          = LoadIcon(wcex.hInstance, IDI_APPLICATION);
wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName   = NULL;
wcex.lpszClassName  = szWindowClass;
wcex.hIconSm        = LoadIcon(wcex.hInstance, IDI_APPLICATION);

WNDCLASSEX注册:

好现在我们已经用代码将窗口的基本信息表现出来了,想要将这个窗口在Windows桌面展示出来,有一个前期准备过程。

我们就要将结构WNDCLASSEX注册到Windows,我们就要用到函数RegisterClassEx,具体形式如下

if (!RegisterClassEx(&wcex))
{MessageBox(NULL,_T("Call to RegisterClassEx failed!"),_T("Windows Desktop Guided Tour"),NULL);return 1;
}

窗口创建命令:

现在我们可以创建窗口了使用CreateWindowEx函数,

static TCHAR szWindowClass[] = _T("DesktopApp");
static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application");
//窗口名称,双引号中可以自定义窗口名称。
HWND hWnd = CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW,szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 100,NULL,NULL,hInstance,NULL
);
if (!hWnd)
{MessageBox(NULL,_T("Call to CreateWindowEx failed!"),_T("Windows Desktop Guided Tour"),NULL);return 1;
}

现在窗口已经创建,我们要告诉Windows使窗口可见。代码如下


ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

细心的同学会发现,在上面的过程中,我们只讲到了窗口的创建,还没有提到窗口的交互。下面我们就来简单的了解窗口的交互,窗口的交互在计算机看来就是消息的处理。代码如下

MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{TranslateMessage(&msg);DispatchMessage(&msg);
}return (int) msg.wParam;

好的,截至当前我们已经简单的了解了Windows可视化编程的大概结构,想要创建更加漂亮的窗口,这点知识肯定使不够的,但是我们已经了解想要用C++写一个属于自己的小游戏的基础和原理。想要了解更多的Windows窗口编程可以关注我。我将从0开始为大家讲解过程。

完整代码如下

#include<Windows.h>
#include<tchar.h>
#include <stdlib.h>
#include <string.h>static TCHAR szWindowClass[] = _T("My Class");
static TCHAR szTitle[] = _T("Windows应用程序");HINSTANCE hInst;LRESULT CALLBACK WindowProc(_In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam
);int CALLBACK WinMain(_In_ HINSTANCE hInstance,_In_ HINSTANCE hPrevInstance,_In_ LPSTR lpCmdLine,_In_ int nCmdShow
) {WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WindowProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wcex.lpszMenuName = NULL;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);if (!RegisterClassEx(&wcex)) {MessageBox(NULL,_T("Call to RegisterClassEx failed!"),_T("Windows Desktop Guided Tour"),NULL);return 1;}hInst = hInstance;HWND hWnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 100,NULL,NULL,hInstance,NULL);if (!hWnd){MessageBox(NULL,_T("Call to CreateWindow failed!"),_T("Windows Desktop Guided Tour"),NULL);return 1;}ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);MSG msg;while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return (int)msg.wParam;
}LRESULT CALLBACK WindowProc(_In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam
) {PAINTSTRUCT ps;HDC hdc;TCHAR greeting[] = _T("Hello World!");switch (uMsg){case WM_PAINT:hdc = BeginPaint(hwnd, &ps);TextOut(hdc,5, 5,greeting, _tcslen(greeting));EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);break;}return 0;
}

运行结果:

经典Hello Word窗口表示,可视化编程入门。相关推荐

  1. Apache POI(Word)教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 IT宝库整理的Apache POI Word入门教程 - 从基本到高级概念的简单简单步骤学习Apache POI Word,其中包括概述,Apache POI安装,核心类,文档,段落,边框, ...

  2. python可视化窗口编程-Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  3. python编程入门经典 评分-豆瓣评分爆炸!Python+机器学习经典图书

    全场自营图书每满 100 减 50 元 .满 200 元减 100 元, 另外当当还特意为[机器学习算法与Python实战]读者提供了一批可与满减叠加使用的"满 200 减 40" ...

  4. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

  5. Oracle编程入门经典 第9章 掌握SQL*Plus

    目录 9.1             高级启动选项... 1 9.1.1         LOGON.. 2 9.1.2         设置描述文件... 2 9.1.3         START ...

  6. Oracle编程入门经典 第2章 SQLPlus和基本查询

    怎样使用SQL*Plus工具连接数据库以及执行查询 怎样配置SQL*Plus,以格式化查询结果 SQL语句的不同种类 怎样在数据库上编写查询来查看数据 怎样修改存储在数据库中的数据 2.1 SQL*P ...

  7. python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载

    [300dpi高清版] Python基砒教程(第2版)LHD,pdf Head. First. Python中文版pdf [ Python3程序开发指南第二版pdf [ thon编程第4版)]( Pr ...

  8. Android 4游戏编程入门经典

    <Android 4游戏编程入门经典> 基本信息 原书名:Beginning Android 4 Games evelopment 作者: (美)Mario Zechner Robert ...

  9. VS2019/MFC编程入门——文档、视图和框架:分割窗口

    上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  10. Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

最新文章

  1. AWS攻略——使用CodeCommit托管代码
  2. 大龄计算机考研 考研帮,大龄学子考研之路
  3. java单态模式_Java单态模式
  4. 五种应该避免的代码注释
  5. DataTable RowFilter 过滤数据
  6. export function函数传参_从底层看前端(七)—— JavaScript到底有多少种函数?
  7. MATLAB教程(1) MATLAB 基础知识(2)
  8. 【实践】微博多尺度序列推荐算法实践.pdf(附下载链接)
  9. HDU2026 首字母变大写【入门】
  10. react多个网络请求_react中网络请求的优化!
  11. 最全iOS数据存储方法介绍:FMDB,SQLite3 ,Core Data,Plist,Preference偏好设置,NSKeyedArchiver归档...
  12. ReactNative 仿造 ofo 共享单车快速开发的app
  13. 微信小程序 java高校科研管理系统
  14. secedit.exe本地安全策略命令
  15. python代码写龙卷风_python - 龙卷风服务器二进制可执行文件
  16. 南京大学计算机专业复试面试,2014 CS复试全面回忆 上机真题 面试血泪史
  17. 看完这篇文章,线上再遇到Jedis「Redis客户端」异常相信你不再怕了!
  18. 高级远程办公解决方案 ETX ,用于桌面虚拟化和远程访问图形要求苛刻的应用程序
  19. 苹果在华一天收入可抵与唯冠6000万美元
  20. 优质网站分享,无需下载

热门文章

  1. 计算机网络军训口号,霸气押韵的16字军训口号(精选50句)
  2. 异常处理与自定义异常
  3. SpringBoot系列(5):SpringBoot对JSON数据的处理
  4. Docker从理论到实践(二)------配置Docker镜像源加速器(部分使用效果已不太理想)
  5. Spring框架——day04参数校验和文件上传
  6. 给Windows机器创建软连接
  7. APP被苹果App Store拒绝的79个原因【转】
  8. Eclipse探秘-第一章-Eclipse启动(1)
  9. .xls和.xlsx 有什么区别?
  10. Linux修改用户名(主机名)