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相关推荐

  1. c语言程序设计和windows编程区别是什么呢。

    c语言程序设计和windows编程区别是什么呢. c程序设计和用c语言windows编程有什么区别呢.?我怎么都是c里面好多不一样,要不不一样那学c程序有什么用呢. C程序设计仅仅只是讲C语言自身的规 ...

  2. c语言与汇编语言混合编程实验,C语言与汇编语言混合编程实验

    混合编程方法: 模块链接法 汇编指令嵌入法 1: 模块链接法则 模块链接法是指分别用汇编语言和C语言实现独立的模块(或子程序),再用链接程序把各模块生成的obj文件连接成一个可执行程序. 1:C语言调 ...

  3. 计算机编程实验,c语言下的计算机软件编程实验

    c语言下的计算机软件编程实验 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 C语言下的计算机软件编程实验 摘 要C语言是计算机应用的 ...

  4. 汇编c语言混合编程pdf,C语言及汇编语言混合编程的方法.pdf

    维普资讯 1993矩 化 工 电 子 计 算 第 2期 C语言与汇编语言混合编程的方法 f/1) (南京犬李葛于如丽顶吾学系) 摘 要 本文通过实例阐述了当前较为漉行的两种c语盲 (Microsoft ...

  5. c语言混合编程 pdf,C语言与汇编语言混合编程的方法.pdf

    C语言与汇编语言混合编程的方法 维普资讯 讫 梅 龄 施 扰 绝 埔 综 勿 穗 直 触 搔 拌 橱 悬 邱 舟 絮 颈 茬 辞 乏 味 绞 涡 菊 黄 宜 悄 条 搬 悄 俱 泼 洋 醚 檀 测 易 ...

  6. 编程和数学是什么关系?编程学习为什么会这么火呢?

    近两年,编程学习成为了一个热门话题,其热度不亚于之前的奥数,为什么突然会有这么多人想要学编程,其中不限于互联网从业者,而更多是中小学学生,那么,今天悉之君就带大家一探究竟. 什么是编程? 提到编程,估 ...

  7. 圣诞礼物c语言代码大全,windows编程入门二:圣诞节的礼物——从“屏幕飘雪”程序说起...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这段是定义全局变量和写一个窗口.大家注意ShowWindow(hwnd,SW_SHOWMINIMIZED),这说明当创建时是最小化的窗口. #includ ...

  8. c语言汇编混合编程方法,C语言和汇编语言混合编程方法

    摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言.两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用.本文通过具体的实例,说明了混合编程的基本方法, ...

  9. 风变编程有c语言吗,风变编程Python小课初体验:用有趣好玩的方式学编程

    原标题:风变编程Python小课初体验:用有趣好玩的方式学编程 经过约一个月时间的学习,今天,我终于学完风变编程Python小课的Python基础语法课程啦!从零基础的"小白"到现 ...

最新文章

  1. Java删除properties配置文件中指定键值的代码
  2. Linux下crontab命令的用法
  3. 无向图求割点(找桥)tarjan
  4. textarea内容有换行时存入数据库丢失问题的解决 (转载)
  5. 【2007-3】【分硬币】
  6. php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
  7. 导入失败 mysql_服务器宕机导致mysql出问题的处理方法
  8. Java备份Oracle数据库
  9. Mysql中把varchar类型的字段转化为tinyint类型的字段
  10. opipe--一款基于java的自定义“命令”管道
  11. 设计模式之模板方法模式
  12. 大学生HTML作业篮球网页 HTML作业篮球网页期末作业 HTML+CSS篮球网页 HTML学生作业体育篮球网页
  13. win10提高开机速度的设置教程 电脑五秒开机优化步骤
  14. 最新PyCharm基本使用(3)------编码(Code)、重构(Refactor)
  15. 免费在线使用微软文字转语音工具(附详细转换步骤)
  16. Windows 10 操作系统 System Interrupt 系统中断 CPU 占用率高的原因和解决方法
  17. 通过powershell查询OU中被禁用的AD账号,并删除他们的所属组
  18. Taro之百度小程序一键登录埋点统计
  19. python自动办公pdf_Python自动化办公实战教程2020最新带源码
  20. Java indexOf() 方法

热门文章

  1. 酷狗繁星的作品MV怎么下载?
  2. arduino i2c 如何写16位寄存器_Arduino只是拿来玩的?你错了!教你用它自制一个非常实用的小产品|智能灌溉控制器...
  3. 【杂项】通过Excel为字符串产生条码
  4. Python迭代器、(高阶函数)、内置函数
  5. _014_Linux_VMware该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权
  6. 汽车养护及美容【2】
  7. 企业网站建设专家-PageAdmin企业网站管理系统
  8. c语言中gets全拼,25英文【25英文英语头条】- 25英文知识点 - 中企动力
  9. JS Date比较时间的先后 - Kaiqisan
  10. 从1G免费邮箱看互联网新一轮“圈地运动”