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

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.特殊窗体的使用必须得当,用得好自然锦上添花,否则给人以哗众取宠之感。(北京 冯新强)
用Visual Basic编写托盘程序 用Visual Basic窗体背景花纹的实现 用Visual Basic设计窗体背景花纹 用Visual Basic设计更好的用户界面 用Visual Basic设计三维图形按钮 用VisualBasic制作半透明窗体 运行时改变控件大小的两种方法-VB资料 运行中隐藏/显示窗口标题栏-VB资料 在ListBox适当设定水平滚动条的宽度-VB资料 在VB中利用API实现窗体的平滑显示 在vb中让控件大小和位置随着表单的大小成比例变化的方法 在VB中实现闪动标题栏 在VB中实现位图的透明放置 在VB中使用数据窗体设计器插件 在VB中制作单独程序封面的两种方法 在VB中制作透明按钮 在Visual Basic中如何拖动窗体或控件 在Visual Basic中显示动态运行进度 在菜单中加入图标 -VB资料 在程序中调用关闭Windows对话框-VB资料 在任务栏中显示无边框窗体的图标-VB资料 在系统菜单上添加自定义菜单项 -VB资料 在运行时动态生成多个相同的控件?-VB资料 在最小化状态时提供提示 -VB资料 暂时禁止窗口更新-VB资料 VB怎样得到文本框(TextBox)中的文本行数? 制造出透明的Form -VB资料 VB制作半透明窗体和形状不规则的窗体 VB制作方向按钮 VB制作渐变的窗口背景色 字体闪烁 -VB资料 为何输入汉字时会出现乱码?急急急!!! c++builder中 StrPCopy()头文件是什么? 怎麼調用jar文件中的類和函數 asp.net中还像asp一样可以用javascript吗? 这样的.xml 中如何在xsl中查询出<d:Title>值为"收文登记"的纪录??? 请问导航图如何实现?(玩过红警的更容易解答) 如果女友考上研究生,而我的学历低怎么办? 大虾帮忙,ListCtrl的列名为什么不能显示中文? 多谢各位,为什么http://IPaddress/exchange能看到内容,但是http://IPaddress/exadmin看不到内容 数据窗口怎么获得列的个数和怎么判断列的类型为DropDownDW类型! 求助 outlook&&ie6(放分) 我写了1个ip变域名的软件,发现现在都用防火墙,根本的不到域名,能不能用dns服务器或者其他方法写代码获得? 难道真的要去请电脑技术人员来帮忙了吗?急!急!急!!! 为什么有两个连接查询变量就不行呢代码如下: Rose进行JavaOOM的超级菜问题No.1:如何设置一个类MyButton成为JButton类的子类 如何在显示汉字 有关staroffice的问题 谁能告诉我完整的正式版本Dream_controls_collection for D6的下载地址呢? 百分求解有关ODBC的问题 那位知道最好的局域网聊天软件是什么? 数据库的问题 请问PB远程备份,恢复SQL SERVER2000应该怎样实现。(备份到本地硬盘)高分赠送 VCKBASE改版了,已经重新开张了!感激我的快给分!多少不限,呵呵... 那里有FrontPage server extension下载? 我什么我的程序从数据库取不出数据 C++Builder 中有没有关于SNMP 的控件啊? if not myrecord.bof then中的BOF是什么意思啊 Sybase数据库设备存放的地方? 高分救助:300分 一個通用的聯結sql server不能運行,help me 请大虾帮忙!这个SQL语句怎么写?多谢! 求教如何将enter转换为tab? win98下如何使用命令行方式共享文件夹 请问一个关于Iterator的问题. 我想把Access数据库里的内容只保留 1 天,超过 1 天的数据自动被删掉,请问该怎样设置。 拷贝构造函数实现多态性?!!你知道吗?........... 有多少人喜欢CCTV的张越和王小丫? 请问DES的最短代码的长度是多少?急急急,多多送分! 一个关于FlexGrid与MSChart的问题 请问有没有办法把一个报表导到一个Excel中? 数据管道对象....my_pipe.dataobject="p_pipe"(已经建好的数据管道对象)为什么提示 空对象?? 好象无法调用一个动态嵌入式框架中的函数 zhq2000(俗子) 谢谢你帮忙!我还有些不明白的地方想请教一下! cmos 如何下载JDK1.3版? 在DBGrid怎样移动一行数据?高分赠送 这个问题很奇怪!关于弹出菜单。 为什么 Rs->GetFieldValue 取两个字段的时候出错,只能一次去一个字段么? 用C#如何实现在form上画一条曲线,然后用鼠标托动曲线上的某一个点,该曲线的弧度根据鼠标的移动而变化 如何选择一行数据,条件是该数据的date类型的列为空(oracle)? 高一化学要掌握的元素周期表规律就是必修2第一章的周期表 将某无色混合气体依次进行如下实验.1.通过氢氧化钠固体后,气体体积变小 .2.通过灼热的氧化铜粉末,粉末变红色,3.通过白色硫酸铜粉末,粉末变为蓝色,4.通过澄清石灰水,溶液变浑浊.是判断原 There are about ____ students in our schoolA five hundred Bfive hundreds Cfive hundreds of 【高一化学】溶解性在元素周期表中的规律》》如题,物质(包括化合物)的溶解性在元素周期表的趋势是怎样的?溶解性:AgF Talk about your family英文对话 There are about two( )students in our school. talk about our school in【】 【pair】用适当的词填空 英语作文《talk about your family》一篇以Talk about your family为话题英语小作文,20秒左右 There are about five __ student in our schoolA hundred B hundredsC hundred ofD hundreds of 在元素周期表里,如何判断元素对应的酸酸性强弱,气态氢化物的稳定性等等 为什么NaHSO3.NaH2PO4的水解小于电离为什么HSO3-==H+ + SO3- 比 HSO3- + H2O==H2SO3+OH- 反应得多对不起,我问的就是原因希望能简单明了,本人知识有限 There are about____students in our school(2100用英文表示) 求元素周期表各种规律,如氢化物稳定性,原子,离子半径. 为什么NaHSO3 NaH2PO4以电离为主 而NaHCO3 NaHS Na2HPO4易水解为主? There are about six __students in our school.A.thousand B.thousands of c.thousands D.thousand of 元素周期表从左到右气态氢化物的稳定性怎么变化 为什么NaHSO3显酸性.它不是强碱弱酸盐吗.老师说是因为电离大于水解,怎么看出来电离大于水解的? 氢氧根的化合价是多少? 怎么求圆柱体的容积? 为什么过氧化氢分子不带电,氢氧根离子带电? 氢氧根的化合价是什么? She likes summer best 的同义句是什么 圆柱体体积我这有一穴子玉米,圆柱体的,半径是103厘米,高90厘米,求体积是多少千斤, NaHSO3,Na2HPO4电离方程式和水解方程式NaHSO4 还有Ca(HCO3)2 一句型转换 ⒈She likes math best.(改为同义句) Her_________ __________is __________⒉I like hist一句型转换⒈She likes math best.(改为同义句)Her_________ __________is __________⒉I like history because it's interesting. 圆柱体体积咋算? 和氢氧根离子组成完全相同但不带电的微粒是什么? 苹果是酸性还是碱性的? Our country 英语作文 什么样溶液同时存在电离和水解?如何比较显酸性和碱性帮忙举个例子 苹果是属于酸性还是碱性 求圆柱体的体积!柱子高23.53米,直径1.8米,求体积! There are 30girls in our class._are from the country she likes bread best?同义句替换 请教几个英语题,答案我有,主要要的是解析.谢谢(>﹏ There are only 100pandas in our country.的中文意思___ 高一化学元素周期表按照金属活动顺序,Sn的还原性>Pb而按照元素周期表的话,Sn、Pb都在痛IV(A)族,那忧郁Pb电子层数更多,所以该是Pb更容易失去电子.所以Pb还原性>Sn.这是矛盾的.为什么!?而且,其 请求出这个圆柱体体积! There are many (beach)in our city. 关于元素周期表(高一化学)人类已知的化合物种类最多的是( )A 第一主族元素的化合物B 第三主族元素的化合物C 第四主族元素的化合物D 第七主族元素的化合物 我们全家正在为龙舟节做我们自己特殊的粽子.英文翻译 句式:Our family`````` There(be)great change in our country since 1979 关于元素周期表的第三周期元素R,它的原子核外最外层实现8电子稳定结构所需的电子数小于次外层和最内层电子数之差,且等于最内层电子数的整数倍.下列说法正确的是:A.R元素最高价氧化 适当形式填空 Today ( )(near) every family in our country has a TV set 用化学用语来表示:铜绿中氢氧根离子的化合价显-1价 NO2与NO的物理性质与化学性质 碳与它非相邻的短周期元素以极性键形成的化合物中,各原子最外层都达到了8电子稳定结构.满足这种关系的元素有几种呢? 亚硫酸根离子水解显什么性? 氮气,一氧化氮,二氧化氮的物理性质化学性质 硝酸铵撞击分解成一氧化二氮和另一种氧化物,化学方程式怎么写 硫酸根和亚硫酸根的区别 She likes science best 同义句转化 短周期元素化合物和黑色粉末生成无色气体,可能有哪些情况 怎样区别硫酸根和亚硫酸根? 化学的元素周期表的族与周期中的元素氢化物性质有哪些? 有两种白色钾盐(正盐)粉末A、B.加入稀盐酸后分别生成无色气体D和E;D和E通入氢氧化钡溶液都能使其变浑浊D、E通入品红溶液只有D使其褪色;D还能使溴水褪色生成两种酸的混合溶液.A、B 亚硫酸根与硫酸根1.亚硫酸根的一些性质2.与硫酸根的关系(如何转化?哪些性质不同等)3.如何检验 苹果是酸性还是碱性? 某同学在化学实验室发现了一包由两中盐(不含氢元素)组成的白色粉末,和一瓶标签破损的无色溶液(一种酸),为了确定各自的成分,设计了以下实验:取白色粉末21.8克加入盛有129.4克的无色溶液 亚硫酸根和硫酸根有什么不同?有助于回答者给出准确的答案
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘