- 博客(26)
- 收藏
- 关注
原创 中心渐变的快速填充函数
XP为我们开创了程序界面革命的新时代,它的界面最核心的特点之一就是“渐变”。在追求个性化亮丽界面的今天,到处可见漂亮的VB界面源码,可惜它们都还在用图片,或描点描线来生成窗体及控件。要知道,GradientFill函数正是MS为我们准备的一个“超级宝贝”,一直却被VB用户忽视了。它的灵活使用,会为我们带无穷的变幻效果,我就用它先写个例子吧。像Photoshop中那样的水平与垂直渐变用Gradi
2007-07-25 23:25:00 3510
原创 任意指定透明色的绘图方法
透明位图绘制方法在网上见得很多,多数是采用事先做好一个Mask图,这方法优点是速度快,但就是太麻烦,灵活性差。任意指定透明色,当然经常也要用到,为此,API提供了一个函数TransparentBlt,可这个函数,非常让人遗憾,VB的API浏览器中不带它是有道理的,因为,它在Win98下有严重内存漏洞,你若有98系统,可试一下:for i=1 to 20000TransparentBlt ....n
2005-04-17 10:36:00 5196
原创 可以代替窗体Refresh方法的函数
VB中打开AutoRedraw可方便的建立双缓冲,利用API在后台绘图,最后一次性整体更新到前台,实现稳定无闪烁的动画效果,一般情况下,VB会自动进行后台到前台的刷新,这主要有两种情况:1、收到WM_PAIT消息2、代码调用Refresh方法能让VB收到WM_PAIT消息的情况主要有1、窗体被遮盖或隐藏后重现2、调用任何VB内部的图形方法,包括PaintPicture、Print、Cls、Line
2005-04-16 00:13:00 4928 1
原创 多功能文本输出函数
这是一个我自己编写的多功能文本输出函数,可提供Print语句需配合定位、字体等属性才能实现的功能;还可提供自动换行、字体旋转、无效文本等功能。Public Enum DrawTextAlign DT_LEFT = &H0& DT_CENTER = &H1& DT_RIGHT = &H2& DT_TOP = &H0& DT_VCENTER = &H4& DT_
2005-04-15 23:02:00 4111
原创 快速对图片进行滤光处理
想快速地对指定图片或区域进行滤光处理,常见的方法取出图片数据,逐像素与指定滤光色进行AND运算,很麻烦。还见过网上流传的有用Point或GetPixel取点运算的,其低速可想而知。其实利用BitBlt的位运算,可高速完成这种操作,下面这个函数比数组运算方法可快10倍,比Point或GetPixel估计会快上千倍。Private Type RECT Left As Long
2005-04-15 22:48:00 2549
原创 无外部控件制作多媒体播放器(四)
音乐文件列表也是个不容忽视的问题,自己定个格式当然可以,但好在大家熟悉的M3U格式并不复杂,MediaPlayer或WinAmp都支持它,通用性也好,比起wpl要简易得多,所以我就来介绍一下M3U格式文件的制作与读写M3U是文本文件,以#EXTM3U开头,每个音乐条目占1-2行,当存在扩展信息时,首行采用#EXTINF:开头,第二行才是文件名;当没有扩展信息时,只是简单的一行,就是文件名;文件名可
2005-04-15 21:40:00 2696 1
原创 无外部控件制作多媒体播放器(三)
ASF全名为高级系统格式,是MS大力推宠的一种媒体格式,并已得到广泛支持。其最主要的分支就是用于音频的WMA与视频的WMV,当然还有ASF自身。在下面地址可下载到ASF格式的说明文档:http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspxASF格式由一个个不同功能的ASF对象组成,每个对象都有一个GUID做标识,你只需识别
2005-04-15 21:39:00 3403 5
原创 无外部控件制作多媒体播放器(二)
本来想写点进度控制与音量调整的代码的,后来发现还是太简单了,就是几个MCI命令,来回搬弄,自己都没兴趣写下去。所以我想还是写些独门一点的:音乐信息的读取!目前常见的主流音乐格式就两种,MP3与WMA,它们都有在文件中保存音乐信息的特定格式,MP3使用的当然是家喻户晓的ID3格式,分为V1与V2两个版本;WMA是MS的宠儿,它只是ASF格式的一个分支,当然遵循ASF的包装规则。怎么获取它们包含的音乐
2005-04-15 15:31:00 5256
原创 一种简单而快速的灰度图处理法
因自己的程序中需对一个窗体区域频繁进行彩色转灰度处理,为此专门写了个函数。处理对象是一块经常变化的动态区域,且是一系列绘图中的一部分,速度要求较高,算法上力求简单,所以采用以下两步方案:1、基于DDB来写,虽然转入DIB,可不必面对各种色深,会统一算法,但转换过程会让速度上慢很多,再者这只是针对屏幕位图的函数,并无保存需要。考虑实际情况,我只写了16、24、32位三种色深下的算法,其实4、8两种位
2005-04-14 21:47:00 7942
原创 无外部控件制作多媒体播放器(一)
利用MCI指令制作播放器,简单实用,很适合于做为自己软件的一个附带功能或背景音乐,正是基于这点需求,我准备分几个部分来写:1、MCI指令的简单使用;2、媒体播放的进度控制与音量调节;3、音乐信息的读取,包括MP3(ID3V1 & ID3V2)与ASF(WMA & WMV)等;4、音乐列表的建立与保存(M3U格式)本来主要是想写播放音乐的,举个播放视频的例子,没什么别的意思,只是感觉播放音乐实在是简
2005-04-14 21:01:00 3098
原创 AutoRedraw属性为True时VB都做了什么?
AutoRedraw是VB特有的,大多数程序建立双缓冲是没有VB这么方便的,都需自己定义一个内存DC,这个DC,一般来说,只有程序内部知道,别的程序不太可能取得并改写它。AutoRedraw属性为True时,就建立了常说的双缓冲,拥有前台与后台两个hDC,这两个hDC在处理完WM_PAINT消息或调用Refresh方法后,会保持一致。双缓冲只是一种加快重绘前台DC的方法,用双缓冲时,DC绘图先在后
2005-04-12 20:31:00 8607 2
原创 UDT长度的含义是什么?
UDT的长度有两种,一种是写入文件时的长度,一种是实际在内存中的长度。二者肯定是不一样的!对于定长UDT,一般都是需要其写入文件时的长度。若所有UDT都是定长的,可用len直接得出,若包含变长内容,如你的xx() as xxx动态数组,或变长String,那就很难了,可能需一个个计算。因为对于UDT中的动态数组或变长串,Len只返回4个字节,相当于一个32位指针例如:Public Type a
2005-04-12 20:19:00 4235 1
原创 一个优化后的压缩算法(下)
类中压缩与解压算法Private Sub Compress() Dim lngTemp As Long, intCount As Integer Dim intBufferLocation As Integer Dim intMaxLen As Integer Dim intNext As Integer Dim intPrev As Integer Dim
2005-04-12 20:09:00 3542 3
原创 一个优化后的压缩算法(上)
这是一个在CSDN论坛中讨论过的压缩算法代码。与WinRAR以最快方式压缩ZIP比较,255M的文件Level=0时 用时24.98秒 大小95.1MLevel=255时 用时30.24秒 大小91.6MWinRAR最快压缩ZIP 用时 25.2秒 大小58.6M标准RAR压缩,我看了一下,实在太慢,也就没试了,估计要几分钟才会有结果。从速度看,基本持平了,这个算法虽然最大压缩能力有限,但感觉设计
2005-04-12 20:07:00 3588
原创 优化代码时要选用正确的测试方法
想提高VB效率的时候,常用测试来检验算法的优劣,但测试本身的“算法”却被忽略!这里我很想说一段“故事”:我在研究一个Alpha运算的代码时,就感到了同样的问题:他把VB算法与API中的AlphaBlend做了比较,结果证明VB更快。因为我也写过一个Alpha运算的代码,所以针对他的源码做了分析,发现二者有两个不同,一是他使用的是了DIB,而我的是基于DDB,所以他的速度很一致,而我的因涉及不同色深
2005-04-12 19:56:00 2422
原创 Winsock发送数据时的粘接与分隔原因浅析
网络传输是个复杂过程,winsock虽然隐藏了这种复杂性,但底层的一些特性还是会对传输产生影响的,简单的希望发一次收一次的处理,往往随网络环境的变化,会事与愿违!有些程序在局域网内测试没有问题,到了InterNet却经常出错,也是这个原因。所以对网络通讯的不确定因素,设计时就要酌情考虑。有人期望每一次发送,对方就产生一次DataArrive事件,也是过于理想化了,网络数据不仅可能会发生粘接,还有可
2005-04-12 19:36:00 3503 4
原创 基于HTTP协议用WinSock实现任意文件下载
HTTP协议是文本格式通讯,下载文件是二进制数据,怎样处理好两种格式,而不受VB独断专行的Unicode转换影响,本代码提供了一个示例。Option ExplicitPrivate strURL As StringPrivate mstrFileName As String, mlngFileNum As LongPrivate mlngFileLen As Long, mlngCurByte A
2005-04-12 19:30:00 4257
原创 ToolBar的模样自己画(五)
最后一部分,也是最核心的消息处理代码与主绘图过程Friend Function MsgProc(lParam As Long, MouseDown As Boolean) As Long Dim tHDR As NMHDR Dim className As String * 32 Dim retval As Long CopyMemory tHDR, ByVal lPar
2005-04-12 19:23:00 2729
原创 ToolBar的模样自己画(四)
几个GDI绘图函数功能的封装,有一定通用性,有些是我平时自己就喜欢用的模块。Private Function NewMyHdc(dHdc As Long, w As Long, h As Long, Optional Bm As Long) As MemHdc With NewMyHdc .hdc = CreateCompatibleDC(dHdc) If Bm
2005-04-12 19:20:00 2253
原创 ToolBar的模样自己画(三)
类中的各种属性与方法,主要用于外部调用Friend Property Let BorderColor(ByVal vData As Long) If m_lngBrdColor m_lngBrdColor = vData If m_lngBrdStyle > 3 Then Refresh End IfEnd PropertyFriend Property
2005-04-12 19:17:00 2262
原创 ToolBar的模样自己画(二)
进入正题了,下面就该是类中的代码了,因为主要是利用API,所以声明很多,耐心点吧!类模块中的代码:类名cToolbarOption ExplicitPrivate Const CDDS_ITEM As Long = &H10000Private Const CDDS_PREPAINT As Long = &H1Private Const CDDS_ITEMPREPAINT As Long = (
2005-04-12 19:07:00 1362
原创 ToolBar的模样自己画(一)
MS的ToolBar是是最容易找到找的工具栏控件了,简单方便实用,但它的缺点也是明显的,样式古板,与这个时代有点不合拍。为解决这个问题,我专门写了一个类。 其实ToolBar提供了一个CustomDraw功能,MS为你已搭好了ToolBar的框架,只是ToolBar的模样交给你自己绘,很简单地,就可以用任意你想要的模样,使用ToolBar的所有功能,这比自己做ToolBar是不是更容
2005-04-12 19:03:00 1961 4
原创 用Long型数组进行文件比对
此文件比对基于二进制,最大特点,使用了Long型数组,采用32系统最擅长的数据类型进行比对,速度明显快于Byte数组。Option Explicit Private CencelCopy As Boolean Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As A
2005-04-12 11:46:00 1245
原创 穷举彩票号码的通用过程
Text1输入数字总个数;Text2输入每组的数字个数;App.Path & "/1.txt"用于看输出结果;Label1用于显示组个数;Command1就是执行按钮。这是一个穷举组合结果的万能代码。Option ExplicitPrivate mlngAllNumCount As Long, mlngGetNumCount As LongPrivate mblnCancelProc As Boo
2005-04-12 11:36:00 2180
原创 大数阶乘的计算(五)
对计算(四)我总觉得没有发挥Long类型的最大潜力,一定是我的算法还有改进余地。经进一步推敲,终于又有了突破,速度一下子又提高 4 倍!同一台机器上10000!用时9.8秒,而且大胆的算了一次20000!,啊,43秒搞定。现将代码贴出,供大家参考,看还能不能再快了?Private Function cacl(num As Long) As StringDim numlen As Long, l
2004-06-07 16:37:00 2267
原创 大数阶乘的计算(四)
看了northwolves 的文章大数阶乘的计算(三) http://dev.csdn.net/article/28/28432.shtm 很有启发,联想起以前自己编写过一个类似的函数,方法与其差不多,都是动态数组的增位保存方式。效率上比northwolves兄要差一些,大约相差50%;当时以为是最快的阶乘算法了,所以看到这篇文章很是钦佩!不过,我总觉得,这个算法还有可优化的余地,于是,又重新
2004-06-03 16:57:00 1401 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人