C语言(十八)翁恺老师编写的ACLLib函数库

ACLLib 的介绍

是一个可以用C语言写出图形界面的程序的函数库。(几位浙大老师编写)基于Win32API的函数库,实际提供了一个.c和两个.h,以GPL的方式开源放在github上。
纯教学用途!!但是其思想、编程模型可以借鉴。可以写一些小游戏啥的玩。

WIN32API

WIN32API从第一个32位的windows开始就出现了。API指的是Application Programming Interface,翻译为“应用程序编程接口。它是个纯C的函数库,让我们可以写windows的应用程序,过去的很多windows程序都是用这个方式做出来的。(现在有更好的编程模型)
首先讲一下main()函数,作为C语言的入口函数,但是其实他和C语言本身无关。(main不是C语言的关键字)其实是启动代码需要main,启动代码可以调用我们写的代码。
对于WIN32来说,我们需要的启动函数是WinMain()
在这里插入图片描述
我们现在的疑问是:
在这里插入图片描述
产生窗口:窗口结构(一个结构)
在窗口中画东西:DC(设备上下文?)
如何得到用户的键鼠动作:我们需要知道windows的消息是什么,消息循环,消息处理代码
所以这些其实对初学者太难了。

创建ACLLib程序

像文件中提到的,在其他大多数开发环境中实际上都是要先创立项目再放源代码,哪怕只有一个源代码文件。这次我们就不得不这样做。
新项目的类型选择windows application,在另存为中新建一个文件夹(有的环境如Visual Studio会自动建好一个目录,Dev C++没,需要自己手动操作)
在这里插入图片描述
会出现这样一个东西,保存。
然后把老师分享的两个文件放进文件夹中,在Dev C++中选择项目-添加,添加这两个文件(可以看到左边一栏项目管理中这时出现了这两个文件)
然后选择项目-项目属性-参数,Linker一列是空的,点击 加入库或者对象,找到安装devc++的目录-mingw目录-lib文件夹-libwinmm.a文件,添加进来。
在这里插入图片描述
然后把这8个文件都加进来……
然后把自动生成的 main函数清空,写如下代码

#include "acllib.h"
int Setup()//这里的启动函数
{
	initWindow("test",100,100,200,200);//窗口名称为test,在100 100处画一个200 200的窗口
	return 0;
}

再运行就能得到该图形界面的窗口。
在这里插入图片描述
画图

beginPaint();//开始画图
line(20,20,100,100);//从20 20到100 100画条线
endPaint();//结束画图

在这里插入图片描述
如果写上initConsole();(这时头文件要加上#include<stdio.h>) 就可以使用printf()和scanf()函数了。这样可以让用户自定义窗口大小和画线长了。

基本绘图函数

关于开源文件、使用说明,老师都已放在MOOC即此链接中。可以自己去尝试绘制图形、做程序。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
附件是ACLLib的全部文件,包括源代码和文档及例子程序。 ——MOOC浙江大学C程序设计进阶(翁恺老师) 在Win7或Win8上正常安装的Dev C++,无论是用的MinGW编译器还是TDM编译器都是可以正常使用ACLLib的,但是要注意以下几点: 1. 如果还在使用4.9.9.2的Dev C++,一定要升级到5以上,建议都升级到最新的5.10的版本; 2. 在新建项目的时候选择Windows Application类型; 3. 根据自己机器是32位还是64位来选择编译类型,如果是32位的机器选择MinGW32位方式,如果是64位的机器建议选择TDM的64位方式; 4. 在配置项目的时候,根据32位还是64位选择正确目录下的文件来加入: 1. 32位下,文件是: "C:/Program Files/Dev-Cpp/MinGW32/lib/libwinmm.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libmsimg32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libkernel32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libuser32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libgdi32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libole32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/liboleaut32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libuuid.a" 2. 64位下,文件是: C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libwinmm.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libmsimg32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libkernel32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libuser32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libgdi32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libole32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/liboleaut32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libuuid.a 5. 最后,如果出现“undefined reference to `TransparentBlt' ”这个错误,两个解决方案: 1. 偷懒的,打开acllib.c,找到“TransparentBlt”所在的行,把整行注释掉; 2. 打开工程配置,找到编译器选项,加入-DWINVER=0x0500。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰海宽松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值