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

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.特殊窗体的使用必须得当,用得好自然锦上添花,否则给人以哗众取宠之感。(北京 冯新强)
代码、TDD速查表 如何选择前端架构:服务器端HTML vs. JS部件 vs.单页Web应用 世界上最高深的Android特洛伊病毒 招聘iOS开发,老板必问的5个问题 护航科技吴伟湘:IT离线安全体检服务将带来颠覆 百度王继平:移动互联网时代云平台思路 “第八届开源中国开源世界高峰论坛”火热开启 微软发布SQL Server 2014预览版,展示内存数据库技术 帮助软件开发者提高效率的10个小窍门 我想做个程序员:Technovation Challenge圆女孩编程梦想 未来我们开发的Google Glass应用将会是什么样? 独家:前RIM大中华区总经理刘征宇,加入Appconomy 用一个API搞定一切 Segment.io为移动开发者提供便利的分析数据分发服务 TIOBE 6月编程语言排行榜:JavaScript回归前十 《Kingdom Rush Frontiers》上线后 迅速抢占27个国家游戏榜首 移动周报:85后程序员,iOS开源项目,细数7天大事件! Instagram:从Redis到Cassandra 成本节省1/4 乐元素CTO凌聪访谈:游戏引擎技术选型之王道 iOS 7的新设计并非止于外表 WWDC 2013大会10大启示:正向开发者支付大量现金 云计算大会微软专场成功举办 Windows Azure公众预览版上线 IBM全球大裁员 在美国裁员已经开始 动动鼠标,决定“中国十大优秀开源项目”的归属 为改善Flickr 雅虎收购拍照应用开发商GhostBird 让你轻松学习新代码库的六个步骤 RESTful API 设计最佳实践 谷歌11亿美元豪购Waze原因:获取数据 争本地广告市场 为什么大家都要疯狂吐槽iOS 7的扁平化设计? 伟大的程序员是天生的,不是造就的 比Hive高效7倍 Facebook推新一代查询引擎Presto 未来的存储系统设计——PMC技术交流会举行 基础知识疑问???????(每题一分,系列问题) 我想在一张图片上的某个部分做个连接请问怎么做? 如何在VB分布式开发中调用远程MTS/COM+上组件,怎么进行网络通讯? 在win98下查询dns服务器和win2000下有区别吗? 给我的NotePad做一个接口,直接和腾迅服务器相连,提供登录接口。然后说的话可以通过直接 关于ASP的日期计算问题,请大家来指导一下!!! 数组的使用? 音标如何输? .net中的窗体控制问题,在线等待,100分 插入记录的问题 快周末了,偷懒中。。。 VB分布式开发中调用远程MTS/COM+上组件,怎么进行网络通讯? 哪位大哥有空??请指教!!! 恢复MBR时可以拿任意的一张win98启动盘吗,即mbr是否跟系统有关? 图片处理 经典问题 传递设备场景的问题 请问大家如何通过一个类名来取出这个类的对象指针啊? 怎样在数据库中存储图像文件 .net,在应用程序中如何释放资源? 是否能控制交叉报表的列的排序规则 我想在一张网页上有不同的CSS风格请问怎么做? 嘿嘿,谁有domino/notes开发的命名规范? >>>>>>>EVC中ShellExecuteEx的使用问题,100分相送!<<<<<<<< 如何从数据库读出数据,然后导出为EXCEL格式? To buick555(王飞),请看看,关于EJB连接数据库的。 jdbc配置不对,SunOS5,weblogic7.0,Oracle816,报错如下:(片段) delphi中如何实现c中的'<<'和'>>'移位操作符?急..急..急..急..急.. <COM技术内幕>讲的是COM的基本原理及其实现,请问想了解COM的应用,需要看什么书啊? 怎样判断一个文件是否存在啊? 请教高手:如何做一个分帧显示的页面?(vb.net)在线等待,马上给分。 为什么用户控件是抽象类呢? 报表的保存到文件中及文件的使用问题 IIUG 的informix FAQ 如何利用日志文件记录每一步操作?请hjhing(winding)兄,leimin(黄山光明顶) 兄前来继续问题 请问有谁看过direct x8.1 里的示例程序 directsound capture,我们讨论一下好吗? 请教:我每次新建窗体都要设置窗体的Font属性,请问: 推荐几本学习linux的书,谢谢 用VC编程,手头最好有哪些书(包括电子的)? 如何删除单文档项目中没有ID的菜单项?例如分隔条,Pop_up的菜单? Delphi中如何控制WORD 如何在VB中实现多个WORD文档合并成一个WORD文档? U 令女人反胃吗? 哈哈~ 像素格式 请高手指点:请问谁写过带有Collection属性的控件?简单的如:DropDownlist的Items,复杂的如DataGrid的Items 一个存储过程错误处理的问题 初学JAVA,问题多多! fastreport中怎样改变条码打印中字体的大小? 各位兄弟! 关于在CB中,数据转换成Excel文件的第三方控件,谢谢 那里有《shell编程》和关于curses编程的教程可以下载,请帮忙? 好词5好句个,好句一条 Finally,he gets his hats back.中"back"是什么意思,如果不要它,这句话的意思有什么不同? 辑的的车换成戈读什么? She wantches morning TV after she gets up.(画线处提问)画线处为watches morning TV. The old man __his glasses "部"的右边部分改成"到"的右边部分,什么字啊 求:英文作文:My Home(Not My House) 形式:演讲稿 字数:180~250 he gets his hats 能字的右边改成长,是个字么? 好词好句好段个5种句子要有赏析,词语要写出自哪里 英语隐喻理论是什么 创怎么组词 关于科学家的演讲稿300字左右 名词所有格和belong to的用法转换 高中英语选择疑难(19)Many companies are eager to sign a contract with Amanda,who has the potential to ____ a super star.A、remain B、grow C、make D、turn请给出理由 求推荐几本哲学方面的书要求通俗易懂,对树立正确的三观有益的书 Sandy:What are you doing ,Sue?Sue:I'm writing in my diary.Sandy:Can I see it please?Sue:No,you can't!Sue:Where were we yesterday,Sandy?Sandy:We were at school.Sue:Where were we the day before yesterday?Sandy:We were at school.Sue:Go away,Sandy!Sandy: The girl next to me ______ you.Is she your daughter?A looks at B looks like C looks after D looks for 酉加黄读什么酉加黄怎么读,我要拼音. I don't what_(happen)over there.The girl wants_(be)a dancer when she_(groe)up. A group of young men hope that getting this kind of job will finally be the ticket to successA road B gate C street D direction这题是要选一个词替换划线部分,划线的是ticket,老师给的答案是B,但是选A不是更对吗? 成语:对牛弹琴的故事 the girl ---( joke) when she said there was no milk left.怎么填怎么写 My best friend near to me?还是next to me? 文中的对牛弹琴和现在常用的成语“对牛弹琴”的意思一样吗?它们两个不同的含义分别是什么?求求大家了,急用! 英语翻译浅析医疗侵权纠纷的举证责任倒置 摘要:根据《最高人民法院关于民事诉讼证据若干规定》第4条,医疗侵权诉讼实行“举证责任倒置”,为正确认识和对待这一规定,本文对医疗侵权 #[15] The young man ______ better pay many times,but he failed and finally had to give up the job.A.demandedB.bargainedC.requiredD.compared请帮忙翻译包括选项,并且分析. 类似“对牛弹琴”的成语有没有类似对牛弹琴的成语啊 英语翻译根据调查结果,08-11年婴儿得A病的机率分别为63.47%、64.00%、64.89%、64.44%,得B病的机率分别为2.96、2.99、3.23、3.09,得c病的机率分别为10.93%、12.76%、16.96%、20.63%.各年得A病机率无明显改善, My best friend sits next _____ me. A、in B、on C、to D、behind 对,牛弹琴和对牛弹琴分别是什么意思 豪夫童话中的好词好句(看了一遍,好词好句没记各位帮忙)好的最佳还有财富悬赏好的最佳还有财富悬赏看看好多少~ The young man had a job_____(interview)in a company just now. 对牛弹琴-()()()()对牛弹琴,成语接龙?只要四个成语哟,不要多了和歪货哟. 帮写一篇my favourite book的英语对话2个人的,2,3分钟左右,大一的水平, 英语翻译:当我听了一句较长的话后,不能完全复述出来 it is not easy for a Chinese person to speak English as_as a_English speaker."横线上填什么?空格线上填什么? 请详细介绍英语各种句型的成分? 线鼻子的英语单词 People use computers______much of their work.A.do B.to do C.doing D.to doing -Coud u please spare me some time?I've something to talk with u .-Not now,___ time ,please.A any otherB someC otherD some other 鼻子用英语单词怎么拼? 同义句转换:1.Being a green person is so easy.It is not _____ ______ ______ a green person.2.You're nice to help me so much .It's ____ ______ ______ to help me so much.3.Both Tom and Jack have been to Beijing twice._____ _____ Tom _____ _____ 第19题选什么, 派子偏旁改成月字是什么字 B Christmas,people are busy doing their shopping.We can hear Christmas m here and there,Manyfamilies have Christmas trees in their house.On that day,children are very happy because they can get lots of p from their p . 好词15个,好句5句, 鼻子有几种类型 英语单词 It is not easy to _____ in wartime.A:make living B:make a living C:live D:make a life 单选题 复述是不是翻译中文吗 月改一笔是什么字 it is so easy to be a greener 汉语“们”与英语S表复述有何不同】 “腾”去掉月旁改成女旁是什么字 英语翻译我的一生最美好的场景就是遇见你,静静的看着你,感觉陌生又熟悉,尽管呼吸着同一天空的气息,却无法拥抱到你,如果转换了时空,身份和姓名,但愿认得你眼睛. 英语翻译 The mountain is too high __this seventy year old man 英语翻译翻译以下内容:很高兴与贵司愉快地合作了那么多年,同时也感谢你们对XX一贯的支持和信任.我们即将推出自己独有的品牌-----XXX.XXX将会是汇聚欧洲高端家居类品牌于一体的综合性店 高中英语第17,19题 the old grandma is seventy对 seventy 提问
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘