当前位置: 首页 > news >正文

【Window编程】Step.1 我的第一个Windows程序

还记得初学c语言和c++时写的hello,world.

#include<stdio.h>
int main()
{
   printf("Hello,world!");
   return 0;
}

#include<iostream>
using namespace std;
int main()
{
   cout<<"Hello,world!"<<endl;
   return 0;
}

而现在我踏入了Windows编程的大门,让我们也从hello,world程序开始

#include<windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance ,
 PSTR szCmdLine , int iCmdShow)
 {
 	MessageBox(NULL,TEXT("Hello,windows!"),TEXT("HelloWin32API!"),0);
 	return 0;
 }

出自《Windows程序设计:第五版》.

·几乎所有用C语言编写的windows程序都有的预处理器(preprocessor)指令:

#include<windows.h>

Windows.h是一个最重要的包含文件,它囊括了若干其他的windows头文件。

·WINDEF.H 基本数据类型的定义

·WINNT.H 支持Unicode的类型定义

·WINBASE.H 内核函数

·WINUSER.H 用户界面函数

·WINGDI.H 图形设备接口函数


Windows的程序入口是WinMain().在WINBASE.H中定义如下

int
WINAPI
WinMain(
   HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine,
   int nShowCmd
   );
LPSTR和PSTR 都是指向字符串的指针,前缀LP代表长指针(Long Pointer),是16位Windows的产物。
现在写作PSTR.(win32)

Windows程序在变量命名上采用“匈牙利标记法”(Hungarian Notation).

变量名都有一个短前缀,表明该变量的数据类型。

·i表示int.

·sz表示“以零结尾的字符串”(string terminated with a zero).

WinMain()的返回值定义为int.

WINDEF.H 中定义 #define WINAPI __stdcall

"这条语句规定了一种函数调用约定,表明如何生成在堆栈中放置函数调用参数的机器代码。"

【update】(_stdcall是汇编相关的东西有兴趣的可以去search一下)

WinMain()的第一个参数叫 “实例句柄”(Instance Handle).应用程序当前实例的句柄。

第二个参数 hPrevlnstance:应用程序的先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个32位程序,该参数总为NULL。如果需要检测另外一个实例是否已经存在,则使用CreateMutex函数创建一个独一无二的名字。即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将返回 ERROR_ALREADY_EXISTS,这就表明应用程序有另外一个实例存在,因为它首先创建了互斥名。

第三个参数 lpCmdLine:指向应用程序命令行的字符串的指针,不包括执行文件名。获得整个命令行,参看GetCommandLine。第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。例如:在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe),此时系统会将D:\sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。要在VC++开发环境中向应用程序传递参数,可以单击菜单【Project】→【Settings】,选择“Debug”选项卡,在“Program arguments”编辑框中输入你想传递给应用程序的参数。

第四个参数 nCmdShow:指明窗口如何显示。

可选值为

SW_HIDE:隐藏窗口并且激活另外一个窗口。
SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。
SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。
SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。不激活窗口。
SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。


from《window程序设计:第五版》.


相关文章:

  • [codevs 1296] 营业额统计
  • 【Window程序设计:第五版】翻译勘误 转载
  • 【hdu 1754】I Hate It 【线段树 训练1】
  • 【HDU 1394】Minimum Inversion Number 【线段树 训练2】
  • 【Windows编程】Step.2 消息循环机制
  • 【CDOJ 1334】 郭大侠与Rabi-Ribi
  • 【CDOJ 1074】秋实大哥搞算术【栈计算表达式】
  • 【CDOJ 1329】卿学姐与魔法
  • C++ STL 之 BitSet
  • [CDOJ 1343] 卿学姐失恋了
  • 【CDOJ 1342】郭大侠与甲铁城 【离线树状数组】
  • 【CDOJ 1350】卿学姐失恋了Ⅱ
  • 【CDOJ】柱爷与咸鱼神功
  • 【CDOJ 1357】柱爷与最大区间和
  • 【CDOJ 1323】柱爷的下凡
  • AWS实战 - 利用IAM对S3做访问控制
  • CEF与代理
  • Consul Config 使用Git做版本控制的实现
  • ECMAScript入门(七)--Module语法
  • k8s 面向应用开发者的基础命令
  • linux安装openssl、swoole等扩展的具体步骤
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • orm2 中文文档 3.1 模型属性
  • PhantomJS 安装
  • Vue ES6 Jade Scss Webpack Gulp
  • 高性能JavaScript阅读简记(三)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 如何优雅地使用 Sublime Text
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Gradle第一次构建Java程序
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 详解移动APP与web APP的区别
  • 一个完整Java Web项目背后的密码
  • 用简单代码看卷积组块发展
  • 正则与JS中的正则
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Nginx实现动静分离
  • %check_box% in rails :coditions={:has_many , :through}
  • (007)XHTML文档之标题——h1~h6
  • (3)(3.5) 遥测无线电区域条例
  • (java)关于Thread的挂起和恢复
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)windows配置JDK环境
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .form文件_一篇文章学会文件上传
  • .gitignore
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core Web APi类库如何内嵌运行?
  • .Net MVC + EF搭建学生管理系统