第一课——从main到WinMain
一、Visual C++6.0
- 由微软公司推出的基于Windows系统的可视化集成开发环境(IDE)
- 微软公司为其开发了功能强大的MFC(Microsoft Foundation Class,微软基础类库)
- 开发Windows应用程序的最佳选择
- 利用类将与用户界面设计有关的Windows API函数封装起来,通过MFC类库的方式提供给开发人员,大大提高了程序代码的可重用性
- 提供了功能强大的应用程序生成向导(AppWizard),能帮用户自动生成一个应用程序框架
二、Windows编程基础
基于Windows的两种编程方式:
(1)使用Windows的API函数,通常用C/C++语言按相应的程序框架进行编程。这些程序框架往往就程序应用提供相应的文档、范例和软件开发工具包
(2)使用“封装”方式,将SDK中的绝大多数函数、数据等按C++“类”的形式进行封装,并提供相应的应用程序框架和编程操作
重点是:
(1)程序入口
(2)窗口、资源等的创建和使用
(3)键盘、鼠标等所产生的事件或其他消息的接收和处理
三、第一个Windows程序
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
MessageBox(NULL, TEXT("Hello, World!"), TEXT("Hello"), 0);
return 0;
}
注:上面的C源程序是基于Win32应用程序的
1. Windows.h头文件
(1)定义了Windows的所有数据类型、函数调用、数据结构和符号常量
(2)它们是Windows应用程序文档中的一个重要部分
2. Windows程序的入口函数
(1)C/C++程序的入口函数是main,而Windows程序则是WinMain
(2)函数原型:int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
(3)WINAPI是一个“调用约定”宏,等价于__stdcall,其功能是规定参数从右向左压入堆栈、函数自身修改堆栈、机器码中的函数名前面自动加下划线、函数后面接@符号和参数的字节数。即则是一个函数调用约定“协议”,当然还有其他的协议,如MFC方式采用__cdecl调用约定(其功能就和__stdcall不同)
(4)第一个和第二个参数都是HINSTANCE(实例句柄)类型。HINSTANCE中,H代表Handle,是“句柄”的意思。句柄是一个应用程序用来识别某些资源、状态、模块等的数字。由于句柄唯一标识着对应的资源、状态、模块等,因而使用句柄就是使(调)用相应的资源、状态、模块。
(5)参数lpCmdLine用来指定程序的命令行,类型为LPSTR,但在C源程序中将其改为PSTR。这两种数据类型都合法且都是指向字符串的指针类型。其中STR是“STRING,字符串”的含义,是指以\0结尾的字符串,LP前缀表示“长指针”,在Win32中它与“P”前缀表示的“指针”含义相同
(6)参数nShowCmd用来指定程序最初显示的方式,它可以是正常、最大化或最小化来显示程序窗口
3. MessageBox函数
(1)一个Win32API函数,用来弹出一个对话框窗口,显示短信息
(2)原型:int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
(3)参数hWnd用来指定父窗口句柄(即对话框所在的窗口句柄)
(4)第二个和第三个参数用来指定显示的消息内容和对话框窗口的标题
(5)参数uType用来指定在对话框中显示的预定义的按钮和图标标识,它们是在winuser.h定义的一组以MB_开始的常数组合
(6)调用的实参中还涉及TEXT宏,它是用来对UNICODE编码的字符串的支持,此外还有_TXET和_T宏等,在Visual C++中,它们的作用是等同的
补充
【Win32】
Visual C++ 6.0仅支持32位的Windows程序开发,由于其Windows平台就称为Win32,故这里的Windows编程可直接理解为Win32编程。
第一课——从main到WinMain的更多相关文章
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...
- 留念 C语言第一课简单的计算器制作
留念 C语言第一课简单的计算器制作 学C语言这么久了. /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h> #include<stdlib.h ...
- MFC学习-第一课 MFC运行机制
最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...
- OpenCV 第一课(安装与配置)
OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...
- NeHe OpenGL教程 第一课:OpenGL窗口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Spark 3000门徒第一课随笔
昨晚听了王家林老师的Spark 3000门徒系列课程的第一课,把scala基础过了一遍,对ArrayBuffer有了新的认识: Array本身创建后不可修改ArrayBuffer可修改import s ...
- 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
版权声明:本文为博主原创文章,未经博主允许不得转载. 相关教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...
- ChartControl第一课简短的控件初步设计
WinForms Controls >Controls > Chart Control > Getting Started This document gives you a qui ...
- Qt Windows下链接子系统与入口函数(终结版)(可同时存在main和WinMain函数)
Qt Windows下链接子系统与入口函数(终结版) 转载自:http://blog.csdn.net/dbzhang800/article/details/6358996 能力所限,本讨论仅局限于M ...
随机推荐
- 记一次MySQL中Waiting for table metadata lock问题的处理
起因:由于需要,要把一张表的一个字段从不是 null 改成 可null,我用的Navicat Premium ,但是在保存的时候,工具无响应了,几个同事操作都是这样的,很奇怪,怀疑是不是由于表被锁了还 ...
- 关于css属性calc对于ie的态度
做的一个项目,布局的时候用到了max-height:calc(100% - 15px);在谷歌.火狐浏览器,进行下拉的时候,它的父元素会出现垂直滚动条,但是在IE就不可以. 然后在网上找了找,说在它的 ...
- Centos7.5 lnmp+mongodb扩展
安装NginxYUM源中没有Nginx,我们需要增加一个nginx的源nginx.repo # vi /etc/yum.repos.d/nginx.repo 源文件的内容 [nginx] name=n ...
- 【laravel】passport的scope作用域
1.根据作用域生成token $user->createToken($request->name,['test1'])->accessToken; 2.注册中间件 'scopes' ...
- PADS随记
在PADS,PCB板设计中,怎么一次就把丝印的大小设置好? CTRL+ALT+F 组合键 打开 选择过滤器(Filter) 如下图 去掉其他的勾选,只选择 Labels . 之后在板子上鼠标拖动选上 ...
- JS第一周学习笔记整理
目录 JS正式课第一周笔记整理 JS正式课第一周笔记整理 webstorm : 代码编辑器 浏览器: 代码解析器: Git : 是一个工具;用于团队协作开发项目管理代码的工具:在工作中用git.svn ...
- 企业网站被黑 dedecms漏洞修复办法
前段时间网站被黑了,从百度打开网站直接被劫持跳转到了彩票,du博网站上去,网站的首页index.html文件也被篡改成一些什么北京sai车,pk10,一些cai票的关键词内容,搞得网站根本无法正常浏览 ...
- while do while switch语句的简要分析
1 //// while是C语言的一个关键字,其后是使用一个小括号中的条件表达式来做为执行循环的条件, 2 ////也就是说当条件表达式的结果为真时执行大括号里面的的程序内容, 3 ////而当条件表 ...
- Kylin 几个sql报错原因 汇总
Can't create EnumerableAggregate! while executing SQL由distinct count引起的错误 null while executing SQLjo ...
- C# 面试题 (二)
1. 什么是C#? C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.C#是一种安全的.稳定的.简单的.优雅的,由C和C++衍生出来的面向对象的编程语言. ...