win32编程与c语言的关系,Windows 编程简介 c/c++/win32
Windows 编程简介
一、从C/C++到Windows编程
前面我们学习的C/C++程序都是DOS程序(或称为Windows控制台程序),也就是现在大学里的开设的《C/C++程序设计》的内容,这些程序由于不涉及到Windows 编程的细节,因此比较容易入门学习,这对训练初学者的编程思想是很有用的,也是有益的。但是当我们基本掌握了C/C++程序设计后,就不能仅仅停留在DOS下(或Windows控制台下)编写、运行程序。我们应该从编程思想的训练到Windows实用编程的转变。
一个最简单的Windows C程序。
include
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL,"Hello 欢迎使用Turbo C for Windows 集成实验与学习环境!","我的第一个Windows程序",MB_OK);
return 0;
}
程序的运行结果是:
程序解析:
1、windows.h是每一个Windows程序都需要的头文件。
2、WinMain函数是所有Windows C程序的入口,类似于DOS C中的main函数。
3、MessageBox是一个Win32 API函数(API,Application Programming Interface 应用程序接口),其作用是弹出一个对话框,显示消息的内容。该函数的第一个参数是用来指定父窗口句柄,即对话框所在的窗口句柄。第二个参数是用来显示消息的内容(你可以修改成你想显示的内容)。第三个参数是 对话框标的标题,如本例的“我的第一个Windows程序”,第四个参数是指定对话框中显示的按钮,试一试,将MB_OK修改成MB_OKCANCEL,运行一下程序会出现什么结果,再试一试修改成MB_RETRYCANCEL
试一试将个求1+2+3+…+100的和的DOS C程序修改成Windows 程序。
include "stdio.h"
main()
{
int sum=0,i;
for(i=1;i<=100;i++)
{
sum=sum+i;
}
printf("1-100自然书数的和是:%d\n",sum);
}
参考程序:
include
include
include
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
int sum=0,i;
char str1[40]="1-100自然书数的和是:",str2[10];
for(i=1;i<=100;i++)
{
sum=sum+i;
}
itoa(sum,str2,10); /将整型变量sum的运算结果转化字符串str2,以方便显示/
strcat(str1,str2); /将str1的值(1-100自然书数的和是:)与str2连接,以方便显示/
MessageBox(NULL,str1,"第二个Win32程序",MB_OK);
return 0;
}
运行结果:
二、Windows 程序简介
(1)Windows C程序的组成:
1.C程序源文件,扩展名为.c或.cpp
2.头文件,扩展名为.h
3.资源文件,扩展名为.rc
(2)源程序的组成结构
Windows C程序有相对固定的基本结构,一般有入口函数WinMain和窗口函数。
1、WinMain函数
是所有Windows C程序的入口,类似于DOS C的main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。消息循环是整个程序运行的核心。
WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环
a、WinMain函数的说明:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
参数说明:
hInstance 应用程序当前实例句柄
hPrevInstance 前一个实例句柄,在32位系统中该参数永远是NULL
szCmdLine 程序运行时的命令行参数
iCmdShow 程序运行时的显示方式,如最大化、最小化、隐藏显示等。
b、初始化
初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分。
这是固定格式,所有的Windows程序基本一样,记住即可,具体参见下面的程序实例的注释。
2、窗口函数
窗口函数定义了Windows C程序对接受到的不同消息的响应,其中包含了应用程序对各种可能接收到的消息的处理过程,是消息处理分支控制语句的集合。通常窗口函数是有一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,就会执行相应case 语句下的程序模块来完成相应的功能。
窗口函数说明:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
参数说明:
hwnd 窗口句柄
message 代表所处理消息的消息值
wParam 消息的附加参数,是message的进一步信息
lParam 消息的附加参数,是message的进一步信息
一般用法:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
switch (message)
{
case 常数1:
...
case 常数2:
...
...
case WM_DESTROY:
PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理
}
窗口函数的主体是消息处理语句,该语句是有一系列case语句组成。我们学习者自需要根据窗口可能收到的消息在case语句中编写相应的处理程序即可。
三、一个简单的Windows C程序:Hello World程序
include
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //窗口函数声明
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) //WinMain函数说明
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ; //窗口句柄
MSG msg ; //消息结构
WNDCLASS wndclass ; //窗口类结构
//下面是窗口类的定义
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//加载图标供程序使用
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //加载鼠标指针供程序使用
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//获取一个图形对象,在这个例子中,是获取绘制窗口背景的刷子
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
//下面是窗口类的注册
if (!RegisterClass (&wndclass))//为程序窗口注册窗口类
{
return 0 ;
}
//根据窗口类创建窗口
hwnd = CreateWindow (szAppName, TEXT ("一个简单的Win32程序"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
) ;
//显示窗口
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ; //指示窗口刷新自身
//消息循环
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ; //转换某些键盘消息
DispatchMessage (&msg) ; //将消息发送给窗口过程
}
return msg.wParam ;
}
//窗口函数
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ; //开始窗口绘制
GetClientRect (hwnd, &rect) ; //获取窗口客户区的尺寸
DrawText (hdc, TEXT ("Hello World!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; //显示Hello World,可以修改程序你要显示的内容
EndPaint (hwnd, &ps) ; //结束窗口绘制
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理
}
提示:该程序的源代码在《简单的入门程序实例》中
四、总结
所有Windows 程序的基本结构都与上面的实例相同或相近(说明:有的程序是将窗口类和窗机窗口封住成函数后调用,其实质是一样的),记住一个例子,编写其他程序时,在其上面修改即可。
说明:上面的程序没有带资源文件,在《简单的入门程序实例》中有一个带有资源文件的记事本程序源代码,程序运行界面。
一点建议:由于Windows 编程精大博深,初学者想把什么都搞明白是不可能的,要学会一点“不求甚解” ,这里说的“不求甚解”并不是指不认真学习。初学者最怕钻牛角尖:一个问题不明白,就在那里卡住,非解决它不可——这种方法是不可取的。
首先,它会严重打击你的自信心,使你丧失继续学习下去的兴趣;
其次,这样浪费了许多时间。因此学习时要给自己留一些“不懂”的余地。例如第一遍读书时要允许自己似懂非懂,用规定的时间(例如两个星期)把它看完,然后开始第二遍学习。开始时许多不明白的东西,下次就容易理解多了。
win32编程与c语言的关系,Windows 编程简介 c/c++/win32相关推荐
- c语言程序设计和windows编程区别是什么呢。
c语言程序设计和windows编程区别是什么呢. c程序设计和用c语言windows编程有什么区别呢.?我怎么都是c里面好多不一样,要不不一样那学c程序有什么用呢. C程序设计仅仅只是讲C语言自身的规 ...
- c语言与汇编语言混合编程实验,C语言与汇编语言混合编程实验
混合编程方法: 模块链接法 汇编指令嵌入法 1: 模块链接法则 模块链接法是指分别用汇编语言和C语言实现独立的模块(或子程序),再用链接程序把各模块生成的obj文件连接成一个可执行程序. 1:C语言调 ...
- 计算机编程实验,c语言下的计算机软件编程实验
c语言下的计算机软件编程实验 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 C语言下的计算机软件编程实验 摘 要C语言是计算机应用的 ...
- 汇编c语言混合编程pdf,C语言及汇编语言混合编程的方法.pdf
维普资讯 1993矩 化 工 电 子 计 算 第 2期 C语言与汇编语言混合编程的方法 f/1) (南京犬李葛于如丽顶吾学系) 摘 要 本文通过实例阐述了当前较为漉行的两种c语盲 (Microsoft ...
- c语言混合编程 pdf,C语言与汇编语言混合编程的方法.pdf
C语言与汇编语言混合编程的方法 维普资讯 讫 梅 龄 施 扰 绝 埔 综 勿 穗 直 触 搔 拌 橱 悬 邱 舟 絮 颈 茬 辞 乏 味 绞 涡 菊 黄 宜 悄 条 搬 悄 俱 泼 洋 醚 檀 测 易 ...
- 编程和数学是什么关系?编程学习为什么会这么火呢?
近两年,编程学习成为了一个热门话题,其热度不亚于之前的奥数,为什么突然会有这么多人想要学编程,其中不限于互联网从业者,而更多是中小学学生,那么,今天悉之君就带大家一探究竟. 什么是编程? 提到编程,估 ...
- 圣诞礼物c语言代码大全,windows编程入门二:圣诞节的礼物——从“屏幕飘雪”程序说起...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这段是定义全局变量和写一个窗口.大家注意ShowWindow(hwnd,SW_SHOWMINIMIZED),这说明当创建时是最小化的窗口. #includ ...
- c语言汇编混合编程方法,C语言和汇编语言混合编程方法
摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言.两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用.本文通过具体的实例,说明了混合编程的基本方法, ...
- 风变编程有c语言吗,风变编程Python小课初体验:用有趣好玩的方式学编程
原标题:风变编程Python小课初体验:用有趣好玩的方式学编程 经过约一个月时间的学习,今天,我终于学完风变编程Python小课的Python基础语法课程啦!从零基础的"小白"到现 ...
最新文章
- Java删除properties配置文件中指定键值的代码
- Linux下crontab命令的用法
- 无向图求割点(找桥)tarjan
- textarea内容有换行时存入数据库丢失问题的解决 (转载)
- 【2007-3】【分硬币】
- php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
- 导入失败 mysql_服务器宕机导致mysql出问题的处理方法
- Java备份Oracle数据库
- Mysql中把varchar类型的字段转化为tinyint类型的字段
- opipe--一款基于java的自定义“命令”管道
- 设计模式之模板方法模式
- 大学生HTML作业篮球网页 HTML作业篮球网页期末作业 HTML+CSS篮球网页 HTML学生作业体育篮球网页
- win10提高开机速度的设置教程 电脑五秒开机优化步骤
- 最新PyCharm基本使用(3)------编码(Code)、重构(Refactor)
- 免费在线使用微软文字转语音工具(附详细转换步骤)
- Windows 10 操作系统 System Interrupt 系统中断 CPU 占用率高的原因和解决方法
- 通过powershell查询OU中被禁用的AD账号,并删除他们的所属组
- Taro之百度小程序一键登录埋点统计
- python自动办公pdf_Python自动化办公实战教程2020最新带源码
- Java indexOf() 方法
热门文章
- 酷狗繁星的作品MV怎么下载?
- arduino i2c 如何写16位寄存器_Arduino只是拿来玩的?你错了!教你用它自制一个非常实用的小产品|智能灌溉控制器...
- 【杂项】通过Excel为字符串产生条码
- Python迭代器、(高阶函数)、内置函数
- _014_Linux_VMware该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权
- 汽车养护及美容【2】
- 企业网站建设专家-PageAdmin企业网站管理系统
- c语言中gets全拼,25英文【25英文英语头条】- 25英文知识点 - 中企动力
- JS Date比较时间的先后 - Kaiqisan
- 从1G免费邮箱看互联网新一轮“圈地运动”