Lcc-win32面向Windows编程图解教程
- 格式:doc
- 大小:1.19 MB
- 文档页数:7
在上一章的基础上,一样一样地学习SDK编程的内容,大家只要跟着教程多动手,多看帮助。
这三章攻克之后,后面就不难了。
一、注册窗口类
“ATOM MyRegisterClass(HINSTANCE hInstance)”中的ATOM是无符号整数类型,参数hInstance是当前窗口的句柄,这里的关键是API函数RegisterClassEx(&wc),先看一下这个函数的原型。
这个函数的参数是一个结构体,你想要申请一个什么样的窗口,要事先设置好,然后传给这个函数。
下面再看一下WNDCLASSEX的结构。
窗口式样style的值可用下表的值组合起来设置,窗口处理函数名lpfnWndProc
和hInstance不能设置错。
光标有2个hIcon和hIconSm,当取不到值时自动分配一个系统缺省值。
光标hCursor可选择下面的光标ID设置到结构体中去。
关于图标、背景、菜单后面有专门章节介绍。
下面在上一章的基础之上,修改部分数据,看看有什么变化。
二、初始化窗口
InitInstance()函数中,CreateWindow()函数创建一个窗口,这儿说的窗口是广义的窗口,事实上按钮也是窗口,也是由这个函数创建的。
其中最关键的是第三个参数,先看一下函数原型。
窗口式样有以下几种,先用简单易懂的值试一试,然后再逐步深入。
动手做是学习的关键。
下面我们在上一个例子的基础上修改2个地方,看看有什么变化。
运行之后窗口变成了最小化。
win32编写控件例程Win32编写控件例程可以用于创建自定义的窗口控件,以满足特定的应用需求。
下面是一个简单的Win32控件例程的步骤和代码示例:步骤1,包含头文件和定义全局变量。
c.#include <Windows.h>。
// 全局变量。
HINSTANCE hInst;HWND hWndMain;HWND hCustomControl;步骤2,声明窗口过程函数。
c.LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);步骤3,编写WinMain函数。
c.int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)。
{。
// 初始化全局变量。
hInst = hInstance;// 注册窗口类。
WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = NULL;wcex.lpszClassName = L"CustomControlExample";wcex.hIconSm = LoadIcon(wcex.hInstance,IDI_APPLICATION);if (!RegisterClassEx(&wcex))。
win32程序设计Win32程序设计是一种针对Windows操作系统进行开发的编程方式,可以帮助开发者创建高效且易于使用的桌面应用程序。
以下是Win32程序设计的分步骤阐述。
第一步:选择编程语言和IDEWin32程序设计支持多种编程语言,包括C++、C#、Visual Basic等,开发者可以选择自己熟悉的语言进行开发。
同时,需要选择合适的集成开发环境(IDE)进行开发,例如Visual Studio等。
第二步:创建项目在IDE中创建新项目,选择Win32应用程序类型,并设置项目名称和存储位置。
在创建项目时需要选择应用程序类型,例如控制台应用程序、标准Windows应用程序等,以及所使用的编程语言。
第三步:编写代码在IDE中打开主代码文件,开始编写代码。
需要注意,在Win32程序设计中,需要使用Windows API(应用程序接口)来访问Windows 操作系统的功能。
编写代码时需要引用对应的API头文件,并定义窗口、消息处理函数等。
第四步:编译和构建完成代码编写之后,需要进行编译和构建操作。
在IDE中选择“构建解决方案”按钮,系统将自动执行编译、链接等操作,生成可执行文件和相关资源文件。
第五步:测试和调试在Win32程序设计中,测试和调试是非常重要的步骤。
在IDE中选择“调试”按钮,可以启动调试器,并进行单步调试、变量监视等操作,以发现代码中可能存在的错误和问题。
第六步:打包和发布完成测试和调试之后,需要将应用程序打包并发布。
在IDE中选择“发布”按钮,可以生成安装程序或独立执行文件,方便用户进行安装和使用。
总之,Win32程序设计是一种十分重要的桌面应用程序开发方式,可以帮助开发者创建高效且易于使用的Windows应用程序。
对于初学者来说,需要进行大量的练习和实践,才能掌握其编程技术和方法。
Win32程序开发⼊门:⼀个最简单的Win32程序⼀、什么是 Win32Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境。
这⾥再介绍下 Win32 Application 和 Win32 Console Application 之间的区别:1、程序不同Win32 Application 是标准 windows 程序,完全拥有 windows 的特性,可以通过⿏标点击窗⼝来完成控制。
Win32 Console Application 是控制台应⽤程序,类似于 MS-DOS 窗⼝,只能运⾏命令⾏程序,不具备消息响应机制。
2、⼊⼝函数不同Win32 Application ⼊⼝函数是 WinMain(),它具有消息响应机制,可以运⾏图形化的 C++ 程序。
Win32 Console Application ⼊⼝函数是 main(),可以访问部分 windows API 函数,如果你编写传统的 C 程序,必须建⽴ Win32 Console 程序。
⼆、最简单的程序创建⼀个 win32 应⽤程序⼯程,功能是显⽰⼀个消息框,随便提⽰⼀些⽂字就可以了。
具体的创建⼯程的步骤可以参考:。
代码如下:#include <Windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){MessageBox(NULL,TEXT("随便提⽰⼀些内容就可以了!哈哈哈!"), // 内容TEXT("这⾥是标题!"), // 标题名称0);return 0;}我们再看⼀下效果:接下来我们从头开始剖析这个简单的⼩程序。
三、分析⼀下3.1 头⽂件#include <Windows.h>windows.h 是⼀个最重要的包含⽂件,它囊括了若⼲其他 Windows 头⽂件,其中的某些头⽂件⼜包含另外的⼀些头⽂件。
第7章 Win32编程环境使用汇编语言来开发Win32程序的软件包有Microsoft的MASM系列、Borland的TASM 系列等。
本章首先介绍了MASM32软件包的组成及安装方法;然后通过MASM32软件包自带的例子,介绍集成环境QEDITOR的使用;最后介绍生成Win32可执行文件的步骤和方法。
7.1 MASM32软件包简介1. MASM 系列编译器介绍MASM是Microsoft 公司推出的汇编编译器。
它有众多版本,高版本和低版本的语法和功能相差很多,向下兼容性也不好。
低版本的MASM固然无法编译高版本的源程序,但是,高版本的MASM 也可能无法正常编译低版本的源程序。
在使用MASM系列编译器时,一定要注意所使用的版本。
在前6章中,介绍DOS环境下的汇编编程,使用的是MASM 6.00。
从本章开始,介绍如何编制Win32编程,其使用的是MASM 6.14编译器。
下面介绍一些重要的MASM 版本及其关键演变历程。
1989年Microsoft推出了MASM 5.10B,它是传统的DOS 汇编编译器中最完善的版本,运行稳定、速度快。
该版本支持80386 处理器指令,允许将段定义伪指令简化为“.code”与“.data”之类的形式,同时增加了对“@@”标号的支持。
这样,程序员可以不再为标号的起名花掉很多时间。
1992 年Microsoft发布了MASM 6.00。
编译器使用扩展内存,编译更大的文件,这时,可执行文件名相应从MASM.EXE 改为ML.EXE。
从该版本开始,可以在命令行上使用“*.ASM”,以便同时编译多个源文件。
最大的改进之一是开始支持“.IF/.ENDIF”等高级语法,使得复杂的条件分支语句的编写和用高级语言编写一样简单,可以在几千行代码中不定义一个标号;另外,增加了invoke 伪指令,简化了带参数的子程序调用。
这两个改进使汇编代码的风格越来越像C,可读性和可维护性提高了很多。
主题:DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的,因此掌握它、应用它是非常重要的。
动态链接库不仅可以作为一个运行模块,包括函数代码,而且可以包含程序以外的任何数据或资源(位图、图标等等)。
动态链接库就是给应用程序提供函数或者资源。
DLL是一种磁盘文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。
在运行时,只有当EXE 程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。
每个进程都复制了自己的读/写全局变量。
如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。
DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。
DLL文件中包含一个导出函数表。
这些导出函数由它们的符号名和称为标识号的整数与外界联系起来。
导入导出函数:在DLL代码中,必须像下面这样明确声明导出函数:__declspec(dllexport) int MyFunction(int n);但也可以在模块定义(DEF)文件中列出导出函数,不过这样做常常引起更多的麻烦。
在应用程序方面,要求像下面这样明确声明相应的输入函数:__declspec(dllimport) int MyFuncition(int n); (这是隐式链接dll)仅有导入和导出声明并不能使应用程序内部的函数调用链接到相应的DLL文件上。
应用程序的项目必须为链接程序指定所需的输入库(LIB文件)。
而且应用程序事实上必须至少包含一个对DLL 函数的调用。
隐式链接和显式链接dll显式:typedef double(SQRTPROC)(double);HINSTANCE hInstance; //设置全局变量用于存储DLL句柄SQRTPROC* pFunction; 第二个变量ShowMe是指向DLL,库中函数的指针VERIFY(hInstance=::LoadLibrary("c://winnt//system32//mydll.dll"));VERIFY(pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"SquareRoot"));double d=(*pFunction)(81.0);//调用该DLL函数隐式:程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与LIB文件中导出符号相匹配,这些符号或标识号进入到生成的EXE文件中.隐式链接和显式链接dll的区别:在隐式链接方式中,所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载在到内存中;但如果采用显式链接方式,程序员可以决定DLL文件何时加载或不加载。
Lcc-win32面向Windows编程图解教程
为什么使用Lcc?
当各种版本Visual C++ Windows编程的书汗牛充栋的时候,当无论是高手还是初学者都用Visual C++ 编程的时候,干嘛要有用Lcc进行Windows编程的书?
⏹ Lcc是自由软件,公开源代码,至少是免费的!虽然V isual C++的学生版或速成版很便宜,尤其是用美元计价且用高级程序员的收入衡量的时候。
但微软的商品即便免费给你,你的感觉仍是被拴住鼻子,早晚你会把血汗钱给盖茨,劫贫济富一把。
⏹ 用Lcc能深入了解编程是怎么回事。
Windows编程的工具太强大,他就会代替你做很多基础层面的事。
而这些基础正式初学者应该熟练掌握的!想想为什么我们小学时先学加减法而不是想学使用计算器。
但是如果工具太简单也不行,用小刀是无法刻出CPU的。
⏹ Lcc软件的作者们是一群编程的精英,包括Dennis Ritchie, C语言的发明者。
他们花费了惊人的脑力写出Lcc的IDE、编译器和丰富的文档,我们若不学会用它,不是太暴殄天物了吗?
为什么使用C语言?
C语言的历史很悠久,所以他的缺点被揭露、他被批判的历史也很长。
可是好多编程语言出现又消失,C语言的地位仍未被撼动。
而且C语言被更为广泛的应用。
正如Lcc所自带的文档《Programming with lcc-win32》所说的:
如果你想写能被长时间使用的软件,不要学当今最火的编程语言,学C语言。
C不强加你任何观点。
她不是面向对象(object oriented)的,但如果你愿意,你可以用C 语言进行面向对象的程序设计。
她不是函数语言(functional language),但如果你愿意,你可以用C语言进行函数语言范式程序设计。
大多数LISP语言和Scheme语言(一种完全的函数语言)的解释器和编译器就是用C语言编的!你用C语言进行链接表处理也许不如用LISP语言好用,但是你是可以用C语言进行链接表处理的。
C语言有所有编程语言的本质特性……
if you write software that is going to stay for some time, do not learn “the language of the day”: learn C.
C doesn’t impose you any point of view. It is not object oriented, but you can do object oriented programming in C if you wish. It is not a functional language but you can do functional programming with it if you feel like. Most LISP interpreters and Scheme interpreters/compilers are written in C. Y ou can do list processing in C, surely not so easily like in lisp, but you can do it. It has all essential features of a general purpose programming language…
进入Lcc界面
当点击Windows开始菜单→程序→Lcc-win32→Lcc-win32快捷方式时,或双击C:\lcc\bin默认安装位置的wedit.exe,将会看到如下经典而简洁的界面:
历史回顾:命令行式的人机对话
为了便于阐述面向Windows编程的特点,我们回到历史中,看看类似DOS时代的命令行式的人机对话程序是怎样编出来的。
本来想展示个经典的HelloWorld程序,可是HelloWorld程序太经典,出现的太多,而且没有人机对话,有点傻!
我们编一个计算正方形面积的程序。
计算机先问人类“正方形的边长是?”,人类输入个整数,计算机给出“正方形的面积=整
数的平房”……也够傻的……
没办法,受篇幅所限,我只能用这样简单的傻程序来演示,我不能编出一个魔兽世界的游戏给大家看!
进入Lcc主界面后,点击File→New→Protect...弹出对话框:→→
对话框分4个栏框,4个按钮和1个选项按钮。
第1个栏框问你工程名(Name of project),并提醒你不要输入路径(Without path),既然让计算机计算面积,我们就叫这个工程Area。
第2个栏框问你资源所在路径,最好先在计算机硬盘中建好文件夹,然后按右边的Browse 按钮选择,直接输入也可。
第3个栏框问你编程完后文件所在路径,就是你的编程结果放在那里,你填好第2个栏框就有个默认值,用默认值就好。
第4个栏框问你工程类型(Type of project),有四个选项:
【Windows应用程序类型】Windows application
【控制台应用程序类型】Console Application
【静态库文件】Static Library(lib)
【动态库文件】Dynamic Link Library(dll)
选控制台应用程序类型,就是告诉计算机要编命令行式的程序。
按Create按钮就可。
注意:不要选Use framework的选项按钮,否则计算机就会帮你做许多基础工作。
接着就出来提示对话框:问是否用向导完成程序框架,选择“否”,若选择“是”计算机也会帮你做许多基础工作。
下面就是要输入原文件名,注意输入C语言源文件后缀“.C”。
我们输入Area.c,和工程名同名,好记!
下面选OK
下面选下一步
下面选下一步
下面选完成
把以下程序输入:
#include <stdio.h>
void main(void)
{
int i;
printf("正方形的边长是?"); scanf("%d",&i);
i=i*i;
printf("正方形的面积="); printf("%d \n",i);
}
点“File”菜单中的“Save”项,保存程序。
再选择“Compiler”菜单中的“Compile hello.c”,调用编译器。
这时一个新窗口会出现在IDE的底部,这是信息窗口,当编译器处理完成,在这个窗口中将会显示“HELLO.exe build successfully.”,如果编译出错,出错信息也将会被显示在这里。
如果编译出错了,在信息窗口处双击信息显示所在行,在编辑窗口内将高亮度显示出错代码行,仔细的检查一下你写的程序和上面我写的一样,这里需要注意的是C语言是大小写敏感的程序语言,这意味着“printf”和“Printf”对编译器是不相同。
现在你已经编译好了这个程序,按[Ctrl]+[F5]键运行一下,输入正方形的边长的值,例如4,然后按回车,看运行结果,按任意键停止运行。
如果点Compiler→Debugger,是有断点的运行,按F8单步运行,点Debug→Stop debugging停止运行。