Total 的mapbasic教学---定制工具按钮图标

大家好,我是Total(为什么叫Total?因为我的网名是”偷着来上网”,在古城热线的论坛里大家都叫我”偷偷”,于是取个英文的同音词,就是Total了,嘿嘿).其实我觉得自己并没有什么资格给大家讲课,写教学的目的只在于抛砖引玉,希望在论坛里看到更多的原创作品.
 我也不会常来写东西,一个是由于个人水平有限,一个是由于我是一名通信工程师,而并非是程序员,我的首要工作还是搞好该死的通信网络,其次才是编程.好了费话少说,开始今天的正题.做为见面礼,给大家讲一个高级技巧好了.
Mapbasic高级编程之定制工具图标
下面是程序的原码

‘程序在Windows2000英文版(SP4),Mapinfo6.0英文版(SP1),Mapbasic5.5调试通过

Include "mapbasic.def"

Declare Sub Main
Declare Sub TestDLLCall
Declare Function InitResDLL () As String


Declare Function MyDllFunc_w32 Lib "win32/ico32.dll" Alias "MyDllFunc"
  (ByVal myparm As Integer) As Integer

Declare Function MyDllFunc_w16 Lib "win16/ico16.dll" Alias "MyDllFunc"
  (ByVal myparm As Integer) As Integer

Declare Function MyDllFunc (ByVal myparm As Integer) As Integer


Sub Main 'Ö÷³ÌÐò
  Dim icodll As String

  icodll = InitResDLL()
Print Chr$(12)
Print "IcoTest program is loaded from "+ApplicationDirectory$()
Print "Resource DLL is "+icodll

  Create ButtonPad "IcoTest" As
        ToolButton Calling TestDLLCall
   Icon 138   File icodll
   Cursor 136 File icodll
        ToolButton Calling TestDLLCall
   Icon 134   File icodll
   Cursor 136 File icodll
End Sub

Function InitResDLL () As String
  if (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN16) Then
    InitResDLL = ApplicationDirectory$()+"win16/ico16.dll"
  elseif (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN32) Then
    InitResDLL = ApplicationDirectory$()+"win32/ico32.dll"
  else
    Note "This application is not supported on this platform."
    End Program
  end if
End Function

Function MyDllFunc (ByVal myparm As Integer) As Integer
  if (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN16) Then
    MyDllFunc = MyDllFunc_w16(myparm)
  elseif (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN32) Then
    MyDllFunc = MyDllFunc_w32(myparm)
  else
    Note "This application is not supported on this platform."
    End Program
  end if
End Function


Global parmval As Integer

Sub TestDLLCall

  parmval = parmval + 1

  Print "The answer is: " + Str$(MyDllFunc(parmval))

End Sub

上面代码主要来源于一个mapbasic自带的例程,即然有现成的东东,就不用我自己动手了吧(哎呀~~~~谁打我??!!).
其实写这个程序的难点并不在于程序的本身,而是那个DLL文件的生成.
1. 图标文件的格式
按钮图标文件在Mapbasic中有严格的要求.图标文件只能是位图格式(BMP图像格式),大小为小图标18pixles宽16pixles高,大图标26pixles宽24pixles高,小图标是用在普通按钮上的,而大图标是在你在Mapinfo中选择使用大按钮之后才会用到.
2. DLL 文件的编辑
编辑好了图标文件,现在来把它们添加到DLL中,我们无需重新的编写一段C语言代码来实现DLL文件的生成,那样你首先的会C语言.我说的方法是直接的利用Mapbasic例程中的DLL文件.
用资源编辑软件打开DLL文件,将编辑好的BMP文件添加到DLL中,注意保存顺序,首先是小的位图,然后是大的位图,在命名时要注意两个文件必须相连,例如:小图标命名为138,那么大图标就应该命名为139.保存DLL.这样就好了,你只需在上面的程序代码中修改ICON的号码就可以看到你的图标文件了.

OK,就这么多了,有什么没说清楚的地方,欢迎大家提问和讨论.

共同学习,共同进步.

         Total 2004.07.01 23:07 写于新疆乌鲁木齐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值