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

VB利用API函数实现VB特殊窗体的两种方法

HTML文档下载 WORD文档下载 PDF文档下载
VB利用API函数实现VB特殊窗体的两种方法

   在VB集成开发环境(IDE)中,设计程序时所新建、添加的窗体都是矩形的。如果出于某种需要,想让窗体在运行时呈现出特殊的形状,就必须借助API函数编写相应的代码。
  [方法一]使用区域创建函数
  常用的区域创建函数有:
  CreateEllipticRgn
  '创建一个椭圆或圆形区域
  CreateRoundRectRgn
  '创建一个圆角矩形区域
  CreatePolygonRgn
  '创建一个由一系列点围成的区域
  CombineRgn
  '将两个区域组合为一个新区域
  SetWindowRgn
  '设置新的窗口区域。
  通过CombineRgn可以取两个区域的并集、交集等组合,从而创建出复杂形状的窗体。例如,以下程序得到的窗体形状为两个相连的月牙形:
  '例程1
  Option Explicit
  'API声明
  Private Declare Function CreateEllipticRgn Lib“gdi32" _
  ByVal x1 As Long, ByVal Y1 As Long, _
  ByVal x2 As Long, ByVal Y2 As Long) As Long
  Private Declare Function CombineRgn Lib “gdi32" _
  (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _
  ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  Private Declare Function SetWindowRgn Lib “user32" _
  (ByVal hWnd As Long, ByVal hRgn As Long, _
  ByVal bRedraw As Boolean) As Long
  '常数声明
  Const RGN_XOR = 3
  Private Sub Form_Load()
  Dim Rgn1, Rgn2
  Rgn1 = CreateEllipticRgn(100, 100, 400, 400)
  Rgn2 = CreateEllipticRgn(200, 100, 500, 400)
  CombineRgn Rgn1, Rgn1, Rgn2, RGN_XOR
  SetWindowRgn hWnd, Rgn1, 1
  End Sub
  [方法二]使用BeginPath、EndPath、TextOut、PathToRegion等函数
  BeginPath函数调用启动一个路径分支,在这个命令后执行的GDI绘图命令会自动成为路径的一部分,Windows95中合法的路径函数有文本绘图函数TextOut、绘制多边形函数Polygon等。
  EndPath函数用于结束定义一个路径,如果调用成功,BeginPath函数和它之间发生的所有绘图操作都将在指定设备场景的路径中生效。BeginPath函数一般与EndPath函数成对出现。
  PathToRegion函数调用将当前选定的路径转换到指定区域中。
  TextOut函数的声明如下:
  Declare Function TextOut Lib “gdi32" Alias“TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
  参数说明如下:
  hdc :设备场景的句柄 ;
  x,y :绘图的起点,采用逻辑坐标 ;
  lpString:欲绘制的字串 ;
  nCount:字串中要绘制的字符数量,一个汉字的字符数量为2 。
  以下程序生成一个宋体的“国”字形的窗体:
  '例程2
  Option Explicit
  '类型声明
  Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
  End Type
  'API声明
  Private Declare Function BeginPath Lib “gdi32" _
   (ByVal hdc As Long) As Long
  Private Declare Function TextOut Lib “gdi32" _
  Alias“TextOutA" (ByVal hdc As Long, _
  ByVal X As Long, ByVal Y As Long, _
  ByVal lpString As String, _
  ByVal nCount As Long) As Long
  Private Declare Function EndPath Lib “gdi32" _
  (ByVal hdc As Long) As Long
  Private Declare Function PathToRegion Lib“gdi32" _
  (ByVal hdc As Long) As Long
  Private Declare Function GetRgnBox Lib“gdi32" _
  (ByVal hRgn As Long, lpRect As RECT) As Long
  Private Declare Function CreateRectRgnIndirect Lib “gdi32" _
  (lpRect As RECT) As Long
  Private Declare Function CombineRgn Lib“gdi32" _
  (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _
  ByVal hSrcRgn2 As Long, _
  ByVal nCombineMode As Long) As Long
  Private Const RGN_AND = 1
  Private Declare Function DeleteObject Lib“gdi32" _
  (ByVal hObject As Long) As Long
  Private Declare Function SetWindowRgn Lib “user32" _
  (ByVal hwnd As Long, ByVal hRgn As Long, _
  ByVal bRedraw As Boolean) As Long
  Private Declare Function ReleaseCapture Lib“user32" _
  () As Long
  Private Declare Function SendMessage Lib “user32" _
  Alias “SendMessageA" (ByVal hwnd As Long, _
  ByVal wMsg As Long, ByVal wParam As Long, _
  lParam As Any) As Long
  PrivateConst WM_NCLBUTTONDOWN = &HA1
  Private Const HTCAPTION = 2
  '窗体代码
  Private Sub Form_Load()
  Dim hRgn1, hRgn2 As Long
  Dim rct As RECT
  With Me
  .Font.Name = “宋体"
  .Font.Size = 200
  .FontTransparent=true
  '读者可设置为False观察其效果
  End With
  BeginPath hdc
  '为窗体形状产生路径
  TextOut hdc, 10, 10,“国", 2
  EndPath hdc
  hRgn1 = PathToRegion(hdc)
  '将指定路径转换为区域
  GetRgnBox hRgn1, rct
   '获取完全包含指定区域的最小矩形
  hRgn2 = CreateRectRgnIndirect(rct) '创建rct确定的矩形区域
  CombineRgn hRgn2, hRgn2, hRgn1, RGN_AND
   DeleteObject hRgn1
  '删除GDI对象,释放占用的系统资源
  SetWindowRgn hwnd, hRgn2, 1
  End Sub
  Private Sub Form_MouseDown(Button As Integer, Shift _
  As Integer, X As Single, Y As Single)
  '移动窗体
  ReleaseCapture
  SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0
  End Sub
  Private Sub Form_DblClick()
  '卸载窗体
  Unload Me
  End Sub
  如果想得到各种图案窗体,可以将窗体字体属性设置为Webdings、Wingdings、Wingdings1、Wingdings2、Wingdings3、Monotype Sorts等,这些字体中包含大量的图形字符,例如,Webdings字体下,代码“TextOut hdc, 10, 10, ‘J’, 1”可以得到风景画轮廓的窗体;Windings字体下,代码“TextOut hdc, 10, 10, ‘(’, 1 ” 可以得到电话形状的窗体。通过Windows附件中的字符映射表能够方便地浏览或选择、复制适用的字符。需要提醒的是,程序运行的机器中必须装有该字体。
  对比两种方法,方法一适合于创建几何形状简单的窗体,复杂的窗体理论上虽然可以实现,但操作起来比较困难。方法二简单易行,虽然有一定的局限性,但能够使窗体具有各种字体中各个字符的形状(你甚至可以利用造字程序自己“画”一些图形),还是很令人兴奋的。
  创建特殊窗体时,需要注意以下几点:
  1.如果窗体的Borderstyle属性没有设置为None,即使运行时标题栏不可见,但相应的键盘操作,如“Alt+空格键”、“Alt+F4”等依然有效;如果Borderstyle属性为None,最小化、窗体移动、退出等功能必须编写相应的代码来实现。当然,使用特殊窗体制作软件封面就不需要考虑那么多了。
  2.因为没有常规矩形窗体的立体边框效果,窗体的背景色应尽量采用醒目的颜色。
  3.特殊窗体的使用必须得当,用得好自然锦上添花,否则给人以哗众取宠之感。(北京 冯新强)
亚信大数据事业部总经理张灏:打通各行业数据壁垒 让大数据变现畅通无阻 Web App和Native App不是生死之争,而是可以和平共处! 微信之父张小龙说微信坚持“去中心化”,这样真的好吗? 亚信CFO武军谈进军海外市场成功经验 前瞻性思维是开路先峰 Swift,任重而道远! DevOps系统的变迁 玩转Docker镜像 “扫描建模”速建AR应用 Vuforia 4.0 SDK更新 硅谷里的外星人:纵观Reddit十年风雨路 不见不散 Cloud Foundry Meetup活动将首次走进杭州 独立开发者:新手做2D手游该用哪些工具? 求安全化危机!Uber研发生物识别技术、聘请前亚马逊运营 JavaScript社区开发者调查:服务端JS盛行 AngularJS使用者最多 去中心化、去中介化,微信商业化路径清晰了吗? 微信企业号认证简化了,你造吗? 专访瀚思安信联合创始人:大数据技术助力企业实现主动智能防御 挑选IBM Bluemix作为云平台的10大理由 10年技术积累成就极光压缩引擎,欧朋流量宝5.0面世 【图文实录】12月19日CTO俱乐部走进杭州 mlpack:可伸缩C++机器学习库 本地项目托管将死?类GitHub站点永存! 2014年讨论最多的编程语言:JavaScript称霸 移动Web应用UI框架大比拼:Ionic vs. Famo.us vs. F7 vs. OnsenUI 面包旅行CTO薛亮:做旅游与社交有机结合的先行者 盘点开发者最喜爱的Swift技巧 2017年,开发者还能从移动广告中收获什么? 《近匠》茄子快传,让设备更好地连接 面向移动应用程序的DevOps五大挑战和十个最佳实践 Ruby 2.2.0发布,支持回收Symbol类型对象 听UnitedStack、IBM、HP专家如何谈“OpenStack 存储”技术 专访POWER 8编程挑战赛选手孙冬冬:从C语言到人工智能、深度学习的技术演变 大家晚上好,怎么让我的程序里有一小块是网页的内容呢?(全部家档!!) 关于Database和Session的问题!火急!(快乐的程序员) jsp+mysql如何在linux上配置 有知道黑龙江高程查分方法的吗????? *******我要一个这样的类:显示淡入淡出的菜单(最好还能有半透明的功能) *************** 特急,各位帮忙。怎么样在字符串中包含'(单引号)? 高分求助用paradox数据库保存JPEG图片的代码,我试过网上好多都没成功。markoni@21cn.com 吴文智、袁飞、Jinesc、Jneu、Amoon、ttyp、icevi、progame 快请进 请教一个表与表之间比较数据的问题,由于数据量大,造成事务不够,请教解决方案 execcommand的使用方法求救。高手请进,一定给分。 我的时钟怎么回事? Matlab论坛 打印机的取消按钮 dbgrid中当某个单元格失去焦点时触发什么事件? 关于Database和Session的问题!火急! yanxu1 学习unix下的c编程,该如何学?请介绍方法,资料什么的--我对unix和c都还熟悉。 打印机死机作何解?????? 我是新来的,请各位大哥、大姐们多多关照!!!(有内容) 再次发问关于sql server7的问题?? SQL SERVER中的一个触发器的问题!!! xml里有什么method可以取得子节点在父节点中的位置(序号)? please help me 怎么样才可以把系统存储过程的结果写到结果集里? 如何声明和使用自定义对象(如:Tdataset)的事件(beforecancel)?? 一个奇怪的问题? 各位兄弟,谁知道哪里有pb7的下载? 天呐 我提的问题从来没人回答 SQL Server小小问题 请问那里有DELPHI第二张光盘下载! 如何是使用describe来获取datawindow中的带区参数? 谁有早期的TeeChart5.ocx,文件大小为2,576,384,发行日期在2001-06-17号以前的,我这里有个crack软件,但是新下载的不行,所以重金寻求!!! 请问C语言中有字符串查找函数吗? 请问如何动态的改变应用程序的图标,一定给分 Query主从表编辑问题,从不丢失! 急急急!!!! 高分求禁止IE的自动谈出的广告,有个软见也行,或者告诉实现方法。请告诉下载的网址。 打印一些清单在delphi中用哪些控件比较好? 如何打印到文件 如何得到WINDOWS的拼音字库 如何在BCB中进行SDK编程? 一个简单关于对话框的问题------->> 用asp将图片插入数据库,到底错在哪?苦恼啊!以前这个也通过了(win2000server+Sql7.0)但...(高分!!!!) 为什么我在Access2000的mdb中只能最多得到一条记录? 男人25岁就大吗? 关于 C 类IP的屏蔽 配置为COM+组件后,CoCreateInstance 失败! 关于C 类 IP的屏蔽 有谁知道本.拉登的QQ,俺找他有事?重奖`~~~~~~~~~~~~~~~~~~~! 有没有人告诉我,HTTP头跟正文中间夹的什么? 请问asp和php能访问webservice吗??? 如何一打开NOTE客户端就执行我的数据库(不能设书签)? 一个长方体,它的高和宽相等,若把长去掉2.5厘米,就成为表面积是150平方厘米的正方体.长是宽的几倍? 把60L水倒一个棱长为5dm的正方体容器里,水的高度是( )dm 一个圆柱底面半径4dm,高3dm和它等底等高的圆锥体积() 一个长方体的高和宽相等,若把长去掉2.5厘米,就成为表面积是150平方厘米的正方体.原来长方体的体积多少 什么叫转基因食品? 把一个底面直径是4dm,高是3dm的木质圆柱加工成最大的圆锥,这个圆锥的体积是多少? 一个长方体,它的宽和高相等,如果把长去掉2.5厘米,就成为一个表面积是150平方厘米的正方体.那么原来长 1.有关“转基因”的资料,转基因技术的由来.——————————————————————————————————2.“转基因食品”是有益还是有害?请找到相关材料,说明.————— 两个底面积相等的圆柱和圆锥,圆柱的高为4.5dm,体积是81dm3,而圆锥的高为3dm,它的体积是多少? 王叔叔在加油站加了40升汽油,开车去距离加油站200千米的省城办事.每升油行驶8千米,到达省城时还剩下多少升油 小明和父母一起开车到距家200千米的景点旅游.出发前,汽车油箱内储油45升;当行驶150千米时,发油箱剩余油量为30升.(1)写出用行驶路程x(千米)来表示剩余油量Q(升)的代数式 在“绿满梅州”活动中,某镇要从外地运一批树苗,第一次运了520棵,第二次运了总数的12分之5,两次共运了总数的85%.两次共运树苗多少棵? 6、司机王叔叔在加油站加了30升油后,去距离加油站180千米的公司去办事,按每升汽油可行驶8千米计算,要想着回来还需要加多少升汽油? 小强和父母一起开车到距家150千米的景点旅游.出发前,汽车油箱内储油20升,当行驶120千米时,发现油箱剩余油量为10.4升.如果油箱中剩余油量少于3升时,汽车将自动报警.(1)如果汽车平均每一 转基因食品会不会造成基因污染潜在危险?国家对转基因食品态度如何? 汽车消耗1升汽油可行驶6.4千米.已经加了45升气油,去距离加油站15O千米的地方,往返一次,汽油够用吗?为什么? 小明和父母一起开车到距家200千米的景点旅游.出发前,汽车邮箱内储存油45升,当行驶150千米时,发现剩余油量为30升.(1)已知邮箱内储存剩余油量y是行驶路程x的一次函数,求y与x之间的函数关 转基因食品好吗 方舟子为什么要批评钱学森是伪科学家?两弹一星是方舟子造出来的? 有小强和父母一起开车到距家150千米的景点旅游.出发前,汽车油箱内储小强和父母一起开车到距家150千米的景点旅游.出发前,汽车油箱内储油20升,当行驶120千米时,发现油箱剩余油量为10.4升.如 元旦期间,某商场搞优惠活动,决定由顾客抽奖确定折扣,某顾客买甲、乙两种商品,分别抽到7折和9折,共付款386元,这两种商品原售价之和为500元,问这两种商品的原售价分别是多少元? 12.某超市为“开业三周年”举行了店庆活动.对 、 两种商品实行打折出售.打折前,购买5件 商品和1件 商品 小明到距家200千米的地方旅游,汽车油箱内储油45升,当行驶150千米发现剩油量是30 升,已知油箱内余油量y升是行驶路程x千米的一次函数,求函数关系式 一个长方形的周长未24dm,如果它的长和宽各增加3dm,得到的新长方形比原来的长方形的面积大多少平方分米? 超市为“开业三周年”举行了店庆活动.对AB两种商品实行打折出售.打折前,购买5件A商品和一件B商品需要84元;购买6件A商品和三件B商品需要108元.而店庆期间,购买50件A商品和50件B商品仅需960 我市环保局将一个长为2×10分米,宽为2×10分米,高2×10分米的长方体废水池中的满池废水注入正方体储水池中净化.那么请你考虑一下,能否恰好有一个正方体储水池将这些废水刚好装满?若有,求 要做一个底面周长是18dm、高3dm的长方体框架 至少需要多少dm长的铁丝拜托各位了 3Q 某超市为“开业三周年”举行了店庆活动,对A、B两种商品实行打折出售,打折前购买5件A商品和1件B商品需用84元;购买6件A商品和3件B商品需用108元,而店庆期间,购买50件A商品和50件B商品仅需960 什么是转基因食品, 圆的直径增加5dm,周长增加多少dm?圆的半径增加3dm,周长增加多少dm? 把一个长为2×10的3次方分米,宽为4×10的2次方分米,高为80分米的长方体废水池中的废水注入正方体储水池净化,已知正方体储水池的棱长为5×10的2次方分米,这些废水能否一次注入到储水池内净 某市环保局欲将一个长为2*10的4次方cm,宽为4*10的3次方cm高为8*10的2次方cm的长方形水池中的水,正好注满个正方形的水池,求正方体的棱长 转基因食品的利与弊不要转的、要少一点、字别太多就行、、、、、速度的来字也不要太少、、、、、、、、、、、、、 市环保局将一个长为2×10的6次方,宽为4×10的4 次方分米,高为8x10的2次方分米的长方体废水池注入一个正方体贮水池进行净化,请你通过计算考虑,能恰好有一个边长为整数的正方体贮水池,正好 青州市的环保局将一个长为2×10的三次方分米,宽为2×10的二次方分米,高为2×10分米的长方体水池的废水注入正方体水池净化,那么考虑一下,能否恰好百一个正方体水池将这些废水刚好装完?若 转基因食品的利与弊 说的越简单越好 OK 一辆汽车的油箱长50厘米,宽40厘米,高30厘米.如果每升汽油可以行驶10千米,当行驶400千米后,油箱里大约还剩下多少千克汽油?{已知每升汽油重0.82千克} 运一批树苗,第一天运了146棵,第二天运了154棵,两次运的数量比总数少1/4,这批树苗一共有多少棵?列方程 吃转基因食品的利与弊? 方舟子是谁 初二数学上册书上复习题B组第3题 某商场购进商品后,加价40%作为销售价,商场搞优惠促销,决定由顾客抽奖某商场购进商品后,加价40%作为销售价,商场搞优惠促销,决定由顾客抽奖确定折扣,某顾 关于转基因食品的利与弊的短篇英语作文 对的方舟子评价一下我个人挺喜欢方舟子的,他正义,实事求是.看见好多网友的评论有表扬的也有批评的,批评声中不乏文采超好的人.方舟子有错吗?只不过说了真话而已. 某商场购进商品后 加价40%后作为销售价.现商场搞优惠促销活动,决定出顾客抽奖确定折扣.一人买了一双鞋和一个包,分别抽到七折和九折,共付款109.2元,两商品原销售价之和140元,鞋和包进价各 转基因食品利与弊的作文 把60升的水倒入一个棱长为5dm的正方体水箱中,水深()dm 某汽车行驶时油箱中余油量Q千克与行驶时间t小时的关系如下:写出时间t表示余油量Q的代数式行驶时间t小时 余油量Q千克1 36-62 36-123 36-184 36-245 36-30 元旦期间,某商场搞优惠活动,决定由顾客抽奖确定折扣,某顾客买甲、乙两种商品,分别抽到7折和9折,共付款386元,这两种商品原售价之和为500元,问这两种商品的原售价分别是多少元? 请详细解 把100升的水倒入一个棱长为5dm的正方体容器里,水的高度是多少dm? 某汽车行驶时油箱中余油量Q千克与行驶时间t小时的关系如下:写出时间t表示余油量Q的代数式行驶时间t小时 余油量Q千克1 36-62 36-123 36-184 36-245 36-30提问:当T=二分之三时,余油量Q的值为多少千 运输队运一批货第一次运了比总数的百分之四十少十五吨第二次运了48吨后剩的比总数的八分之一多五顿这批货共几吨 一批货物共100吨,第一次运了总数的1/4,第二次运了总数的1/5,第一次比第二次多运多少吨?两次共运多少吨? 把48L(升)水倒入一个棱长为4dm(从里面量)的正方体容器中,水深多少dm? 一辆油箱装满油的汽车,在速度不变的情况下,汽车油箱中余油量Q(千克)与行驶时间t(小时)之间的关系为Q=kt+b,已知车速为40千米/时;当t=0 时,油箱中余油量为60千克;汽车行驶了8小时,油箱中余 一个长方形,它的长和高相等,如果把长去掉2.5厘米,就成为表面积是150平方厘米的正方体,原长方体的体积是多少? 今年“十一”黄金周,超市A和超市B都进行了让利销活动(2个超市东西价格都一样的)超市A是20购买为( )元的商品,A、B超市都合适?思路 数学一辆油箱装满油的汽车,在速度不变的情况下,汽车油箱中余油量Q(千克)与行驶时间t(小时)之间的关系为 Q=kt+b,已知车速为40千米/时;当t=0 时,油箱中余油量为60千克;汽车行驶了8小时,油箱 把一个长方体的长去掉4cm,成了一个正方体,表面积减少了64平方厘米,这个长方体原来的体积是多少? 把100生的水倒入一个棱长为5dm的正方体容器里,水的高度是多少dm? 转基因食品有什么影响?最近看到一篇博文,说金龙鱼是外商操纵的傀儡,产品原料都是转基因的,还牵扯到一个世界级的惊天阴谋——西方预谋用转基因食品让中国人种族灭绝.有那么严重吗?说
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn