博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Visual Studio 2019 + Visual C++——创建Visual C++ Hello World! 程序
阅读量:2036 次
发布时间:2019-04-28

本文共 3999 字,大约阅读时间需要 13 分钟。

基本概念

Visual C++:Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。

API 

装备情况(DC)

在Windows中,一切能在显示器上看到的多是图形,不只包含点、线、矩形、圆等,也包含文字、字体。对用户来说文字和图片是分歧的,但它们在实质上多是图形,都需求在显示器上画出来。这也是Windows被称作图形操作零碎的缘由。Windows不许可我们直接拜访硬件,如键盘、显示器、打印机等,在与这些硬件通讯前要取得装备情况(Device Context,简称 DC),进而直接的拜访硬件。

装备情况有时也被称为装备上下文或装备描绘表。

所谓装备情况,就是与以后硬件装备有关的各类信息,它是硬件装备的笼统。也就是说,装备情况就代表以后的硬件。与文字输入、图形绘制有关的函数,在运用时大都需求传入一个参数,就是装备情况句柄。获取装备情况句柄有多种方法,常用的是 BeginPaint 函数。画图完成后,还要释放句柄,运用 EndPaint 函数。

BeginPaint 和 EndPaint 函数

当发作 WM_PAINT 事情时,使用程序开端画图。画图之前需求先挪用 BeginPaint 函数告诉 Windows,通知它以后程序需求运用显示器,你布置一下吧。BeginPaint 函数履行终了就前往装备情况句柄,接下来就可以运用 GDI 函数画图了。画图完毕后,也需求挪用 EndPaint 函数告诉Windows,通知它画图完毕了,你可以持续前面的任务了。

TextOut 函数

TextOut 函数可以在客户区输入一段文本,原型为:

BOOL TextOut( HDC hdc, //装备情况句柄 int nXStart, //开端输入地位的x坐标 int nYStart, //开端输入地位的y坐标 LPCTSTR lpString, //要输入的字符串 int cbString //字符串的长度 );

每当发作WM_PAINT事情时,窗口就会发作重绘,这个时分需求向窗口输入文字:

LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){     HDC hdc; //装备情况句柄     PAINTSTRUCT ps; //存储画图情况的相干信息     TCHAR szText[20] = TEXT("欢迎离开C言语中文网");     switch (message){         case WM_PAINT: //开端画图并前往情况句柄             hdc = BeginPaint (hwnd, &ps); //输入文字             TextOut(hdc, 50, 50, szText, wcslen(szText)); //完毕画图并释放情况句柄             EndPaint (hwnd, &ps) ;             return 0 ;         case WM_DESTROY:             PostQuitMessage(0) ;             return 0 ;     }     return DefWindowProc(hwnd, message, wParam, lParam) ; }

阐明: 

1) PAINTSTRUCT 构造体用来保管与画图情况有关的信息,本教程不会运用到,不再解说,有兴味的读者可自行Google或百度。

2) BeginPaint 和 EndPaint 函数用来开端画图和完毕画图,必需成对呈现,输入文字或绘制图形的代码也必需放在两个函数之间。

3) 字符串普通运用宽字符,对应的盘算字符串长度的函数为 wcslen()。

DrawText函数

TextOut 在一个终点开端输入文本,可以准确定位,不克不及主动换行;DrawText 在指定区域内输入文本,可以掌握格局对齐(居左、居中、居右),可以换行。

DrawText 在外部其实也是挪用TextOut ,不外它作了许多处置,比方 DrawText 无需晓得输入若干个字符。更主要的是,DrawText 可以处置换行符而 TextOut 不克不及,从这个角度看,DrawText 应当是一种更初级的用法,是在TextOut根底上的封装。DrawText 的原型是:

int DrawText( HDC hDC, //装备情况句柄 LPCTSTR lpString, //将要输入的字符串 int nCount, //字符串的长度 LPRECT lpRect, //指向一个矩形区域的构造体 RECT 的指针 UINT uFormat //输入格局 );

阐明:

1) 假如 nCount 为 -1,则标明 lpString 指向的字符串是以'\0'完毕的,DrawText 会主动盘算字符数。

2) 参数 uFormat 有四种取值,它们可以恣意组合:

DT_CALCRECT:这个参数比拟主要,可以使 DrawText 函数盘算出输入文本的尺寸。假如输入文本有多行,DrawText 函数运用 lpRect 界说的矩形的宽度,并扩大矩形的底部以包容输入文本的最初一行。假如输入文本只要一行,则 DrawText 函数改动矩形的左边界,以包容下注释行的最初一个字符。呈现上述任何一种状况。

DT_CENTER:指定文本程度居中显示。

DT_VCENTER:指定文本垂直居中显示。该标志只在单行文本输入时无效,所以它必需与DT_SINGLELINE联合运用。

DT_SINGLELINE:单行显示文本,回车和换行符都不执行。

操作步骤

1、打开Visual Studio 2019

2、创建新项目

3、编写代码 

////  函数: WndProc(HWND, UINT, WPARAM, LPARAM)////  目标: 处理主窗口的消息。////  WM_COMMAND  - 处理应用程序菜单//  WM_PAINT    - 绘制主窗口//  WM_DESTROY  - 发送退出消息并返回////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){    switch (message)    {    case WM_COMMAND:        {            int wmId = LOWORD(wParam);            // 分析菜单选择:            switch (wmId)            {            case IDM_ABOUT:                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);                break;            case IDM_EXIT:                DestroyWindow(hWnd);                break;            default:                return DefWindowProc(hWnd, message, wParam, lParam);            }        }        break;    case WM_PAINT:        {            PAINTSTRUCT ps;            HDC hdc = BeginPaint(hWnd, &ps);            // TODO: 在此处添加使用 hdc 的任何绘图代码...            EndPaint(hWnd, &ps);        }        break;    case WM_DESTROY:        PostQuitMessage(0);        break;    default:        return DefWindowProc(hWnd, message, wParam, lParam);    }    return 0;}

 修改

case WM_PAINT:        {            PAINTSTRUCT ps;            RECT rect;            HDC hdc = BeginPaint(hWnd, &ps);            // TODO: 在此处添加使用 hdc 的任何绘图代码...            GetClientRect(hWnd, &rect); DrawText(hdc, TEXT("Hello World!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);            EndPaint(hWnd, &ps);        }        break;

运行结果

参考文章

转载地址:http://pggaf.baihongyu.com/

你可能感兴趣的文章
数据处理过慢的问题分析(涉及插入查询)
查看>>
JVM线程状态,park, wait, sleep, interrupt, yeild 对比
查看>>
java.lang.Thread.State:WAITING(parking)
查看>>
Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?
查看>>
swagger默认访问地址
查看>>
redis-desktop-manager 的简单使用
查看>>
python+Eclipse+pydev环境搭建
查看>>
python2.7安装paramiko 出现import winrandom importerror
查看>>
redis cluster 集群的一些操作命令
查看>>
redis cluster 全部宕机后重启会自动恢复集群状态
查看>>
python 一篇搞定所有的异常处理
查看>>
python 中全局变量的修改
查看>>
Python logging log日志写入文件
查看>>
分析验证zuul支持做外部网关
查看>>
基于netty的高性能RPC服务器技术简介
查看>>
Java乐观锁悲观锁、synchronized,重入锁 (ReentrantLock)处理并发(互斥同步、非互斥同步)
查看>>
MySQL和Postgresql的区别
查看>>
开源RPC(gRPC/Thrift)框架性能评测
查看>>
《hadoop学习》关于hdfs中的namenode和datanode详解
查看>>
FastDFS的一些总结
查看>>