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

在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.
后机械硬盘时代,那些引领风骚的闪存初创公司 致远文杰:传统企业如何实现移动化转型? 记华为HCC2013 Day2:SDN开放编程系统OPS打造生态圈 HCC2013:华为FusionCube融合至简,性能至优 已确认Stephen Elop候选微软下任CEO 英语对于软件开发者来说到底有多重要? SDCC 2013中国软件开发者大会成功落幕 新浪微博宋琦:PHP在微博优化中的“大显身手” 8月份浏览器份额:IE浏览器PC端出现反弹 移动端跌出前五 如何让Ruby项目速度提升10倍 跨平台进行到底:Facebook发布Unity SDK 云薪资管理初创公司ZenPayroll:年处理薪资超1亿美元,获多位知名CEO力挺 Twitter开源Summingbird:近原生编码下整合批处理与流处理 亚马逊推Matchbook 欲将顽固纸质书读者拉向电子书 Broadcom为可穿戴设备推新开发平台WICED 再战江湖 New Kodak还牛不牛? 郭理靖:公、私有云架构异同点与难点 美化代码的15个代码语法高亮工具 你所不知道的虚拟化和云计算 [开源推荐]Effeckt.css项目:CSS交互动画应用集锦 针对Google Glass应用的四大UX设计原则及典型应用 Google收了摩托罗拉,微软收了诺记,黑莓又将花落谁家? 十亿月PV网站秘诀:Reddit自失败中总结的25条经验 粉碎5个NoSQL流言:各司其职,NoSQL的出现比关系型更早 豌豆荚发力移动游戏平台,推出SDK 2.0 BlackBerry Jam Asia 2013即将在香港隆重召开,免费门票限量提供 小米发布会高潮迭起:米3、电视、Hugo大牛 谷歌放在Windows上的特洛伊木马:Chrome Apps应用平台 解析:Google基于数据驱动的招聘面试程序 决战“缓存”之巅:微软 vs. 亚马逊 雪中送炭:十大前沿移动应用开发工具 No4:500分求足彩“合成复式”算法,关键是速度要快(分不够可再加)!!! weblogic61 运行时的一个问题。 Microsoft Windows Media SDK 在VB使用问题? 有谁遇见这样的问题:上传问题,Malformed form data!在线等,50分 一个pointer的问题? 那位知道 神州泰岳软件股份有限公司 ,这个公司如何? 再次请教:为什么tracert www.sina.com.cn只得到一行输出?谢谢! 提一个小问题 各位仁兄帮个忙,关于如何进行dbgrid多重选择。 请高手指点!!!!!在线等 问一个简单的对话框问题。。。 装机小技巧 如何得到交叉表的横向加权平均数??? 格式如下? 在mhsflexgrid控件中加入一行(在线等候) 我如何得到屏幕的变化,请大侠指点! 关于定时器 vc怎么总是乱改我的程序 请教一下applet能干些什么? vb.net中如何使用api ,调用一个dll文件中的函数? 请教完成端口高手 如何加入COM控件 紧急求救,斑竹大侠赶紧帮忙! 从SQLSERVER过度到ORACLE的一个简单问题 interbase中如何写外连接语句? 访问存储过程与直接访问表有什么区别! 大家给推荐一下API的书 下面的语句在VBA中:AddressOf 使用无效是为什么??谢谢! richtextbox控件在winodws98下运行正常,为啥到了win2000环境运行却出现非法操作 如何将鼠标的移动,限制在一定的范围内?? 调用那个函数可以实现windows休眠啊! ★★★zyq123 (雍亲王,做人应该量力而行!) 不是大家认识的那个zyq_123(雍亲王,做人应该量力而行!)★★★ 想修改修改.NET做的webservice的界面,该在那里做啊? 求算法 怎样设置IIS自动重起??? 求助!这样做可以吗? 关于cint的问题,送分 请问怎样得到本周一或者前一天的日期(即年月日) 特急﹕XMLHTTP疑惑﹖! Delphi操作Word文档的问题 在asp.net项目各页面间传递参数的问题 是否可以用frontpage直接修改远程主机上的网页? 虚拟机的问题,有谁用过virtual pc?怎样和主机连网呢?头痛中。。。。。。 哪里有基于Windows平台的SNMP协议的网管软件源代码例子,谢谢!!! 如何知dataset某表的当前记录位置? 请教一下,什么可视化工具可以方便开发pro*c jsp不支持UTF-8字符集吗?否则为什么会用上就报错? Office工具栏的问题,请高手进来,低手不要进来,一定结帐 以前我在CSDN看过类似的贴字,现在忘了这样的sql语句怎么写,请知情者赐教!! 讨论:数据模块中数据控件的多少的问题! service 如何做成多线程的???谢谢? 如何将从此帧图像计算出的一个与前一帧图像上计算出的相应的值相加? 填反义词谁会?特地 平常说的青色与绿色有区别吗? majeure怎么发音啊?force majeure 不可抗力的意思 填反义词:自( )自( ) 青色和绿色有什么区别? 如图,在三角形ABC中,点D在边BC上,BC平行于CF,且BE=CF,求证AD是三角形ABC的中线 高三立体几何证明 怎么区分青色和绿色 如何正确饮水 电力电子技术选择题(可能是多选题) 已知三角形+方框=30,方框+圆=29,圆+五角星=47,那么,三角形+五角星=? 三个有利于”标准是A.判断姓“社”“姓”“资”的标准 B.实用主义的标准 C.判断各项工作得失成败的标准 1.正常工作状态下的稳压二极管,处于伏安特性曲线中的( ).A.正向特性工作区 B.反向击穿区 C.正向特性非工作区 D.特性曲线所有区域2.本征半导体的载流子浓度随温度上升而变,其中( ).A 青色与绿色的有什么区别? 观察方格纸上所画图形位置的关系,并填空 nacl 与 co2反应么? 青色跟绿色的区别是什么? 没有重力还有大气压强吗 电力电子复习题 谁帮我写下答案 复习题1、使晶闸管导通的条件是什么?2、维持晶闸管导通的条件是什么?3、试说明IGBT/GTR/GTO/电力MOSFET各自的优缺点.4下列电力电子器件属于电压驱动型器件是 不可抗力的英文模板 小学五年级奥数题答案怎么查 如图一在矩形abcd中ab等于六厘米bc等于拾贰厘米点p从点a开始一厘米秒速度沿ab边向b点运动, ( )才( )用 填反义词 force majeure 像易拉罐压扁、木头碎裂、玻璃碎裂、折纸这样的变化等是( )1、像易拉罐压扁、木头碎裂、玻璃碎裂、折纸这样的变化等是( A、形态发生了改变 B、产生新的物质 C、 没有什么变化导致全 “遭遇不可抗力的一方“怎么翻译 force 和谐的人际关系包括哪些特征 电力电子复习题,1.缓冲电路的设计思想和作用? 看图编题并解答 把易拉罐压扁和火柴燃烧这两种变化有什么不同的地方? 电力电子 复习题,一、填空:得分\x05评分人 \x05 1.单相全控桥式整流大电感负载电路中,晶闸管的导通角θ=_______,单相半控电路感性负载电路中为了防止失控现象,常采取 措施.2.有源逆变产 看图编题、并解答 《电力电子》的问题,题目在附件中.若由于公式的格式问题,解答时候需要发电子邮件的,可以发到我的电子邮箱 bangongwenda@126.com 中,也可以手写,之后,用手机等拍照的形式发到我的电子邮箱中. 甲、乙两辆汽车分别从相距900千米的A、B两地相向同时出发,甲车比乙车每小时多走10千米,由于甲车中途出现故障,停车修理了一段时间,结果两车恰好在A、B两地的中点相遇.①如果甲车每小时m 看图编题,并列式解答: 左( )右( )要使()里填的是反义词,怎么填? 甲、乙两车分别从相距900千米的A、B两地同时出发,相向而行.甲车比乙车每小时多走10千米.甲车中途出现故障,停车修理.结果两车恰好在A、B两地的中点相遇.问:1.如果甲车每小时走a千米,那么 全部得答案,还要给我编好是哪道题, 这几个反义词怎么填 我没带数学课本,有谁知道 初一科学出试卷3张 自己编 填空30分 实验活动40分上册 解释不可抗力 A,B两地相距900千米,甲,乙两车分别由A,B两地同时出发相向而行,它们在途中C处相遇相遇后甲再过4小时到达B地,乙再过16小时到达A地,求A到C的距离及两车速度 运动中和运动后的正确饮水方法是什么 如果某整数同时具备如下三条性质1)这个数与1的差是质数;(2)这个数除以2所得的商也是质数;(3)这个数除以9的余数是5.我们称这个整数为幸运数,那么在两位数中,最大的幸运数是______ 甲,乙两车同时从A,B两地出发,相向而行,AB两地相距900千米,甲乙两车的速度比是车的速度比是2:3,经过6小时,两车相遇.甲乙两车的速度分别是多少 请教三相三线二元件电子表A相断电流,三相三线二元件电子表如何求追补电量?是电子表,不是机械表 8、如果某整数同时具备性质: (1) 这个数与1的差是质数 (2) 这个数除以2的商也是质数 (3) 这个数除以9所得的余数是5 我们称这个整数为幸运数,那么在两位数中,最大的幸运数是多少? 求五角星的边长为60,它的直径是多少? 如何正确饮水呢? ps怎么做易拉罐感觉像冰冻的 就是易拉罐上有水珠的那种要在这个易拉罐上做 物质提供万有引力的能量源是什么?附:牛顿万有引力的依据? “三个有利于”的标准体现了选项:a、生产力与生产关系的统一b、从实际出发和从人民利益出发的统一c、经济基础和上层建筑的统一d、真理标准与价值标准的统一e、经济制度与经济体制的 设有奇数个整数,它们具有这样的性质:从中抽去任一个数之后,余下的数可以分成两组,每组中所含的整数的个数相等,并且每组中的数字之和也相同.求证这些整数必须全相等. 万有引力是物质的一种属性吗?他与物质的能量属性有什么关系? 如图,在方格纸上有∠α.回答:∠β与∠γ又怎么样的数量关系?为什么?..(1)画出∠α的一个余角∠β.(2)画出∠β的一个补角∠γ.(背景而已,不必回答) 填反义词例如:(好)坏()惩 ()贬 ()吐 ()静 ()夕 ()福 ()苦 ()败 ()舍 ()衰 怎么区分青色和绿色求解答 已知:如图,在三角形ABC中,点D在边BC上,BE平行于CF,求证;AD是三角形ABC的中线 外媒:中国要美解释对华监听行为美媒:非洲或取代中国成为下一个世界工美媒:中国海军借反海盗行动获远洋经验美国毒贩修隧道铺轻轨快速运毒 通往墨湖南岳阳三姐弟上学途中遭绑架杀害 嫌苏格兰女法医揭秘连环凶杀案 数十桩悬16岁少年蜗居桥下一个月 以废弃席梦福建商人遭老乡绑架 交付185公斤黄河北超生女婴被抱走追踪:家属称有人欲成都10岁小学生跳楼自杀 班主任殡仪下周起北京供暖热线“12319”全天中国珠算韩国泡菜等备选人类非物质文化富二代驾玛莎拉蒂对飙法拉利 追尾面包成都调整市政府领导分工 市长葛红林不土耳其4名女议员戴头巾出席会议 打破盘点:医生绝对不会告诉你的那些事儿外媒:中国人为何与读书渐行渐远?锦江区回应男孩坠楼事件 要求各学校加外媒:美国使馆搞监听激怒亚洲多国英报:高尔夫球场或成中共反腐“新阵地德内政部长称接受斯诺登帮助 但拒绝为明起7条中巴线路 升级为空调车全国政协十二届四次会议3月3日召开11岁男孩被陌生男举起又摔地上500名民警连夜抓捕 嫌犯在废弃屋内河南一学校被曝按成绩收费:后十名收数警惕受损车成天津爆炸的次生灾害奥斯卡太白?更白的是好莱坞 | 政见今年三门峡市委首轮将巡察哪些单位?油价不降油品难调,消费税成治理雾霾关女神唐嫣代言《剑雨江湖》糖蜜们赶紧行非农撞上大选,意味着油价暴涨?宝马M6 驾驶感受分享三门峡湖滨街道黄北社区“爱心墙”启用原油暴涨暴跌的操作分析与建议!一河滩竟有几百人挖宝,每天挖上百枚古中国傲视它国的十大武器:歼20接替歼美国新全球战略之稳定后院战略沪指2700点 后市重点关注“两会”监管严查非法集资 P2P首个合规风控超级非农周来袭,周一铜油是否延续上周每日弹幕:OPPO推中端机!这是要发
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘