[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【CAPI】GUI开发1:基础绘图

本帖最后由 defanive 于 2012-11-26 08:20 编辑

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的操作将利用图标句柄进行
  1. @echo off
  2. CAPI
  3. set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
  4. set hIcon=%CAPI_Ret%
  5. echo %hIcon%
  6. pause
复制代码
再次我们把1.ico载入到内存中,并把句柄保存在了hIcon变量中
如果运行时hIcon不为0则表示载入正常

有了素材,就必须要有“画布”,也就是DC
在此我们要在CMD窗口上画,也就需要取得CMD窗口的DC的句柄
于是我们可以通过使用API GetDC取得某个窗口的DC的句柄,参数为窗口句柄
要获得CMD窗口的DC的句柄,就需要CMD窗口的句柄作为API GetDC的参数
我们可以通过API GetConsoleWindow获得CMD窗口的句柄
  1. @echo off
  2. CAPI
  3. set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
  4. set hIcon=%CAPI_Ret%
  5. echo %hIcon%
  6. set CAPI=API Call kernel32 GetConsoleWindow
  7. set hCMD=%CAPI_Ret%
  8. echo %hCMD%
  9. set CAPI=API Call user32 GetDC ;%hCMD%
  10. set hDC=%CAPI_Ret%
  11. echo %hDC%
  12. pause
复制代码
再次我们获得CMD窗口的句柄之后保存在了hCMD变量中
使用CMD窗口的句柄作为参数我们取得了CMD窗口的DC的句柄,保存在hDC变量中
运行时若hCMD和hDC都不为0则表示获取正常

有了画布和素材,我们就可以正式进行作画了
使用API DrawIconEx,我们可以把图标画在DC上
  1. @echo off
  2. CAPI
  3. set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
  4. set hIcon=%CAPI_Ret%
  5. echo %hIcon%
  6. set CAPI=API Call kernel32 GetConsoleWindow
  7. set hCMD=%CAPI_Ret%
  8. echo %hCMD%
  9. set CAPI=API Call user32 GetDC ;%hCMD%
  10. set hDC=%CAPI_Ret%
  11. echo %hDC%
  12. set CAPI=API Call user32 DrawIconEx ;%hDC% ;0 ;64 ;%hIcon% ;32 ;32 ;0 ;0 ;3
  13. 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的作用是延时一段时间,参数为延时的毫秒数
  1. @echo off
  2. CAPI
  3. set CAPI=API Call user32 LoadImageW ;0 $1.ico ;1 ;0 ;0 ;16
  4. set hIcon=%CAPI_Ret%
  5. set CAPI=API Call kernel32 GetConsoleWindow
  6. set hCMD=%CAPI_Ret%
  7. set CAPI=API Call user32 GetDC ;%hCMD%
  8. set hDC=%CAPI_Ret%
  9. set x=0
  10. :loop
  11. color 07
  12. set CAPI=API Call user32 DrawIconEx ;%hDC% ;%x% ;0 ;%hIcon% ;32 ;32 ;0 ;0 ;3
  13. set CAPI=API Call kernel32 Sleep ;20
  14. set /a x+=2
  15. goto loop
复制代码
相信代码一定不难看懂
代码中的color 07目的是清理DC(cls只清理文字),否则会在上一次的结果上继续画,从而画出一条很长的图标轨迹

通过以上代码已经可以实现很大部分的绘图了
可以看到GUI绘图给批处理界面带来了很大生机
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

好贴~


前排支持!

TOP

很好,学习了

TOP

返回列表