我也不会常来写东西,一个是由于个人水平有限,一个是由于我是一名通信工程师,而并非是程序员,我的首要工作还是搞好该死的通信网络,其次才是编程.好了费话少说,开始今天的正题.做为见面礼,给大家讲一个高级技巧好了.
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 写于新疆乌鲁木齐