标题: 【CAPI】GUI开发1:基础绘图 [打印本页]
作者: defanive 时间: 2012-11-26 07:42 标题: 【CAPI】GUI开发1:基础绘图
By Defanive
使用CAPI调用GDI类的API可以实现图形的绘制和显示
GUI可以解放批处理传统的CLI,给予用户更生动的界面和显示
基础绘图中的代码都比较简单而且很常用
大部分代码都不需要进行大多更改,直接复制粘贴就可以给其他工程使用
基本上就是一个模板的功能
但是还是建议大家了解本例程中的API和各种概念
对于以后的开发是有很大帮助的
下载CAPI并将exe和dll复制到批处理文件夹下,本教程使用的是1.2 1D910
准备一张ico图标文件,复制到批处理文件夹下并命名为1.ico
本教程使用的是大小32x32的32位真彩色ico图片,图像为魔塔中的红衣魔王
使用ico储存图片的优势在于绘制时较为方便
首先要做的是把素材1.ico载入到内存中
通过调用API LoadImage可以把图片载入到内存,并返回一个图标句柄
往后对1.ico的操作将利用图标句柄进行- @echo off
- CAPI
- set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
- set hIcon=%CAPI_Ret%
- echo %hIcon%
- pause
复制代码
再次我们把1.ico载入到内存中,并把句柄保存在了hIcon变量中
如果运行时hIcon不为0则表示载入正常
有了素材,就必须要有“画布”,也就是DC
在此我们要在CMD窗口上画,也就需要取得CMD窗口的DC的句柄
于是我们可以通过使用API GetDC取得某个窗口的DC的句柄,参数为窗口句柄
要获得CMD窗口的DC的句柄,就需要CMD窗口的句柄作为API GetDC的参数
我们可以通过API GetConsoleWindow获得CMD窗口的句柄- @echo off
- CAPI
- set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
- set hIcon=%CAPI_Ret%
- echo %hIcon%
- set CAPI=API Call kernel32 GetConsoleWindow
- set hCMD=%CAPI_Ret%
- echo %hCMD%
- set CAPI=API Call user32 GetDC ;%hCMD%
- set hDC=%CAPI_Ret%
- echo %hDC%
- pause
复制代码
再次我们获得CMD窗口的句柄之后保存在了hCMD变量中
使用CMD窗口的句柄作为参数我们取得了CMD窗口的DC的句柄,保存在hDC变量中
运行时若hCMD和hDC都不为0则表示获取正常
有了画布和素材,我们就可以正式进行作画了
使用API DrawIconEx,我们可以把图标画在DC上- @echo off
- CAPI
- set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
- set hIcon=%CAPI_Ret%
- echo %hIcon%
- set CAPI=API Call kernel32 GetConsoleWindow
- set hCMD=%CAPI_Ret%
- echo %hCMD%
- set CAPI=API Call user32 GetDC ;%hCMD%
- set hDC=%CAPI_Ret%
- echo %hDC%
- set CAPI=API Call user32 DrawIconEx ;%hDC% ;0 ;64 ;%hIcon% ;32 ;32 ;0 ;0 ;3
- pause
复制代码
第1、4个参数为DC的句柄和图标的句柄,也就是我们之前取得的hDC和hIcon
第2、3个参数为欲画图标的位置的x和y值,(0,0)为左上角,在此我们设为0和64,由于CMD默认字体大小为8x16,所以就画在了第5行第1列
第5、6个参数为欲画图标的大小宽和高,由于本教程的素材大小为32x32,在此设为32和32
运行时若图标被正确的画在了“按任意键继续”的下方则表示运行正常
有了以上代码,我们可以进行一些简单的效果了
在此我们演示如何使用以上代码做出图标从左往右移动的效果
下面的代码中API Sleep的作用是延时一段时间,参数为延时的毫秒数- @echo off
- CAPI
- set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
- set hIcon=%CAPI_Ret%
- set CAPI=API Call kernel32 GetConsoleWindow
- set hCMD=%CAPI_Ret%
- set CAPI=API Call user32 GetDC ;%hCMD%
- set hDC=%CAPI_Ret%
- set x=0
- :loop
- color 07
- set CAPI=API Call user32 DrawIconEx ;%hDC% ;%x% ;0 ;%hIcon% ;32 ;32 ;0 ;0 ;3
- set CAPI=API Call kernel32 Sleep ;20
- set /a x+=2
- goto loop
复制代码
相信代码一定不难看懂
代码中的color 07目的是清理DC(cls只清理文字),否则会在上一次的结果上继续画,从而画出一条很长的图标轨迹
通过以上代码已经可以实现很大部分的绘图了
可以看到GUI绘图给批处理界面带来了很大生机
链接: https://pan.baidu.com/s/1fXpagF2EitbYh7KRk8A6kw?pwd=ku5q
作者: wofei1314 时间: 2012-11-27 07:41
好贴~
前排支持!
作者: 转世燕 时间: 2015-11-28 15:42
很好,学习了
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |