博文
vb玩转windows(2005-09-25 22:48:00)
摘要:这是我最近作为练习时写的一些东东,也算是一些经验和技巧。主要是CWinApp.Cls、CWindows.Cls和WinAppModule.Bas。以上三者共同协作,使你方便地在VB中处理
各种各样的消息,子类化窗口,很容易就能屏蔽掉消息。希望它能为大家提供方便。
也很希望大家指正错误之处,谢谢大家。另外有一些声明是多余的。这是因为有些东西我以后还会在添加的,所以没有清理。如果你认为不必要,大可把它删掉。
************************WinAppModule.Bas*************************
Option Explicit
'-------------------------------------------------------------------------------
'******************************** WinAppModule *********************************
'-------------------------------------------------------------------------------
' 作者:无影无踪
' 时间:2003年5月14日
'-------------------------------------------------------------------------------
' WinAppModule主要为CWinApp提供一些最原始的服务(RawWndProc)。唯一用户
' 必须调用的是InitApp,并且必须在使用CWinApp和CWindow之前。
'--------------------------------------------------------------------------------
'---------------------------------------------------------------------------......
自绘弹出式菜单(2005-09-25 22:46:00)
摘要:
近日见到广大的爱好者对菜单或各个控件的样式和效果产生很多的问题,于是就把自己所写的菜单类加上大量的注释,希望帮助大家能明白到其实各种多姿多彩的控件究竟是怎样生成的,其实最主要的就是把控件标志为自绘就行了然后就到自己绘制这个控件,而可以定为“自绘”的控件有LISTBOX,TEXT,LABEL,LISTVIEW,TAB,MENU等等,而且自要学会了自绘菜单的话要完成像OUTLOOK那样的界面就马上变得一点难度都没有了(其实也还是有一点点的)好了废话小说现在就开始自绘的旅程吧
__________________
欢迎交流,QQ:234693669 群:9891420,18小时OnLine
返回页首
UpU@Com
版主
VB技巧 版主
注册时间: 2003-12-20
来自: China
在线状态: 离线
发贴数: 457
发表于: 2004-07-27 at 22:53 | IP已记录
标准模块里:Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function D......
''XOR加密/解密函数(2005-09-25 22:43:00)
摘要:Option Explicit
Private Const strEncryption As String = "Wa7kao19Oh54My256God!"
'XOR加密/解密函数
Public Function XOREncryption(strDataIn As String, Optional ByVal strCodeKey As String = "") As String
Dim lonDataPtr As Long
Dim intXORValue1 As Integer
Dim intXORValue2 As Integer
Dim strDataOut As String
If Len(strCodeKey) < 2 Then
strCodeKey = strEncryption
End If
Mid(strCodeKey, 2, 1) = Asc(Chr(1))
For lonDataPtr = 1 To Len(strDataIn)
'第一个XOR的值来自加密字符串
intXORValue1 = Asc(Mid$(strDataIn, lonDataPtr, 1))
'第二个XOR的值来自需要加密的数据(字符串)
intXORValue2 = Asc(Mid$(strCodeKey, ((lonDataPtr Mod Len(strCodeK......
VB实现窗口的弹出式菜单 (2005-09-25 22:42:00)
摘要:
VB实现窗口的弹出式菜单
在Windows95、Windows98或NT的风格中,有按动鼠标器右键弹出下拉菜单的操作,在VB执行环境下,有一些 控件本身具有弹下拉菜单的功能,如TexTbox控件等,但大多数编辑类控件以及窗体本身却没有此功能,要在窗口中任意位置实现 PopUpMenu(弹出式菜单),可借助VB的菜单工具来实现。
首先,打开VB的“工具”菜单条,利用“菜单编辑器”为窗体生成一个菜单:
标题(Caption) 菜单条名(Name)
编辑 menuEdit
……复制 mnuCopy
……剪切 munCut
其次,将生成的menuEdit菜单设置为不可视。
Private Sub Form_Load()
Me.menuEdit.Visibe=False
'menuEdit菜单设置为不可视
End Sub
然后,利用MouseDown事件实现任意位置弹出PopUpMenu,如下例:
本例中以RichTexBox控件为例,在其上面实现复制、剪切功能。
1.复制功能的实现。
Private Sub MnuCopy_Click()
Clipboar.Clear'将剪贴板清空
'将RichTexBox控件上选择上的内容复制到剪贴板
Clipboard.SetTextRichTexBox1.SelText
End Sub
2.剪切功能的实现。
Private Sub MnuCut_Click()
Clipboard.Clear '将剪贴板清空
'将RichTextBox控件上选择了的内容复制到剪贴板
Clipboard.SetTextRichBox1.SelText
'将RichTexBox控件上选择了的内容删除
SendKeys"{DELETE}",True
End Sub
3.在RichTexBox控件的MouseDown事件中实现任意位置弹出PopUPMenu。
OPrivate Sub RichTexBox1_MouseDown(Button As Integer,Shift As Integer,x As Si......
vb菜单(2005-09-25 22:40:00)
摘要:一、菜单类模块
'========================================================================================
' Alarm Clock 1.05
' 版权所有(C) 2001-2002 江建及其两位女友
' 本代码摘自我的 Alarm Clock
' Alarm Clock 下载地址:http://h.7i24.com/vbcc/work/setup.exe
'=======================================================================================
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
' 本程序可以看看 MSDN
' 我建议大家参照 MSDN 然后自己写不要直接拷贝我的程序
' 因为这样你可能学不到东西。
' 用 VB 的集合来存储菜单的文字。(用API可以创建所有的菜单)
' 如果用物主绘图可以创建任何风格的菜单(Office 97, OICQ, Windows XP)
' (建议 从资源文件中创建菜单 你可以用 宝蓝的 Delphi 或 C++ 光盘中的
' Resource Workshop)来创建资源文件和对话框(以及基本的控件)
' 有那位能告诉我VB怎么从指针取结构的数据
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Private Declare Function CreateMenu Lib "user32" () As Long
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal ......
2个串口同时与2个单片机进行通讯(2005-09-25 22:38:00)
摘要:给你一个串口类的框架,实现的代码由你自已根据情况完成。
其中的蓝色代码为你的实现函数,可以另写API的函数库或封装了MSCOMM控件的函数库。
Option Explicit
Public Enum EnuBaudRate
enuBaudRate_110 = 110
enuBaudRate_300 = 300
enuBaudRate_600 = 600
enuBaudRate_1200 = 1200
enuBaudRate_2400 = 2400
enuBaudRate_4800 = 4800
enuBaudRate_5208 = 5208
enuBaudRate_9600 = 9600
enuBaudRate_14400 = 14400
enuBaudRate_19200 = 19200
enuBaudRate_38400 = 38400
enuBaudRate_56000 = 56000
enuBaudRate_57600 = 57600
enuBaudRate_115200 = 115200
enuBaudRate_128000 = 128000
enuBaudRate_256000 = 256000
End Enum
Public Enum EnuParityCheck
enuParityCheck_No = 0
enuParityCheck_Odd = 1
enuParityCheck_Even = 2
enuParityCheck_Mark = 3
enuParityCheck......
真想不到之六:有用的技术和没用的指针(2005-09-25 22:36:00)
摘要:真想不到之六:有用的技术和没用的指针
关键字:VB、SafeArray、数值类型指针
难度:中级
参考文章:
1、2000年7月VBPJ Black Belt专栏文章《Modify a Varialbe's Pointer》
作者:Bill McCarthy
引言:
这真的是指针专题的最后一篇了(当然,以后肯定还会提到指针)。主要是来谈谈Bill McCarthy的文章《Modify a Varialbe's Pointer》的精华。关于这篇文章的东西,在我的《VB指针葵花宝典之SafeArray》里曾谈到过,但那篇文章实际上没有写出SafeArray的精华,用SafeArray最妙的地方在于可以将一个变量建在指定的内存处,就象上一篇文章给出的那个字串类一样。
正文:
Bill McCarthy在那篇《Modify a Varialbe's Pointer》里用SafeArray实现多进程的数组共享内存,他考虑了数组变量的类型,因此可以兼容大部分数值类型的数组,是一个非常不错的东西。我这里不讲它实现的具体方法,只是想和大家一起看看SafeArray还能做什么。
修改SafeArray结构的pvData指针却是一个非常有用的技术,通过修改pvData,就能够通过数组直接访问指定的内存。
和上一篇文章包装字串指针类一样,通过修改pvData,我们也可以包装一些普通数值类型变量的指针类。
我在指针的第一篇文章里说过,要想实现C语言里'*'这个取指针所指变量值功能,必须要用CopyMemory。实际上,我说错了,我们完全可以实现和C里一样的指针,如下:
//C语言
Long L;
Long* pL = &L;
&......
真想不到之五:高效字串指针类(2005-09-25 22:36:00)
摘要:真想不到之五:高效字串指针类
关键字:VB、HCAK、字串指针、BSTR、效率、内存共享
难度:中级或高级
参考文章:
1、2000年7月VBPJ Black Belt专栏文章《Modify a Varialbe's Pointer》
作者:Bill McCarthy
2、1998年4月VBPJ Black Belt专栏文章《Play VB's Strings》
作者:Francesco Balena
引言:
本想以内存共享做为VB指针专题的最后一篇,写着写着发现字串的问题应该单独谈谈。在内存共享的问题上,我尤其关心的是字串的共享,因为在我一个多月前发布的源码里用的是《HardCore VB》里Bruce Mckinney提供的CShareStr类,它实现了字串的内存共享。但是Bruce也没有突破局限,对字串的处理依然是CopyMemory的乾坤大挪移,尤其是还要进行讨厌的ANSI/DBCS和Unicode的转换。我在readme里说过它效率极低,应该采用Variant或Byte数组来实现,才能避免转换。后来又想到可以用StrPtr来做,并在VC里用DLL共享节实现了可以不进行转换的字串内存共享。不过在VC里我仍然需要用SysAllocString来建立VB能使用的BSTR。这都不是我想要的,我想要的东西要象VC里的CString的一样,只要字串够大,对其赋值就不用重新分配内存,还要象VC里CComBSTR类一样可以Attach到一个特定BSTR。
知道该怎么做,是在看了VBPJ上Bill McCarthy和Francesco Balena的两篇文章之后。Bill用修改SafeArray描述结构实现了数组的内存共享,而Francesco则对字串指针进行深入的探讨。但是Bill和Francesco的东西都没有实现我想要的字串类。
方法知道了,实现并不难,所以我决定自己来包装一个这样的东西。
&n......
VB真是想不到系列之四:VB指针葵花宝典之SafeArray (2005-09-25 22:35:00)
摘要:VB真是想不到系列之四:VB指针葵花宝典之SafeArray
关键字:VB、HCAK、指针、SafeArray、数组指针、效率、数组、排序
难度:中级或高级
要求:熟悉VB,了解基本的排序算法,会用VC更好。
引言:
上回说到,虽然指针的运用让我们的数组排序在性能上有了大大的提高,但是CopyMemory始终是我们心里一个挥之不去的阴影,因为它还是太慢。在C里我们用指针,从来都是来去自如,随心所欲,四两拨千斤;而在VB里,我们用指针却要瞻前顾后,哪怕一个字节都要用到CopyMemory乾坤大挪移,真累。今天我们就来看看,能不能让VB里的指针也能指哪儿打哪儿,学学VB指针的凌波微步。
各位看官,您把茶端好了。
一、帮VB做点COM家务事
本系列开张第一篇里,我就曾说过VB的成功有一半的功劳要记到COM开发小组身上,COM可是M$公司打的一手好牌,从OLE到COM+,COM是近十年来M$最成功技术之一,所以有必要再吹它几句。
COM组件对象模型就是VB的基础,Varinat、String、Current、Date这些数据类型都是COM的,我们用的CStr、CInt、CSng等Cxxx函数根本就是COM开发小组写的,甚至我们在VB里用的数学函数,COM里都有对应的VarxxxDiv、VarxxxAdd,VarxxxAbs。嘿嘿,VB开发小组非常聪明。我们也可以说COM的成功也有VB开发小组和天下无数VB程序员的功劳,Bill大叔英明地将COM和VB捆绑在一起了。
所以说,学VB而不需要了解COM,你是幸福的,你享受着VB带给你的轻松写意,她把那些琐碎的家务事都干了,但同时你又是不幸的,因为你从来都不曾了解你爱的VB,若有一天VB对你发了脾气,你甚至不知该如何去安慰她。所以,本系列文章将拿出几大篇来教大家如何帮VB做点COM方面的家务事,以备不时之......
VB真是想不到系列之三:VB指针葵花宝典之函数指针 (2005-09-25 22:34:00)
摘要:VB真是想不到系列之三:VB指针葵花宝典之函数指针
关键字:VB、HCAK、指针、函数指针、效率、数组、对象、排序
难度:中级
要求:熟悉VB,了解基本的排序算法,会用VC更好。
引言:
不知大家在修习过本系列第二篇《VB指针葵花宝典》后有什么感想,是不是觉得宝典过于偏重内功心法,而少了厉害的招式。所以,今天本文将少讲道理,多讲招式。不过,还是请大家从名门正派的内功心法开始学起,否则会把九阴真经练成九阴白骨爪。
今天,我们重点来谈谈函数指针的实际应用。
接着上一篇文章,关于字串的问题,听CSDN上各位网友的建议,我不准备写什么《VB字符串全攻略》了,关于BSTR的结构,关于调用API时字串在UNICODE和ANSI之间的转换问题,请参考MSDN的Partial Books里的《Win32 API Programming with Visual Basic》里的第六章《Strings》。今天就让我们先忘掉字符串,专注于函数指针的处理上来。
一、函数指针
AddressOf得到一个VB内部的函数指针,我们可以将这个函数指针传递给需要回调这个函数的API,它的作用就是让外部的程序可以调用VB内部的函数。
但是VB里函数指针的应用,远不象C里应用那么广泛,因为VB文档里仅介绍了如何将函数指针传递给API以实现回调,并没指出函数指针诸多神奇的功能,因为VB是不鼓励使用指针的,函数指针也不例外。
首先让我们对函数指针的使用方式来分个类。
1、回调。这是最基本也是最重要的功能。比如VB文档里介绍过的子类派生技术,它的核心就是两个API:SetWindowLong和CallWindowProc。
&nbs......