说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中使用API函数 (之二)

HTML文档下载 WORD文档下载 PDF文档下载
在VB中使用API函数 (之二)

 
Windows的一些特别之处

这个主题是要告诉你Windows 的一些与在VB中的不同的细节

Windows通过句柄(Handle)识别每个窗体,控件,菜单,菜单项或其他任何你能想得到的东西.当你的程序运行时,它所包含的每个部件都有一个唯一确定的句柄用来同其他的部件相区别.例如,某个按钮得句柄就与其他部件不同,当你想要通过API来执行有关该按钮的某种操作时就必须使用这个句柄.从哪儿得到它呢?VB 为每个拥有Windows句柄的控件都提供了Hwnd属性来表示其句柄.

Windows 使用像素(Pixel)而不是缇(Twip).因此,把涉及API函数调用的控件的ScaleMode属性设为3--(Pixel)是个不错的主意,这样你可以通过ScaleXXX属性得到它们的公制单位值.尽管这样,你可能有时仍需要进行从Twip到Pixel的转换(反之亦然),你可以通过Screen对象的TwipsPerPixelX和TwipsPerPixelY来实现.举例如下:

PixelXValue=TwipXValue\Screen.TwipsPerPixelX

PixelYValue=TwipYValue\Screen.TwipsPerPixelY

TwipXValue=PixelXValue*Screen.TwipsPerPixelX

TwipYValue=PixelYValue*Screen.TwipsPerPixelY

我并没有在实际中见到过TwipsPerPixelX 和 TwipsPerPixelY 的值有什么不同,但你最好是把它们区别开来而不是混用,这至少是一种好的程序设计风格.另外需要注意的是,这里用的是" \ "(整除) 而不是 " / " ,这是因为像素值必须是整数.

另外需要提到的是,Windows函数中用到了不同的坐标系统,因此需要注意.

最后要注意的是,一旦你使用了API 函数,VB就可能不再可靠了---API调用中一个简单的语法错误就会导致VB 崩溃!(请经常保存您的工程).VB 并不能识别API调用中的错误,因此一旦你的程序出现异常,要先检查API调用---是否缺少 ByVal,或者是错误的类型,参数等等.

从哪里得到有关函数的说明?

这个主题不会告诉你如何通过API函数改变按钮文字或如何快速查找一个文件.这不是一个API函数文档.

为了得到有关函数的说明,你需要SDK帮助或微软的SDK文档(至少有40M---我怎么可能放在这里?).这些SDK帮助通常都包含在Borland Dephli 3.0 开发包或者MS Visual C++中.到网上去或找您的朋友要一个,版本越新越好

注意Win3.x 的SDK 帮助对你并没有用,因为很多函数已经过于陈旧甚至废弃不用,尽管他们中的大多数由于与 Windows95兼容而依然存在.

API参数类型

如果你已经有了一个SDK帮助,你肯定主意到了函数的返回之或参数有很多奇怪的类型如VOID,LPCSTR, 和DWORD.如果你对C语言比较熟悉的话,那你肯定明白它们的意思.对于其他不熟悉C语言的人,这里有一张摘自 VB

Books Online(标题是:C语言声明到Visual Basic的转换)

Books Online(标题是:C语言声明到Visual Basic的转换)

 

C 语言数据类型 在VB中的声明 Call with
ATOM ByVal variable As Integer An expression that evaluates to an Integer
BOOL ByVal variable As Long An expression that evaluates to a Long
BYTE ByVal variable As Byte An expression that evaluates to a Byte
CHAR ByVal variable As Byte An expression that evaluates to a Byte
COLORREF ByVal variable As Long An expression that evaluates to a Long
DWORD ByVal variable As Long An expression that evaluates to a Long
HWND, HDC,HMENU,etc.(Windows handles) ByVal variable As Long An expression that evaluates to a Long
INT, UINT ByVal variable As Long An expression that evaluates to a Long
LONG ByVal variable As Long An expression that evaluates to a Long
LPARAM ByVal variable As Long An expression that evaluates to a Long
LPDWORD variable As Long An expression that evaluates to a Long
LPINT, LPUINT variable As Long An expression that evaluates to a Long
LPRECT variable As type Any variable of that user-defined type
LPSTR, LPCSTR ByVal variable As String An expression that evaluates to a String
LPVOID variable As Any Any variable (use ByVal when passing a string)
LPWORD variable As Integer An expression that evaluates to an Integer
LRESULT ByVal variable As Long An expression that evaluates to a Long
NULL As Any orByVal variable As Long ByVal Nothing or ByVal 0& or vbNullString  
SHORT ByVal variable As Integer An expression that evaluates to an Integer
VOID Sub procedure Not applicable
WORD ByVal variable As Integer An expression that evaluates to an Integer
WPARAM ByVal variable As Long An expression that evaluates to a Long

注释:

你应该注意到了BOOL类型(Boolean)求出的值为Long而不是Boolean.因此0表示"假"(False),其他任何值表示"真"(True).

HWND,HDC,HMENU,etc.---etc.指其他所有与于前面所述相似的类型.它们都以"H"开头来表示不同对象的句柄.举例来说,HBITMAP表示一副位图的句柄,HBRUSH标是一个刷子的句柄等等.它们均为Long而且要按值传递(ByVal).

同样要注意LPVOID被声明为Any型变量,本文将会有独立的一个主题用来论述Any类型.

有些类型以"LP"开头.LP 是Long Pointer的缩写.因此LPWORD实际表示数据所存的内存地址.不过,你并没有必要调用某个函数来获取这个地址.当你按引用(ByRef)传递参数时,你实际上传递的就是它的地址.在这里你只需记住:如果某个参数的类型以"LP"开头,应该按引用(ByRef)传递.顺便说一句,LPARAM 与 Lparam 很相似但不是Lparam,Lparam不是一个指针,在这里你必须传递它的真实值,因此要按值(ByVal)传递.

NULL也是一种奇怪的类型.你可以从 VB 中了解到有关它的描述,这里我不去讨论它.按你需要的形式传递它吧,在大多数情况下,可以用 ByVal 0& 或 vbNullString.

最后,VOID是用来指那些没有返回值的函数的.API中没有SUBs,这就是它们的标志.只要记住:如果一个函数被声明为VOID ,你必须在 VB 中把它声明为 SUB.
VB如何用VB6写COM组件(一) VB如何在VB中使用Delphi的控件 VB如何在运行时动态增加控件 显示和隐藏鼠标-VB资料 VB用ActiveX Control Pad VB用API函数改进ListView 控件的显示效果 用VB6.0中文版进行DHTML程序开发 用VB编写标准CGI程序 用VB编写留言板 用VB播放FLASH动画 用VB开发进程管理软件 VB用WinSock设计Chat程序 运用MSChart,生成统计图形-VB资料 向文本框等等控件的系统右键菜单里追加自己定义的菜单-VB资料 在VB中用定时控件实现长定时操作 在Visual Basic中,在GotFocus事件中快速选定文本 在程序中注册和注销 OCX 控件 -VB资料 在运行时维护DBGRID的栏位宽度-VB资料 VB怎样使用VB开发基于Sybase的C/S软件 VB怎样在运行时动态生成多个相同的控件 直接编辑VB中网格控制项的两种方法 自制控件方面的有关知识-VB资料 Unicode vs Ansi -VB资料 VB 中调用 Word 拼写检查 VB4.0安装程序的汉化 VB中对字符串的处理及其扩展 把符串中的一子串替换为另一子串 -VB资料 把数字转成英文字-VB资料 翻转一个字符串-VB资料 混合字符串的长度 -VB资料 将阿拉伯数字转成中文字的程式 -VB资料 关于CVS源码的问题 请帮我看一段代码啊,谢谢!!非常感谢 为什么浏览器总是显示临时目录中的旧页面 哪儿有比ToolBar2000中AdvStringGrid更好的可编辑表格??该控件哪有下,高分求助! 右键菜单的问题,急!!!!!! 用的挺入语句不同,结果数据库里边,日期的显示大不一样。真见鬼了。 It's a good day to die. 如何给我的计时器设置同步? 能否实现双猫连接共享上网 用什么控件操作jpg图片 >>>>>>>>>怎样从一个文本文件中得到指定的一行字符串 请几个版主进来看看,给个说法吧 ADOQUERY和APPEND在一起为什么老报错呢 请教 datarow 的item属性为何不见了 关于java程序员薪资调查 链表赋值的问题,在线 真是见鬼了,请各位大侠指点,插入语句不同,日期显示为什么大不一样? 在线等候,当场结贴;如果在SERVLET中调用Thread的"等候"方法 dreamweaver生成的代码,请解释一下 初级问题,编译通过,bulid不了? 菜问题,怎么弄带输入框的messagebox? 我错过了看 <我从校园出来的这几年>,现在找不到了.请各位指点 请问POD的含义 jbuilder7下怎么用struts? 请教关于活动目录的问题,大家帮忙 动态创建的edit控件如何设为透明? 谁知道SUIPack3的完整版哪有下载? Redhat Linux8.0的安装问题 一个可以通过编程来设计自己角色的MUD游戏 notes中使用applet 的问题? 求助:如何实现检索结果生成dataReport报表。解决送50高分 我现在急... 关于qrimage动态加入图片!!!送50分 查询问题,简单 高手指教一下 用的插入语句不同,结果数据库里边,日期的显示大不一样。真见鬼了。 招深圳本地COM组件兼职开发人员 怎样把字符串“09:00”转为时间格式? 怎样判断一个变量是否为DataTable型???? C++学习结束,想学MFC,希望高手推荐好书!! 各位高手,谁用过ctListBar这个控件,帮我看看为什么我的界面上总是看不到它呢? 一个小问题 多线程的问题? 为什么数据库总是不处于独占状态,没法子还原? <编程没天份>各位不要骂了,我把书籍下载的网地址公布出来了。 那有vs6.0中文企业版下载?? 上海的朋友进来帮忙看看! 寻合作者 编译时候出错,帮助! 谁下过三星T508手机的铃声和图片?来指点一下。 关于最大化,最小化的问题 刚刚入门,问几个我一直很迷糊的概念 ___Mrs.Lu____(fall)into the water?--Yes,but she ___(not hurt)herself.理由是什么 集合的判断题{0,2,5}包含于{0,2,5}如果是错的,错在哪里? 质量为m的小球,用一细线悬挂在点O处 用水平恒力F(F<mg)将小球拉起,细线和竖直方向的夹角最大为这题为什么是小球静止时夹角最大?只需回答这个问题,具体答案不用回答 国产对讲机哪种好:单位想购买一批对讲机,介绍下哪个好 黄道婆学的棉纺织技术学自A白族 B彝族C黎族D山越族 什么化学物质是红褐色或深橘红色且化学性质稳定这种物质最是由两种溶液反应得到 什么是二倍体生物 What I want to say is _____.A.these B.those C.this D.them 选哪个?为什么?这几个词有什么区别?我怎么感觉ABCD都可以呢? 红褐色配什么颜色 什么叫二倍体生物? 在热茶中,先倒入凉开水,等五分钟之后,热茶凉的快,还是操作方法倒过来热茶凉的快?那杯茶水凉得快在热茶中,先倒入凉开水,等五分钟之后,热茶凉的快,还是让热茶凉五分钟后再倒入凉开水热 红褐色是什么颜色 如图为突触的部分结构,下列叙述不正确的是( ) 第3题图如图为突触的部分结构,下列叙述不正确的是( )第3题图 介绍开平碉楼的目前情况的英语作文 80词左右.急用 e27是什么意思 小明拆开某种食品包装袋的时候,发现其中有1小袋抗氧化剂,撕开后发现袋内有板结的铁锈.试推测该抗氧化剂的有效成分是什么?他除了有延缓食品被氧化变质的作用外,还有什么作用?简述原理 保护开平碉楼,弘扬侨乡文化(历史小论文)历史小论文,400~500字左右,用来交作业,今天之内交, 什么是肿瘤坏死因子拮抗剂? (99初赛)一个群体中一条常染色体上的某一基因座,有5种不同的复等位基因,那么在这个群体的二倍体中将有几个不同的基因型A 5 B 10 C 15 D 25答案是C但我觉得是B我是用5*4/(1*2)算的,错在哪 保护开平碉楼 弘扬侨乡文化 急400字的就行了····我用来交作业的 当a满足条件 时,由as>8可得x<8/a 快 ·· 快哭出来了 . 填初一下语文的一张表格,100分! 220V拷棒式无火花电铃和打铃仪连接不打铃的问题?220V拷棒式电铃和打铃仪连接不打铃的问题?今天购买了一个220V的棒式无火花电铃(打铃仪是12V电铃+220V电铃的连接口的),为什么12V的电铃连 什么指标能判定是强直性脊柱炎 什么是物料守恒 SC200/200施工升降机的故障判断法电铃响插坐有电就是不动什么原因 FLASH,AS,SetTimeout,让它的函数参数带上参数一:怎么让SetTimeout(fun,2000)的 fun函数带上参数?二:这语句表示2秒后调用fun()函数,那么如果在1秒后fun函数的参数改变了,那么SetTimeout用的是哪个参数? 如何简易测河流水速?如题 电铃 纯电阻电路电铃属不属于纯电阻电路 在一行草原上有8户牧民,每户牧民各养一群羊,其中6户养绵羊,有2户养山羊,这个草原上8群羊是什么?两个种群,为什么不是一个群落了而是这个呢? 一条宽为100m的河流,水速为5m/s.在某一码头下游50m处有一危险区域,从码头开出的船为了安全到达对岸,船本身的速度必须为 m/s答案是2又根号5,某一码头指的是?不理解题目的意思合速度是偏 电铃的构造 一质量m的小球,用长为l的轻绳悬挂于o点,当用水平恒力F将小球从平衡位置P点拉到与竖直方向成x的Q点,恒力F所做的功A FL(1-COSX) Bmgl(1-cosx)C Flsinx d FLCOSX 金属壳内有电荷,壳外也有电荷,金属壳不接地.请问这时候壳内电荷对壳外的电场有影响吗,有什么样的影响 如果船速度3米每秒,水速5米每秒,河宽60M1过河的最短时间为多少2过河的最短距离是多少?穿透应与河岸成多少角度? 黄道婆的努力极大地推动了松江地区棉纺业的发展.改为把字句 哪句较合适些?黄道婆的努力极大地把松江的地区棉纺业的发展推动了.黄道婆的努力把松江的地罗棉纺业的发展极大地推动了. 英语翻译···这座美丽的喷泉呈螺旋状,每当喷泉音乐想起时,水珠就螺旋状的铺撒开来,就像一个芭蕾舞演员在上面动情地舞蹈 高一完形填空为什么填those不能填them?Maybe we do only make a few "best" friends ,but _those_are not only people that we can call friends. 黄道婆的努力极大地提高了松江地区棉纺职业的发展.(修改病句.) 英语 喷泉翻译 喷泉可数吗 一体化温度变送器安装在管道上有角度要求吗 勤劳、勇敢、聪明、无私的黄道婆不断改进棉纺织业的工具.(缩句) 英语翻译急,急 1.如图,OE为∠AOD的平分线,∠COD=四分之一∠EOC,∠COD=15°求:(1)∠EOC的大小(2)∠AOD的大小 《生于忧患,死于安乐》的现代文翻译` AB为圆O的直径,点C,D在圆O上,已知∠BOC=70°,AD‖OC,则∠AOD=___. 如图、OE为角AOD的角平分线、角COD=4分之一 角EOC ∠AOE等于60°,求∠AOC的大小. 交通费12元,买课外书20元,问交通费比课外书少百分之几? 正方形喷泉的周围是四个半圆形的草坪,如果喷泉的边长为4米,那么草坪的总面积是多少平方米 如图所示,OE为∠AOD的平分线,∠COD=1/4∠EOC,∠AOE=60°,求∠AOC的大小. 小明这个月交通费比买课外书少50.这个月小明花费了多少钱?课外书占百分之五十,交通费占百分之三十,其他占百分之二十 如图,CD是半径为1的圆O的直径,点A在圆O上,∠AOD=60°,B为弧AD的中点,在直径CD上求作一点P,使PA+PB的值最小,并求PA+PB的最小值 如图,OE为角AOD的平分线,∠COD=四分之一∠EOC,∠COD=15°.求(1)∠EOC的大小,2、求∠AOD 【求书】身上就只有50元,求本值得你花这钱去买的书! 个 块 座 辆 架 一()草坪 一()电梯 一()轿车 一()喷泉 一()雕塑选词填空 如图,OE为角AOD的平分线,角COD=4分之1角EOC,角COD=15度,求:( 1.)角E如图,OE为角AOD的平分线,角COD=4分之1角EOC,角COD=15度,求: ( 1.)角EOC的大小(2)角AOD的大小 高中化学阿累尼乌斯公式变形,化学反应速率中2.303是一个什么数据这个2.303是怎么来的,在阿累尼乌斯公式中也没有这个数据啊 菲律宾的英语环境怎么样? 关于集合的判断题1.{x|x>1}={y|y>1}2.{x|x+y=1}={y|x+y=1}判断这两个式子是对还是错!靠 搞不清了 说明理由 啊 数学大师快来啊 再顶一次 质量为m的小球,用一细线悬挂在点O处.现用水平恒力F(F 白宫微博有“水军”专为奥巴马“解围”英国政府禁止内阁会议及其它敏感部门使斯诺登求美“宽大处理”被拒 在俄与德朝鲜证实海军官兵殉职美机场枪案嫌犯为“独狼”中国小伙MBA毕业 波士顿街头卖烤肉全国反“四风”开整7大问题 叫停公款武康女店主发现儿子走丢忘报警16岁少年带着理发用剪刀抢劫不成去自90后女子看老公送很多红心给别人醋意嘉兴男子家因排污管堵塞被污水淹 9户女子给骗子汇钱逼停出租车 的哥及时中杭州国际人才交流与合作大会明天开幕 多项违纪 孙杨被处停赛、停训、暂停一浙江杭州等地连续雾霾 “最美马拉松”“海龟”与“土鳖”结合 浙江发展关键金华房地产投资增速连续七个月居全省首张高丽在上海浙江调研:东部地区要带头杭州欲从钱塘江引风进城吹走灰霾“国家记忆”美国档案馆二战缅印战场影浙江省政协公开征集2014年重点履职天公作美人工助阵,我省多地降雨无标题刘建宏将离开央视?大河股票池(8月6日星期三)瑞士名表2.5折起限时抢购行车如行舟,爱车“伤不起”NBA女性元素 No.1得了颈椎病试空手甩臂《离婚律师》钱都花哪儿了?3名工人掉入污水池消防官兵紧急救援郑州又出地王新秀赛报名接近尾声大河实战账户(8月6日星期三)我省机场扩大地盘抢“机”遇一家四口冒充军人诈骗商户降水集中在个别乡镇三门峡大部旱情依旧面包车当门店沿街卖液化气无标题交警执法不文明市民可拍摄举报新车全力出击试驾精彩纷呈收银员借软件漏洞偷280多万续:近5
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘