豪迈24位首都功能定位都怎么用

机器控制/过程控制
优化/集成/管理
&&>&&&&>&&&&>&&正文
&&相关群组
&&相关话题
&&相关问答
&&相关产品
&&推荐企业
用户名: &&&&
&&&&密 码:&&&&
还不是 IIAnews 注册会员? 立即 节省更多时间!
&&直通车 : &&( 无须注册,轻松沟通 )
&&&&*单位名称:
&&&&*电子邮件:
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&&&&&
Slimfit:快速制冷的至臻典范
2015年10月
北京市朝阳区百子湾路32号院3号楼B座515室&&&&&&电话:010-1&&&传真:010-
广州办事处:广州市黄埔区中山大道东170号柏盈商厦首层103室&&&&&&电话: 020-
Copyright (C)
. All rights reserved.
|京公网安备93|京ICP备号IPO闯关在即 “豪迈”又将批量“造富”?
09:00:00&&& && 来源:大众网-经济导报
5家独立于山东豪迈的“豪迈系”公司股东及实际控制人都是山东豪迈的前三大自然人股东。而且极可能存在一套班子管理多家公司的现象,这为山东豪迈上市后埋下“内部人侵占上市公司利益”的隐患。
  如果山东豪迈能顺利上市,通过资本市场的财富放大效应,潍坊高密市的千万级富豪有望增加20位&&&&◆导报记者 石宪亮 济南报道  根据中国证监会发行监管部8日的公告,证监会发审委将于12日审核山东豪迈机械科技股份有限公司(以下简称“山东豪迈”)的上市申请。如果山东豪迈能顺利上市,通过资本市场的财富放大效应,潍坊高密市的千万级富豪有望增加20位。不仅如此,山东豪迈的上市还将使该市的首富易主,山东豪迈董事长张恭运将以近18亿元的身价成为高密首富,取代目前身价为10亿元的孚日股份(002083)董事长孙日贵。经济导报记者同时从高密市有关部门获悉,在推动山东豪迈上市的同时,该市把银鹰纤维、恒涛节能、亚盛机械、金亿机械、永辉化工、泰华食品等6家企业纳入上市后备资源库。高密新首富呼之欲出山东豪迈主要从事汽车子午线轮胎模具、轮胎制造设备的生产、销售及相关技术开发。目前是我国规模最大的专业轮胎模具制造企业。公司目前总股本为1.5亿股,股东由44名自然人及1名法人构成,持股超过10%的股东共有3位,分别是公司董事张恭运 (持股 5979.69 万股,占比39.86%),公司监事会主席柳胜军(持股万股,占比17.93%),公司董事、董事会秘书冯民堂(持股万股,占比17.93%),这3人也是公司的创业元老。&&&&山东豪迈预披露招股书显示,公司近3年来业绩优良,2007年、2008年、2009年基本每股收益分别为0.89元、0.91元、1.01元。按30倍市盈率计算,该公司的股价可达30元/股,照此计算,张恭运持股市值将高达18亿元左右,成为高密市新首富。公司持股超过33.36万股的自然人股东共计20人,上市后,这20人将成为高密市新的千万级甚至亿级富豪。其余24位自然人股东的身价也将在 300 万-1000万元之间。公司本次拟发行5000万股,计划募集资金7.18亿元,分别投向精密子午线轮胎模具项目、高档精密铸锻中心项目、巨型子午线轮胎硫化机项目、轮胎模具工程研究开发中心项目等4个项目。15年前80万元起家山东豪迈前身为1995年3月成立的山东高密豪迈机械有限公司,当时公司的全部资产仅有80万元。1995年1月,高密市呼家庄镇政府发文同意将原高密市汽车配件厂部分资产拍卖给张恭运、王桂喜、柳胜军等3人,其中固定资产60万元,流动资产20万元。张恭运、王桂喜、柳胜军分别出资32万元、24万元、24万元购买原高密市汽车配件厂部分机器设备及相关厂房等实物资产,并用做山东高密豪迈机械有限公司设立时的出资。出资购买资产时,王桂喜、柳胜军分别任原高密市汽车配件厂任车间主任、技术员。而张恭运时任高密市锻压机床厂副厂长。1998年,王桂喜退出公司,将其持有的24万元出资以原价转让给冯民堂。1999年,徐文和受让冯民堂、柳胜军部分股权成为第四大股东。山东豪迈拟招股书显示,2000年前,公司一直处于亏损状态,1995年成立时净资产80万元,1997年净资产为47.47万元,1999年净资产为42.19万元。2000年后,公司开始盈利,2000年6月,公司净资产回升至71.74万元(对应每股净资产为0.9元)。山东豪迈盈利后开始第一次增资扩股,并同步实施核心员工持股计划。2000年7月,公司注册资本由80万元增加至400万元,股东人数也由原来的4人增加至46人,新引入的42名股东全部是公司当时的管理、技术、购销及生产人员。最倒霉的投资人&&&&2001年12月,山东豪迈注册资本由400万元增至1680万元,在这次增资中,公司外部股东周建强投入注册资本700万元(入股价格为1元/股)。此时,公司已经进入良性发展阶段,每股净资产已由2000年6月的0.9元上升至1.11元。公司解释说,本次增资的主要原因是,2001年公司拟进入轮胎模具行业,将生产场所从高密市呼家庄镇驻地搬迁到高密市密水科技工业园,土地购买、厂房搬迁和扩建、设备购置、研发投入等需要大量资金投入,但公司规模小、融资困难,资金成为制约公司发展的瓶颈。周建强看好公司的发展前景和管理团队,愿意向公司投资700万元。此次增资后,周建强 成为公司第 一大股东 (持股41.667%),张恭运降为第二大股东(持股22.238%)。可惜的是,3年后(2004年11月),周建强又以原价将700万元股份全部转让给张恭运等人,错失了成为亿万级富豪的绝佳良机。至于周建强退出的原因 ,公司拟招股书中的解释是,自2001年底进入轮胎模具行 业以来,公司前期品牌知名度较低,营销难度大,发展速度、经营业绩低于预期,2004年下半年周建强决定将全部股权转让给公司主要高管人员张恭运、柳胜军、冯民堂、徐文和和技术人员徐华兵(徐文和之子),回收资金投入回报率更高的其他行业。至于周建强这位“倒霉”的投资人有何背景,张恭运等人700万元购股款从何而来,招股书并没有作出任何交代。最神秘的一次增资不知是巧合还是天意,在周建强退出后,山东豪迈的经营形势立马出现好转,公司表示“随着年公司轮胎模具业务逐渐打开销售局面,产品创新和市场开拓逐步走上良性循环”。2006年12月,山东豪迈将注册资本由1680万元增加至5200万元。经济导报研究员发现,这次增资颇为神秘,新增加的3520万元注册资本来源存在一些疑点。公司拟招股书显示,在此次增资中,张恭运、柳胜军等9位自然人股东用于增资的机器设备和土地使用权(共2375.5万元),来源于公司参股子公司原高密豪迈机械科技有限公司偿还其借款时的处置资产。原高密豪迈机械科技有限公司是山东豪迈及其主要股东控股的一家企业,成立于2004年9月,注册资本为500万元。从拟招股书来看,原高密豪迈机械科技有限公司基本上是山东豪迈的一家内部关联交易公司,很少对外经营。该公司2006年度与山东豪迈的关联交易额为960万元。原高密豪迈机械科技有限公司于2004年11月分别与张恭运、冯民堂、柳胜军、徐文和、徐华兵等9人签署《借款协议》,先后通过借款1080.80万元方式购买部分机器设备及零配件进行加工、组装模具加工机械。至于张恭运等人的数百万借款从何而来,拟招股书同样没有作出说明。导报研究员认为,公司很有可能在2004年就进入高速盈利阶段,张恭运等人的数百万借款很可能来自于公司隐形分红或向山东豪迈借款。拟招股书显示,山东豪迈2006年11月末公司每元注册资本对应的净资产为4.65元,是2004年6月底每股净资产1.18元的4倍。也就是说,从2004年6月底到2006年11月,两年半的时间内,山东豪迈创造的净利润至少达5000万元。拟招股书显示,除山东豪迈外,张恭运等人此时并无其他重大投资或收入来源,其巨额款项来源应该与山东豪迈有关。准备鲤鱼跳龙门2007年6月,山东豪迈以2006年的未分配利润转增股本4680万元,同时引入5位员工股本120万元,注册资本由5200万元增至1亿元。2008年4月,张恭运等11名股东向武城金光空调设备有限公司转让838.72万股,转让价格为4.43元/股。2008年5月,公司进行了股份制改造,由44名自然人股东和1名法人股东作为发起人,山东豪迈机械科技有限公司整体变更为股份有限公司。公司以日经审计后的净资产2.21亿元,按1∶0.678的折股比例折为山东豪迈1.5亿股,余额7135.03万元转入资本公积。2008年6月,山东豪迈公布《拟首次公开发行股票公司接受辅导公告》,辅导券商为齐鲁证券有限公司。多元化发展或成上市障碍为控制公司大股东或实际控制人通过内部管理侵占上市公司利益,中国证监会目前倾向于民营企业整体上市。张恭运近年来实施的多元化发展战略有可能成为山东豪迈成功上市的绊脚石。除控制山东豪迈外,张恭运还控制着山东豪迈机械制造有限公司、山东豪迈重型机械有限公司、高密市豪迈置业有限公司及豪迈科技股份有限公司、山东豪迈气门嘴有限公司等5家企业,这些企业均以“豪迈”冠名,连同山东豪迈,6家企业共同组成“豪迈集团”。山东豪迈机械制造有限公司成立于2007年12月,法定代表人为张恭运。目前注册资本为2500万元。主营业务是以进料加工、来料加工、购料加工为主的机械零部件加工,主要产品为轴承座、轴承圈、缸体等大型机械配件。公司的47名股东绝大部分与山东豪迈重合。山东豪迈重型机械有限公司成立于2009年4月,注册资本2000万元,实收资本500万元,法定代表人为张恭运 ,经营范围为重型机械设备及机械零部件的设计、制造、销售,主要业务为整机装配业务。股东为张恭运、柳胜军、徐文和等3人。高密市豪迈置业有限公司成立于日,注册资本1000万元,法定代表人为张光磊,经营范围为房地产开发、销售。该公司是山东豪迈机械制造有限公司全资子公司。豪迈科技股份有限公司成立于日,注册资本5000万元,实收资本2000万元,法定代表人为张恭运 ,经营范围为以自有资金对外投资、工业技术开发转让及咨询服务。股东为张恭运、柳胜军、冯民堂、单既强、宫耀宇等5人。山东豪迈气门嘴有限公司属于山东豪迈主要投资者施加重大影响的企业,该公司成立于2008年4 月2 日,注册资本和实收资本均为1000万元,法定代表人张恭运。经营范围主要为生产销售气门嘴、气门芯等。该公司的第一大股东为山东豪迈机械制造有限公司,持股350万元。可以看出,5家独立于山东豪迈的“豪迈系”公司股东及实际控制人都是山东豪迈的前三大自然人股东。而且极可能存在一套班子管理多家公司的现象,这为山东豪迈上市后埋下“内部人侵占上市公司利益”的隐患。
您对其他相关新闻感兴趣,请在这里搜索
自定义搜索
大众网版权与免责声明
1、大众网所有内容的版权均属于作者或页面内声明的版权人。未经大众网的书面许可,任何其他个人或组织均不得以任何形式将大众网的各项资源转载、复制、编辑或发布使用于其他任何场合;不得把其中任何形式的资讯散发给其他方,不可把这些信息在其他的服务器或文档中作镜像复制或保存;不得修改或再使用大众网的任何资源。若有意转载本站信息资料,必需取得大众网书面授权。
2、已经本网授权使用作品的,应在授权范围内使用,并注明&来源:大众网&。违反上述声明者,本网将追究其相关法律责任。
3、凡本网注明&来源:XXX(非大众网)&的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。本网转载其他媒体之稿件,意在为公众提供免费服务。如稿件版权单位或个人不想在本网发布,可与本网联系,本网视情况可立即将其撤除。
4、如因作品内容、版权和其它问题需要同本网联系的,请30日内进行。(24脚dip)24位串行模数转换器AD7714的功能及应用_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
(24脚dip)24位串行模数转换器AD7714的功能及应用
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
你可能喜欢我的 WinClock 项目系列之二 (功能细节,在Windows API 里面查找需要的功能)
编辑:www.fx114.net
本篇文章主要介绍了"我的 WinClock 项目系列之二 (功能细节,在Windows API 里面查找需要的功能) ",主要涉及到我的 WinClock 项目系列之二 (功能细节,在Windows API 里面查找需要的功能) 方面的内容,对于我的 WinClock 项目系列之二 (功能细节,在Windows API 里面查找需要的功能) 感兴趣的同学可以参考一下。
1. 不规则窗口的创建
&&& 方法一:
&&& 让图片的背景色与显示部分的颜色明显不同,将 FormBorderStyle 属性设置为 None。
&&& 将窗体的 BackgroundImage 属性设置为先前创建的位图文件。 设置窗体的 BackColor 图片
&&& 背景色,在窗体的构造函数里添加 this.TransparencyKey = this.BackC 一切OK。
&&&
&&& 缺点:1) 不能胜任24位色以上环境。实际上,即使16色的环境,效果也不理想,图片边缘的阴影
&&&&&&&&&&&& 显示为窗体背景。不可能对图片进行任意放大。
&&&&&&&&& 2) 图片边缘锯齿明显。
&&&&&&&&&
&&& 方法二:
&&& 采用无Alpha通道的位图图片,通过扫描图片的每一点,取出与边缘颜色不同的所以像素,合并到
&&& GraphicsPath中,然后使用这个 GraphicsPath 创建一个 Region并赋给窗体。代码如下:
&1&&&&public&static&class&WindowsRegionService&{
&2&&&&&&&&public&static&void&SetWindowRegion(Form&mainForm,&Bitmap&bmpBack)&{
&3&&&&&&&&&&&&Color&TransparentColor&=&bmpBack.GetPixel(<span style="color: #,&<span style="color: #);
&4&&&&&&&&&&&&SetWindowRegion(mainForm,&bmpBack,&TransparentColor);
&5&&&&&&&&}
&6
&7&&&&&&&&private&static&void&SetWindowRegion(Form&mainForm,&Bitmap&bitmap,&Color&transparentColor)&{
&8&&&&&&&&&&&&mainForm.FormBorderStyle&=&FormBorderStyle.N
&9&&&&&&&&&&&&mainForm.BackgroundImageLayout&=&ImageLayout.N
<span style="color: #&&&&&&&&&&&&mainForm.SetBounds(mainForm.Location.X,&mainForm.Location.Y,&bitmap.Width,&bitmap.Height);
<span style="color: #&&&&&&&&&&&&mainForm.BackgroundImage&=&
<span style="color: #
<span style="color: #&&&&&&&&&&&&int&width&=&bitmap.W
<span style="color: #&&&&&&&&&&&&int&height&=&bitmap.H
<span style="color: #&&&&&&&&&&&&GraphicsPath&gp&=&new&GraphicsPath();
<span style="color: #&&&&&&&&&&&&for&(int&y&=&<span style="color: #;&y&&&&++y)&{
<span style="color: #&&&&&&&&&&&&&&&&for&(int&x&=&<span style="color: #;&x&&&&++x)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&if&(bitmap.GetPixel(x,&y)&!=&transparentColor)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&int&x0&=&x;
<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&while&(++x&&&width&&&&bitmap.GetPixel(x,&y)&!=&transparentColor)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&Rectangle&rect&=&new&Rectangle(x0,&y,&x&-&x0,&<span style="color: #);
<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&gp.AddRectangle(rect);
<span style="color: #&&&&&&&&&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&mainForm.Region&=&new&Region(gp);
<span style="color: #&&&&&&&&}
<span style="color: #&&&&}
&&& 这种方法除了可以解决方法一中的不胜任24色以上环境的问题外,与方法一的缺点是一样的。想使用带有阴影
&&& 的图片也是不可能的。
&&&
&&& 方法三(最优解):
&&& 这种方法是这个软件最后采用的方法。主要利用 Win32 API 函数 UpdateLayeredWindow 来完成。听起来很简单的
&&& 样子,实际上要做的工作是不少的。首先要设置 Window 的ExStyle支持 WS_EX_LAYERED,这可以通过 GetWindowLog
&&& 和 SetWindowLong API实现,也可以重载 Form 的 CreateParams 属性。如下:
&&& protected override CreateParams CreateParams {
&&&&&&& get {
&&&&&&&&&&& CreateParams createParams = base.CreateP
&&&&&&&&&&& createParams.ExStyle |= PInvokeService.WS_EX_LAYERED;
&&&&&&&&&&& return createP
&&&&&&& }
&&& }
&&&
&&& 其中 PInvokeService.WS_EX_LAYERED 的值是 0x80000
&&& UpdateLayeredWindow API 也比较复杂,在 C#里调用也不方便,所以还是写在一个 class 里面吧,另外还要绘制
&&& 时钟的指针和其他一些东西,这个是不能在 直接重载 Form 的 OnPaint或者处理 Paint事件了,如果你这样做,你
&&& 会发现是没有效果的。所以干脆把相关的东西先列出来吧,这里面可能有一些东西跟这个主题无关,但是也不删除了:
&&1&&&&//&PInvokeService.cs
&&2&&&&public&static&class&PInvokeService&{
&&3&&&&&&&&public&static&readonly&int&SE_PRIVILEGE_ENABLED&=&<span style="color: #x;
&&4&&&&&&&&public&static&readonly&int&TOKEN_QUERY&=&<span style="color: #x;
&&5&&&&&&&&public&static&readonly&int&TOKEN_ADJUST_PRIVILEGES&=&<span style="color: #x;
&&6&&&&&&&&public&static&readonly&string&SE_SHUTDOWN_NAME&=&"SeShutdownPrivilege";
&&7&&&&&&&&public&static&readonly&int&EWX_LOGOFF&=&<span style="color: #x;
&&8&&&&&&&&public&static&readonly&int&EWX_SHUTDOWN&=&<span style="color: #x;
&&9&&&&&&&&public&static&readonly&int&EWX_REBOOT&=&<span style="color: #x;
&10&&&&&&&&public&static&readonly&int&EWX_FORCE&=&<span style="color: #x;
&11&&&&&&&&public&static&readonly&int&EWX_POWEROFF&=&<span style="color: #x;
&12&&&&&&&&public&static&readonly&int&EWX_FORCEIFHUNG&=&<span style="color: #x;
&13&&&&&&&&public&static&readonly&int&ULW_ALPHA&=&<span style="color: #x02;
&14&&&&&&&&public&static&readonly&byte&AC_SRC_OVER&=&<span style="color: #x00;
&15&&&&&&&&public&static&readonly&byte&AC_SRC_ALPHA&=&<span style="color: #x01;
&16&&&&&&&&public&static&readonly&int&WS_EX_LAYERED&=&<span style="color: #x80000;
&17
&18&&&&&&&&public&static&bool&ShouldExitWindows&=&false;
&19
&20&&&&&&&&[StructLayout(LayoutKind.Sequential)]
&21&&&&&&&&public&struct&POINT&{
&22&&&&&&&&&&&&public&Int32&x;
&23&&&&&&&&&&&&public&Int32&y;
&24
&25&&&&&&&&&&&&public&POINT(Int32&x,&Int32&y)&{
&26&&&&&&&&&&&&&&&&this.x&=&x;
&27&&&&&&&&&&&&&&&&this.y&=&y;
&28&&&&&&&&&&&&}
&29&&&&&&&&}
&30
&31&&&&&&&&[StructLayout(LayoutKind.Sequential)]
&32&&&&&&&&public&struct&SIZE&{
&33&&&&&&&&&&&&public&Int32&
&34&&&&&&&&&&&&public&Int32&
&35
&36&&&&&&&&&&&&public&SIZE(Int32&cx,&Int32&cy)&{
&37&&&&&&&&&&&&&&&&this.cx&=&
&38&&&&&&&&&&&&&&&&this.cy&=&
&39&&&&&&&&&&&&}
&40&&&&&&&&}
&41
&42&&&&&&&&[StructLayout(LayoutKind.Sequential,&Pack&=&<span style="color: #)]
&43&&&&&&&&public&struct&_BLENDFUNCTION&{
&44&&&&&&&&&&&&public&byte&BlendOp;
&45&&&&&&&&&&&&public&byte&BlendF
&46&&&&&&&&&&&&public&byte&SourceConstantA
&47&&&&&&&&&&&&public&byte&AlphaF
&48&&&&&&&&}
&49
&50&&&&&&&&[StructLayout(LayoutKind.Sequential,&Pack&=&<span style="color: #)]
&51&&&&&&&&public&struct&TokPriv1Luid&{
&52&&&&&&&&&&&&public&int&C
&53&&&&&&&&&&&&public&long&L
&54&&&&&&&&&&&&public&int&A
&55&&&&&&&&}
&56
&57&&&&&&&&[StructLayout(LayoutKind.Sequential)]
&58&&&&&&&&public&struct&MEMORY_INFO&{
&59&&&&&&&&&&&&public&uint&dwL
&60&&&&&&&&&&&&public&uint&dwMemoryL
&61&&&&&&&&&&&&public&uint&dwTotalP
&62&&&&&&&&&&&&public&uint&dwAvailP
&63&&&&&&&&&&&&public&uint&dwTotalPageF
&64&&&&&&&&&&&&public&uint&dwAvailPageF
&65&&&&&&&&&&&&public&uint&dwTotalV
&66&&&&&&&&&&&&public&uint&dwAvailV
&67&&&&&&&&}
&68
&69&&&&&&&&[DllImport("user32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
&70&&&&&&&&public&static&extern&bool&UpdateLayeredWindow(IntPtr&hwnd,&IntPtr&hdcDst,&ref&POINT&pptDst,&ref&SIZE&psize,
&71&&&&&&&&&&&&IntPtr&hdcSrc,&ref&POINT&pprSrc,&Int32&crKey,&ref&_BLENDFUNCTION&pblend,&Int32&dwFlags);
&72
&73&&&&&&&&[DllImport("gdi32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
&74&&&&&&&&public&static&extern&IntPtr&CreateCompatibleDC(IntPtr&hDC);
&75
&76&&&&&&&&[DllImport("user32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
&77&&&&&&&&public&static&extern&IntPtr&GetDC(IntPtr&hWnd);
&78
&79&&&&&&&&[DllImport("user32.dll",&ExactSpelling&=&true)]
&80&&&&&&&&public&static&extern&int&ReleaseDC(IntPtr&hWnd,&IntPtr&hDC);
&81
&82&&&&&&&&[DllImport("gdi32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
&83&&&&&&&&public&static&extern&bool&DeleteDC(IntPtr&hdc);
&84
&85&&&&&&&&[DllImport("gdi32.dll",&ExactSpelling&=&true)]
&86&&&&&&&&public&static&extern&IntPtr&SelectObject(IntPtr&hDC,&IntPtr&hObject);
&87
&88&&&&&&&&[DllImport("gdi32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
&89&&&&&&&&public&static&extern&bool&DeleteObject(IntPtr&hObject);
&90
&91&&&&&&&&[DllImport("user32.dll",&ExactSpelling&=&true,&SetLastError&=&false)]
&92&&&&&&&&private&static&extern&IntPtr&SendMessage(IntPtr&hWnd,&int&Msg,&IntPtr&wParam,&IntPtr&lParam);
&93
&94&&&&&&&&[DllImport("user32.dll",&ExactSpelling&=&true,&SetLastError&=&false)]
&95&&&&&&&&public&static&extern&IntPtr&SetForegroundWindow(IntPtr&hWnd);
&96
&97&&&&&&&&[DllImport("user32.dll",&CharSet&=&CharSet.Auto)]
&98&&&&&&&&public&static&extern&uint&GetWindowLong(IntPtr&hwnd,&int&nIndex);
&99
<span style="color: #0&&&&&&&&[DllImport("user32.dll",&CharSet&=&CharSet.Auto)]
<span style="color: #1&&&&&&&&public&static&extern&uint&SetWindowLong(IntPtr&hwnd,&int&nIndex,&uint&dwNewLong);
<span style="color: #2
<span style="color: #3&&&&&&&&[DllImport("kernel32.dll",&ExactSpelling&=&true)]
<span style="color: #4&&&&&&&&public&static&extern&void&GlobalMemoryStatus(ref&MEMORY_INFO&meminfo);
<span style="color: #5
<span style="color: #6&&&&&&&&[DllImport("kernel32.dll",&ExactSpelling&=&true)]
<span style="color: #7&&&&&&&&public&static&extern&IntPtr&GetCurrentProcess();
<span style="color: #8
<span style="color: #9&&&&&&&&[DllImport("advapi32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
<span style="color: #0&&&&&&&&public&static&extern&bool&OpenProcessToken(IntPtr&h,&int&acc,&ref&IntPtr&phtok);
<span style="color: #1
<span style="color: #2&&&&&&&&[DllImport("advapi32.dll",&SetLastError&=&true)]
<span style="color: #3&&&&&&&&public&static&extern&bool&LookupPrivilegeValue(string&host,&string&name,&ref&long&pluid);
<span style="color: #4
<span style="color: #5&&&&&&&&[DllImport("advapi32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
<span style="color: #6&&&&&&&&public&static&extern&bool&AdjustTokenPrivileges(IntPtr&htok,&bool&disall,
<span style="color: #7&&&&&&&&&&&&ref&TokPriv1Luid&newst,&int&len,&IntPtr&prev,&IntPtr&relen);
<span style="color: #8
<span style="color: #9&&&&&&&&[DllImport("user32.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
<span style="color: #0&&&&&&&&public&static&extern&bool&ExitWindowsEx(int&flg,&int&rea);
<span style="color: #1
<span style="color: #2&&&&&&&&[DllImport("CPPCode.Shutdown.dll",&ExactSpelling&=&true,&SetLastError&=&true)]
<span style="color: #3&&&&&&&&public&static&extern&void&ShowShutdownDialog();
<span style="color: #4
<span style="color: #5&&&&&&&&public&static&void&DoExitWin(int&flg)&{
<span style="color: #6&&&&&&&&&&&&bool&
<span style="color: #7&&&&&&&&&&&&TokPriv1Luid&
<span style="color: #8&&&&&&&&&&&&IntPtr&hproc&=&GetCurrentProcess();
<span style="color: #9&&&&&&&&&&&&IntPtr&htok&=&IntPtr.Z
<span style="color: #0&&&&&&&&&&&&ok&=&OpenProcessToken(hproc,&TOKEN_ADJUST_PRIVILEGES&|&TOKEN_QUERY,&ref&htok);
<span style="color: #1&&&&&&&&&&&&tp.Count&=&<span style="color: #;
<span style="color: #2&&&&&&&&&&&&tp.Luid&=&<span style="color: #;
<span style="color: #3&&&&&&&&&&&&tp.Attr&=&SE_PRIVILEGE_ENABLED;
<span style="color: #4&&&&&&&&&&&&ok&=&LookupPrivilegeValue(null,&SE_SHUTDOWN_NAME,&ref&tp.Luid);
<span style="color: #5&&&&&&&&&&&&ok&=&AdjustTokenPrivileges(htok,&false,&ref&tp,&<span style="color: #,&IntPtr.Zero,&IntPtr.Zero);
<span style="color: #6&&&&&&&&&&&&ok&=&ExitWindowsEx(flg,&<span style="color: #);
<span style="color: #7&&&&&&&&}
<span style="color: #8&&&&}
&&& 下面的 WindowShapeMaker 类负责窗体形状的创建,实际中,RefreshWindow每隔一秒钟就会调用
&&& 一次,以刷新时间。图片是具有 Alpha 通过的 32bpp bitmap, 一般为 PNG 格式。在刷新前,首先
&&& 处理这个图片,将传入的图片做一个拷贝,这样一方便是可以根据程序设置缩放图片,一方面是保证
&&& 源图片不会被更改。从这个图片创建一个 Graphics 对象,然后在上面画出指针以及其他必要的内容,
&&& 最后调用 UpdateLayeredWindow 更新窗体。这里面用到很多 GDI 的操作,如下:
&&1&&&&//&WindowShapeMaker.cs
&&2&&&&public&class&WindowShapeMaker&:&IDisposable&{
&&3&&&&&&&&private&Form&mainF
&&4&&&&&&&&private&ClockOption&clockO
&&5&&&&&&&&private&ClockHand&clockH
&&6
&&7&&&&&&&&public&WindowShapeMaker(Form&mainForm,&ClockOption&clockOpt)&{
&&8&&&&&&&&&&&&this.mainForm&=&mainF
&&9&&&&&&&&&&&&this.clockOpt&=&clockO
&10&&&&&&&&&&&&this.clockHand&=&new&ClockHand(mainForm.ClientSize);
&11&&&&&&&&&&&&this.mainForm.SizeChanged&+=&MainFormOnSizeC
&12&&&&&&&&}
&13
&14&&&&&&&&~WindowShapeMaker()&{
&15&&&&&&&&&&&&Dispose(false);
&16&&&&&&&&}
&17
&18&&&&&&&&public&void&RefreshWindow(Bitmap&bitmap)&{
&19&&&&&&&&&&&&IntPtr&screenDc&=&PInvokeService.GetDC(IntPtr.Zero);
&20&&&&&&&&&&&&IntPtr&memDc&=&PInvokeService.CreateCompatibleDC(screenDc);
&21&&&&&&&&&&&&IntPtr&hBitmap&=&IntPtr.Z
&22&&&&&&&&&&&&IntPtr&hOldBitmap&=&IntPtr.Z
&23
&24&&&&&&&&&&&&try&{
&25&&&&&&&&&&&&&&&&int&bitmapWidth&=&(int)(bitmap.Width&*&clockOpt.SizeFactor);
&26&&&&&&&&&&&&&&&&int&bitmapHeight&=&(int)(bitmap.Height&*&clockOpt.SizeFactor);
&27&&&&&&&&&&&&&&
&28&&&&&&&&&&&&&&&&bitmap&=&new&Bitmap(bitmap,&new&Size(bitmapWidth,&bitmapHeight));
&29&&&&&&&&&&&&&&&&mainForm.ClientSize&=&bitmap.S
&30&&&&&&&&&&&&&&&&using&(Graphics&g&=&Graphics.FromImage(bitmap))&{
&31&&&&&&&&&&&&&&&&&&&&Draw(g);
&32&&&&&&&&&&&&&&&&}
&33
&34&&&&&&&&&&&&&&&&hBitmap&=&bitmap.GetHbitmap(Color.FromArgb(<span style="color: #));
&35&&&&&&&&&&&&&&&&hOldBitmap&=&PInvokeService.SelectObject(memDc,&hBitmap);
&36
&37&&&&&&&&&&&&&&&&PInvokeService.SIZE&newSize&=&new&PInvokeService.SIZE(bitmap.Width,&bitmap.Height);
&38&&&&&&&&&&&&&&&&PInvokeService.POINT&sourceLocation&=&new&PInvokeService.POINT(<span style="color: #,&<span style="color: #);
&39&&&&&&&&&&&&&&&&PInvokeService.POINT&newLocation&=&new&PInvokeService.POINT(mainForm.Location.X,&mainForm.Location.Y);
&40&&&&&&&&&&&&&&&&PInvokeService._BLENDFUNCTION&blend&=&new&PInvokeService._BLENDFUNCTION();
&41&&&&&&&&&&&&&&&&blend.BlendOp&=&PInvokeService.AC_SRC_OVER;&&&&&&&&//&Only&works&with&a&32bpp&bitmap
&42&&&&&&&&&&&&&&&&blend.BlendFlags&=&<span style="color: #;
&43&&&&&&&&&&&&&&&&blend.SourceConstantAlpha&=&clockOpt.PreviewO
&44&&&&&&&&&&&&&&&&blend.AlphaFormat&=&PInvokeService.AC_SRC_ALPHA;
&45
&46&&&&&&&&&&&&&&&&PInvokeService.UpdateLayeredWindow(mainForm.Handle,&screenDc,&ref&newLocation,&ref&newSize,
&47&&&&&&&&&&&&&&&&&&&&memDc,&ref&sourceLocation,&<span style="color: #,&ref&blend,&PInvokeService.ULW_ALPHA);
&48&&&&&&&&&&&&}&finally&{
&49&&&&&&&&&&&&&&&&PInvokeService.ReleaseDC(IntPtr.Zero,&screenDc);
&50&&&&&&&&&&&&&&&&if&(hBitmap&!=&IntPtr.Zero)&{
&51&&&&&&&&&&&&&&&&&&&&PInvokeService.SelectObject(memDc,&hOldBitmap);
&52&&&&&&&&&&&&&&&&&&&&PInvokeService.DeleteObject(hBitmap);
&53&&&&&&&&&&&&&&&&}
&54&&&&&&&&&&&&&&&&PInvokeService.DeleteDC(memDc);
&55&&&&&&&&&&&&&&&&bitmap.Dispose();
&56&&&&&&&&&&&&}
&57&&&&&&&&}
&58
&59&&&&&&&&protected&virtual&void&Dispose(bool&disposing)&{
&60&&&&&&&&&&&&if&(disposing)&{
&61&&&&&&&&&&&&&&&&this.mainForm.SizeChanged&-=&MainFormOnSizeC
&62&&&&&&&&&&&&}
&63&&&&&&&&}
&64
&65&&&&&&&&private&void&Draw(Graphics&g)&{
&66&&&&&&&&&&&&StringFormat&format&=&new&StringFormat();
&67&&&&&&&&&&&&format.Alignment&=&StringAlignment.C
&68&&&&&&&&&&&&format.LineAlignment&=&StringAlignment.C
&69&&&&&&&&&&&&int&width&=&mainForm.ClientSize.W
&70&&&&&&&&&&&&int&height&=&mainForm.ClientSize.Height&/&<span style="color: #;
&71
&72&&&&&&&&&&&&if&(clockOpt.ShowDate)&{
&73&&&&&&&&&&&&&&&&Rectangle&rect&=&new&Rectangle(<span style="color: #,&height&*&<span style="color: #,&width,&height);
&74&&&&&&&&&&&&&&&&g.DrawString(DateTime.Now.ToString("yyyy-MM-dd"),&mainForm.Font,&Brushes.Black,&rect,&format);
&75&&&&&&&&&&&&}
&76
&77&&&&&&&&&&&&if&(clockOpt.ShowAmPm)&{
&78&&&&&&&&&&&&&&&&float&fltX&=&clockHand.CentrePointF.X&-&<span style="color: #;
&79&&&&&&&&&&&&&&&&float&fltY&=&clockHand.CentrePointF.Y&+&<span style="color: #;
&80&&&&&&&&&&&&&&&&string&strAMPM&=&string.E
&81&&&&&&&&&&&&&&&&if&(DateTime.Now.Hour&&&<span style="color: #)&{
&82&&&&&&&&&&&&&&&&&&&&strAMPM&=&"PM";
&83&&&&&&&&&&&&&&&&}&else&{
&84&&&&&&&&&&&&&&&&&&&&strAMPM&=&"AM";
&85&&&&&&&&&&&&&&&&}
&86
&87&&&&&&&&&&&&&&&&Rectangle&rect&=&new&Rectangle(<span style="color: #,&height&*&<span style="color: #,&width,&height);
&88&&&&&&&&&&&&&&&&g.DrawString(strAMPM,&mainForm.Font,&Brushes.Black,&rect,&format);
&89&&&&&&&&&&&&}
&90
&91&&&&&&&&&&&&clockHand[<span style="color: #]&=&(int)(ClockHand.SECONDLENTH&*&clockOpt.SizeFactor);
&92&&&&&&&&&&&&clockHand[<span style="color: #]&=&(int)(ClockHand.MIMUTELENTH&*&clockOpt.SizeFactor);
&93&&&&&&&&&&&&clockHand[<span style="color: #]&=&(int)(ClockHand.HOURLENTH&*&clockOpt.SizeFactor);
&94&&&&&&&&&&&&clockHand.DrawClockHand(g);
&95&&&&&&&&}
&96
&97&&&&&&&&private&void&MainFormOnSizeChanged(object&sender,&EventArgs&args)&{
&98&&&&&&&&&&&&this.clockHand.CentrePointF&=&new&PointF(mainForm.ClientSize.Width&/&2f,&mainForm.ClientSize.Height&/&2f);
&99&&&&&&&&}
<span style="color: #0
<span style="color: #1&&&&&&&&IDisposable&Members#region&IDisposable&Members
<span style="color: #2
<span style="color: #3&&&&&&&&public&void&Dispose()&{
<span style="color: #4&&&&&&&&&&&&Dispose(true);
<span style="color: #5&&&&&&&&}
<span style="color: #6
<span style="color: #7&&&&&&&&#endregion
<span style="color: #8&&&&}
&&& 上面用到的 ClockHand 类专门负责绘制时钟的指针,我们假定所有的背景图片都是对称图形,也就是中心一定在图片中心。
&&& 指针一般要启用反锯齿,因为除了水平或者垂直的线段外,不启用反锯齿的话效果是相当差的。如下:
&1&&&&public&class&ClockHand&{
&2&&&&&&&&private&float[]&handL
&3&&&&&&&&private&PointF&centrePointF;
&4
&5&&&&&&&&public&static&readonly&float&SECONDLENTH&=&48f;
&6&&&&&&&&public&static&readonly&float&MIMUTELENTH&=&40f;
&7&&&&&&&&public&static&readonly&float&HOURLENTH&=&30f;
&8&&&&&&&&public&static&readonly&int&Size&=&<span style="color: #8;
&9
<span style="color: #&&&&&&&&public&ClockHand(Size&clientSize)&{
<span style="color: #&&&&&&&&&&&&double&factor&=&(double)clientSize.Width&/&S
<span style="color: #&&&&&&&&&&&&handLength&=&new&float[]&{&
<span style="color: #&&&&&&&&&&&&&&&&(int)(SECONDLENTH&*&factor),&
<span style="color: #&&&&&&&&&&&&&&&&(int)(MIMUTELENTH&*&factor),
<span style="color: #&&&&&&&&&&&&&&&&(int)(HOURLENTH&*&factor)&
<span style="color: #&&&&&&&&&&&&};
<span style="color: #&&&&&&&&&&&&centrePointF&=&new&PointF(clientSize.Width&/&2f,&clientSize.Height&/&2f);
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&public&void&DrawClockHand(Graphics&graphics)&{
<span style="color: #&&&&&&&&&&&&float&handA
<span style="color: #&&&&&&&&&&&&using&(Pen&pen&=&new&Pen(Color.Red,&<span style="color: #.1f))&{
<span style="color: #&&&&&&&&&&&&&&&&pen.EndCap&=&LineCap.R
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&SmoothingMode&savedMode&=&graphics.SmoothingM
<span style="color: #&&&&&&&&&&&&&&&&graphics.SmoothingMode&=&SmoothingMode.AntiA&&&&&&&&&&&&//&Antialias
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&//&Draw&second&hand
<span style="color: #&&&&&&&&&&&&&&&&handAngle&=&(float)(DateTime.Now.Second&*&Math.PI&/&30f);&&&&//&Angle
<span style="color: #&&&&&&&&&&&&&&&&PointF&endPointF&=&new&PointF(CentrePointF.X&+&(float)(handLength[<span style="color: #]&*&Math.Sin(handAngle)),
<span style="color: #&&&&&&&&&&&&&&&&&&&&CentrePointF.Y&-&(float)(handLength[<span style="color: #]&*&Math.Cos(handAngle)));
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&graphics.DrawLine(pen,&CentrePointF,&endPointF);
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&//&Draw&minute&hand
<span style="color: #&&&&&&&&&&&&&&&&handAngle&=&(float)(DateTime.Now.Minute&*&Math.PI&/&30f);
<span style="color: #&&&&&&&&&&&&&&&&endPointF&=&new&PointF(CentrePointF.X&+&(float)(handLength[<span style="color: #]&*&Math.Sin(handAngle)),
<span style="color: #&&&&&&&&&&&&&&&&&&&&CentrePointF.Y&-&(float)(handLength[<span style="color: #]&*&Math.Cos(handAngle)));
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&pen.Color&=&Color.B
<span style="color: #&&&&&&&&&&&&&&&&pen.Width&=&<span style="color: #.2f;
<span style="color: #&&&&&&&&&&&&&&&&graphics.DrawLine(pen,&CentrePointF,&endPointF);
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&//&Draw&hour&hand
<span style="color: #&&&&&&&&&&&&&&&&handAngle&=&(float)((DateTime.Now.Hour&+&DateTime.Now.Minute&/&60f)&*&Math.PI&/&6f);
<span style="color: #&&&&&&&&&&&&&&&&endPointF&=&new&PointF(CentrePointF.X&+&(float)(handLength[<span style="color: #]&*&Math.Sin(handAngle)),
<span style="color: #&&&&&&&&&&&&&&&&&&&&CentrePointF.Y&-&(float)(handLength[<span style="color: #]&*&Math.Cos(handAngle)));
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&pen.Width&=&2f;
<span style="color: #&&&&&&&&&&&&&&&&graphics.DrawLine(pen,&CentrePointF,&endPointF);
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&graphics.SmoothingMode&=&savedM
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&public&float&this[int&index]&{
<span style="color: #&&&&&&&&&&&&get&{
<span style="color: #&&&&&&&&&&&&&&&&if&(index&&=&<span style="color: #&&&&index&&=&<span style="color: #)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&return&handLength[index];
<span style="color: #&&&&&&&&&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&return&-<span style="color: #;
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&set&{
<span style="color: #&&&&&&&&&&&&&&&&if&(index&&=&<span style="color: #&&&&index&&=&<span style="color: #)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&handLength[index]&=&
<span style="color: #&&&&&&&&&&&&&&&&}&else&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&throw&new&IndexOutOfRangeException();
<span style="color: #&&&&&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&public&PointF&CentrePointF&{
<span style="color: #&&&&&&&&&&&&get&{
<span style="color: #&&&&&&&&&&&&&&&&return&centrePointF;
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&set&{
<span style="color: #&&&&&&&&&&&&&&&&centrePointF&=&
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&}
<span style="color: #&&&&}
&&& 上面的 ClockOption 类保存的是应用程序的设置,如下:
&&1&&&&[Serializable()]
&&2&&&&public&class&ClockOption&:&IMementoCapable&{
&&3&&&&&&&&[NonSerialized()]
&&4&&&&&&&&public&static&readonly&string&AppP
&&5
&&6&&&&&&&&private&bool&canMove&=&true;
&&7&&&&&&&&private&bool&showAmPm&=&false;
&&8&&&&&&&&private&bool&showDate&=&false;
&&9&&&&&&&&private&bool&penetrate&=&false;
&10&&&&&&&&private&bool&haveRemind&=&false;
&11&&&&&&&&private&bool&checkBounds&=&true;
&12&&&&&&&&private&string&filename&=&"default.bmp";
&13&&&&&&&&private&byte&mouseEnterOpacity&=&<span style="color: #5;
&14&&&&&&&&private&byte&opacity&=&<span style="color: #5;
&15&&&&&&&&private&double&sizeFactor&=&<span style="color: #.0;
&16&&&&&&&&private&Point&location&=&new&Point(<span style="color: #0,&<span style="color: #0);
&17&&&&&&&&private&byte&previewOpacity&=&<span style="color: #5;
&18&&&&&&&&private&string&language&=&"en-US";
&19
&20&&&&&&&&static&ClockOption()&{
&21&&&&&&&&&&&&AppPath&=&Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
&22&&&&&&&&}
&23
&24&&&&&&&&public&bool&CanMove&{
&25&&&&&&&&&&&&get&{
&26&&&&&&&&&&&&&&&&return&this.canM
&27&&&&&&&&&&&&}
&28&&&&&&&&&&&&set&{
&29&&&&&&&&&&&&&&&&this.canMove&=&
&30&&&&&&&&&&&&}
&31&&&&&&&&}
&32
&33&&&&&&&&public&bool&ShowAmPm&{
&34&&&&&&&&&&&&get&{
&35&&&&&&&&&&&&&&&&return&this.showAmPm;
&36&&&&&&&&&&&&}
&37&&&&&&&&&&&&set&{
&38&&&&&&&&&&&&&&&&this.showAmPm&=&
&39&&&&&&&&&&&&}
&40
&41&&&&&&&&}
&42
&43&&&&&&&&public&bool&ShowDate&{
&44&&&&&&&&&&&&get&{
&45&&&&&&&&&&&&&&&&return&this.showD
&46&&&&&&&&&&&&}
&47&&&&&&&&&&&&set&{
&48&&&&&&&&&&&&&&&&this.showDate&=&
&49&&&&&&&&&&&&}
&50&&&&&&&&}
&51
&52&&&&&&&&public&bool&Penetrate&{
&53&&&&&&&&&&&&get&{
&54&&&&&&&&&&&&&&&&return&this.
&55&&&&&&&&&&&&}
&56&&&&&&&&&&&&set&{
&57&&&&&&&&&&&&&&&&this.penetrate&=&
&58&&&&&&&&&&&&}
&59&&&&&&&&}
&60
&61&&&&&&&&public&bool&HaveRemind&{
&62&&&&&&&&&&&&get&{
&63&&&&&&&&&&&&&&&&return&this.haveR
&64&&&&&&&&&&&&}
&65&&&&&&&&&&&&set&{
&66&&&&&&&&&&&&&&&&this.haveRemind&=&
&67&&&&&&&&&&&&}
&68&&&&&&&&}
&69
&70&&&&&&&&public&bool&CheckBounds&{
&71&&&&&&&&&&&&get&{
&72&&&&&&&&&&&&&&&&return&this.checkB
&73&&&&&&&&&&&&}
&74&&&&&&&&&&&&set&{
&75&&&&&&&&&&&&&&&&this.checkBounds&=&
&76&&&&&&&&&&&&}
&77&&&&&&&&}
&78
&79&&&&&&&&public&string&Filename&{
&80&&&&&&&&&&&&get&{
&81&&&&&&&&&&&&&&&&return&this.
&82&&&&&&&&&&&&}
&83&&&&&&&&&&&&set&{
&84&&&&&&&&&&&&&&&&this.filename&=&
&85&&&&&&&&&&&&}
&86&&&&&&&&}
&87
&88&&&&&&&&public&byte&MouseEnterOpacity&{
&89&&&&&&&&&&&&get&{
&90&&&&&&&&&&&&&&&&return&this.mouseEnterO
&91&&&&&&&&&&&&}
&92&&&&&&&&&&&&set&{
&93&&&&&&&&&&&&&&&&this.mouseEnterOpacity&=&
&94&&&&&&&&&&&&}
&95&&&&&&&&}
&96
&97&&&&&&&&public&byte&Opacity&{
&98&&&&&&&&&&&&get&{
&99&&&&&&&&&&&&&&&&return&this.
<span style="color: #0&&&&&&&&&&&&}
<span style="color: #1&&&&&&&&&&&&set&{
<span style="color: #2&&&&&&&&&&&&&&&&this.opacity&=&
<span style="color: #3&&&&&&&&&&&&}
<span style="color: #4&&&&&&&&}
<span style="color: #5
<span style="color: #6&&&&&&&&public&double&SizeFactor&{
<span style="color: #7&&&&&&&&&&&&get&{
<span style="color: #8&&&&&&&&&&&&&&&&return&this.sizeF
<span style="color: #9&&&&&&&&&&&&}
<span style="color: #0&&&&&&&&&&&&set&{
<span style="color: #1&&&&&&&&&&&&&&&&this.sizeFactor&=&
<span style="color: #2&&&&&&&&&&&&}
<span style="color: #3&&&&&&&&}
<span style="color: #4
<span style="color: #5&&&&&&&&//&This&two&properties&are&not&saved
<span style="color: #6&&&&&&&&public&Point&Location&{
<span style="color: #7&&&&&&&&&&&&get&{
<span style="color: #8&&&&&&&&&&&&&&&&return&this.
<span style="color: #9&&&&&&&&&&&&}
<span style="color: #0&&&&&&&&&&&&set&{
<span style="color: #1&&&&&&&&&&&&&&&&this.location&=&
<span style="color: #2&&&&&&&&&&&&}
<span style="color: #3&&&&&&&&}
<span style="color: #4
<span style="color: #5&&&&&&&&public&byte&PreviewOpacity&{
<span style="color: #6&&&&&&&&&&&&get&{
<span style="color: #7&&&&&&&&&&&&&&&&return&this.previewO
<span style="color: #8&&&&&&&&&&&&}
<span style="color: #9&&&&&&&&&&&&set&{
<span style="color: #0&&&&&&&&&&&&&&&&this.previewOpacity&=&
<span style="color: #1&&&&&&&&&&&&}
<span style="color: #2&&&&&&&&}
<span style="color: #3
<span style="color: #4&&&&&&&&public&string&Language&{
<span style="color: #5&&&&&&&&&&&&get&{
<span style="color: #6&&&&&&&&&&&&&&&&return&this.
<span style="color: #7&&&&&&&&&&&&}
<span style="color: #8&&&&&&&&&&&&set&{
<span style="color: #9&&&&&&&&&&&&&&&&this.language&=&
<span style="color: #0&&&&&&&&&&&&}
<span style="color: #1&&&&&&&&}
<span style="color: #2
<span style="color: #3&&&&&&&&public&ClockOption()&{
<span style="color: #4&&&&&&&&}
<span style="color: #5
<span style="color: #6&&&&&&&&IMementoCapable&Members#region&IMementoCapable&Members
<span style="color: #7
<span style="color: #8&&&&&&&&public&Properties&CreateMemento()&{
<span style="color: #9&&&&&&&&&&&&Properties&properties&=&new&Properties();
<span style="color: #0&&&&&&&&&&&&properties.Set("CanMove",&this.canMove);
<span style="color: #1&&&&&&&&&&&&properties.Set("Filename",&this.filename);
<span style="color: #2&&&&&&&&&&&&properties.Set("HaveRemind",&this.haveRemind);
<span style="color: #3&&&&&&&&&&&&properties.Set("CheckBounds",&this.checkBounds);
<span style="color: #4&&&&&&&&&&&&properties.Set("MouseEnterOpacity",&this.mouseEnterOpacity);
<span style="color: #5&&&&&&&&&&&&properties.Set("Opacity",&this.opacity);
<span style="color: #6&&&&&&&&&&&&properties.Set("Penetrate",&this.penetrate);
<span style="color: #7&&&&&&&&&&&&properties.Set("ShowAmPm",&this.showAmPm);
<span style="color: #8&&&&&&&&&&&&properties.Set("ShowDate",&this.showDate);
<span style="color: #9&&&&&&&&&&&&properties.Set("SizeFactor",&this.sizeFactor);
<span style="color: #0&&&&&&&&&&&&properties.Set("Language",&this.language);
<span style="color: #1
<span style="color: #2&&&&&&&&&&&&return&
<span style="color: #3&&&&&&&&}
<span style="color: #4
<span style="color: #5&&&&&&&&public&void&SetMemento(Properties&properties)&{
<span style="color: #6&&&&&&&&&&&&if&(properties&!=&null)&{
<span style="color: #7&&&&&&&&&&&&&&&&this.canMove&=&properties.Get("CanMove",&true);
<span style="color: #8&&&&&&&&&&&&&&&&this.filename&=&properties.Get("Filename",&"default.bmp");
<span style="color: #9&&&&&&&&&&&&&&&&this.haveRemind&=&properties.Get("HaveRemind",&false);
<span style="color: #0&&&&&&&&&&&&&&&&this.checkBounds&=&properties.Get("CheckBounds",&true);
<span style="color: #1&&&&&&&&&&&&&&&&this.mouseEnterOpacity&=&properties.Get("MouseEnterOpacity",&(byte)<span style="color: #5);
<span style="color: #2&&&&&&&&&&&&&&&&this.opacity&=&properties.Get("Opacity",&(byte)<span style="color: #5);
<span style="color: #3&&&&&&&&&&&&&&&&this.penetrate&=&properties.Get("Penetrate",&false);
<span style="color: #4&&&&&&&&&&&&&&&&this.showAmPm&=&properties.Get("ShowAmPm",&false);
<span style="color: #5&&&&&&&&&&&&&&&&this.showDate&=&properties.Get("ShowDate",&false);
<span style="color: #6&&&&&&&&&&&&&&&&this.sizeFactor&=&properties.Get("SizeFactor",&<span style="color: #.0);
<span style="color: #7&&&&&&&&&&&&&&&&this.language&=&properties.Get("Language",&"en-US");
<span style="color: #8&&&&&&&&&&&&}
<span style="color: #9&&&&&&&&}
<span style="color: #0
<span style="color: #1&&&&&&&&#endregion
<span style="color: #2&&&&}
&&& IMementoCapable 接口是很明显是一个备忘录,有 CreateMemento() 和 SetMemento(Properties properties)
&&& 两个方法,这次先不讲这个内容。Properties 类也有些复杂,它和IMementoCapable合起来是持久化存储的基础,
&&& 实现比.Net序列化更为灵活的持久化存储方式。熟悉SharpDevelop的朋友可能比较清楚,这也不是本次要讨论
&&& 的内容。
2. 总在最前
&&& 这个比较简单,直接设置 Form 的 TopMost 属性即可。
3.使用鼠标移动钟面。
&& 方法一:消息方式:
&1&&&public&class&MainForm&:&Form&{
&2&&&&&&&&private&static&readonly&int&WM_SYSCOMMAND&&=&<span style="color: #x112;
&3&&&&&&&&private&static&readonly&int&SC_MOVE&&&&&&&&=&<span style="color: #xF010;
&4&&&&&&&&private&static&readonly&int&HTCAPTION&&&&&&=&<span style="color: #x2;
&5
&6&&&&&&&&protected&override&void&OnMouseDown(MouseEventArgs&args)&{
&7&&&&&&&&&&&&this.Capture&=&false;
&8&&&&&&&&&&&&MoveTheWindow();
&9&&&&&&&&&&&&
<span style="color: #&&&&&&&&&&&&base.OnMouseDown(args);
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&private&void&MoveTheWindow()&{
<span style="color: #&&&&&&&&&&&&Message&m&=&new&Message();
<span style="color: #&&&&&&&&&&&&m.HWnd&=&this.H
<span style="color: #&&&&&&&&&&&&m.Msg&=&WM_SYSCOMMAND;
<span style="color: #&&&&&&&&&&&&m.WParam&=&new&IntPtr(SC_MOVE&|&HTCAPTION);
<span style="color: #&&&&&&&&&&&&this.WndProc(ref&m);
<span style="color: #&&&&&&&&}
<span style="color: #&&&&&&&&
<span style="color: #&&&&&&&&//&Other&code
<span style="color: #&&&&}
&& 缺点是不易控制窗体移动的范围,因此不能提供钟面只在屏幕范围内活动的选项。没有采用这种方法。
&&
&& 方法二:重载 OnMouseDown 和 OnMouseMove(这是最后采用的方法):
&1&&&&&&&public&class&MainForm&:&Form,&IMementoCapable&{
&2&&&&&&&&private&ClockOption&clockO
&3&&&&&&&&private&Point&mouseP
&4&&&&&&&&//&Other&fileds
&5&&&&&&&&
&6&&&&&&&&public&MainForm(ClockOption&clockOpt)&{
&7&&&&&&&&&&&&this.clockOpt&=&clockO
&8&&&&&&&&&&&&this.mousePosition&=&Point.E
&9&&&&&&&&&&&&//&Other&code
<span style="color: #&&&&&&&&}
<span style="color: #&&&&&&&&
<span style="color: #&&&&&&&&//&Other&code
<span style="color: #
<span style="color: #&&&&&&&&internal&void&CheckBounds(ref&Point&location)&{
<span style="color: #&&&&&&&&&&&&if&(clockOpt.CheckBounds)&{
<span style="color: #&&&&&&&&&&&&&&&&Rectangle&rectScreen&=&Screen.GetWorkingArea(this);
<span style="color: #&&&&&&&&&&&&&&&&if&(location.X&&&rectScreen.Left)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&location.X&=&rectScreen.L
<span style="color: #&&&&&&&&&&&&&&&&}&else&if&(location.X&+&this.ClientSize.Width&&&rectScreen.Right)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&location.X&=&rectScreen.Right&-&this.ClientSize.W
<span style="color: #&&&&&&&&&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&if&(location.Y&&&rectScreen.Top)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&location.Y&=&rectScreen.T
<span style="color: #&&&&&&&&&&&&&&&&}&else&if&(location.Y&+&this.ClientSize.Height&&&rectScreen.Bottom)&{
<span style="color: #&&&&&&&&&&&&&&&&&&&&location.Y&=&rectScreen.Bottom&-&this.ClientSize.H
<span style="color: #&&&&&&&&&&&&&&&&}
<span style="color: #&&&&&&&&&&&&}
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&protected&override&void&OnMouseMove(MouseEventArgs&e)&{
<span style="color: #&&&&&&&&&&&&if&(e.Button&==&MouseButtons.Left)&{
<span style="color: #&&&&&&&&&&&&&&&&//&The&clock&is&fixed&up&on&the&desktop
<span style="color: #&&&&&&&&&&&&&&&&if&(!clockOpt.CanMove)
<span style="color: #&&&&&&&&&&&&&&&&&&&&return;
<span style="color: #
<span style="color: #&&&&&&&&&&&&&&&&int&left&=&this.Location.X&+&e.Location.X&-&this.mousePosition.X;
<span style="color: #&&&&&&&&&&&&&&&&int&top&=&this.Location.Y&+&e.Location.Y&-&this.mousePosition.Y;
<span style="color: #&&&&&&&&&&&&&&&&Point&location&=&new&Point(left,&top);
<span style="color: #&&&&&&&&&&&&&&&&CheckBounds(ref&location);
<span style="color: #&&&&&&&&&&&&&&&&this.SetBounds(location.X,&location.Y,&this.ClientSize.Width,&this.ClientSize.Height);
<span style="color: #&&&&&&&&&&&&&&&&clockOpt.Location&=&this.L
<span style="color: #&&&&&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&&&&&base.OnMouseMove(e);
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&protected&override&void&OnMouseDown(MouseEventArgs&e)&{
<span style="color: #&&&&&&&&&&&&if&(e.Button&==&MouseButtons.Left)&{
<span style="color: #&&&&&&&&&&&&&&&&this.mousePosition&=&e.L
<span style="color: #&&&&&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&&&&&base.OnMouseDown(e);
<span style="color: #&&&&&&&&}
<span style="color: #&&&&&&&&
<span style="color: #&&&&&&&&//&Other&code
<span style="color: #&&&&}
&&& clockOpt.CheckBounds 表示是否要检查屏幕边界,即是否只允许在屏幕范围内移动钟面。
4.鼠标穿透
&1&&&&//&PenetrateService.cs
&2&&&&public&static&class&PenetrateService&{
&3&&&&&&&&private&static&readonly&uint&WS_EX_LAYERED&=&<span style="color: #x80000;
&4&&&&&&&&private&static&readonly&uint&WS_EX_TRANSPARENT&=&<span style="color: #x20;
&5&&&&&&&&private&static&readonly&int&GWL_EXSTYLE&=&-<span style="color: #;
&6&&&&&&&&//private&static&readonly&int&LWA_ALPHA&=&0x2;
&7
&8&&&&&&&&[DllImport("user32",&EntryPoint&=&"SetLayeredWindowAttributes")]
&9&&&&&&&&private&static&extern&int&SetLayeredWindowAttributes(
<span style="color: #&&&&&&&&&&&&IntPtr&hwnd,
<span style="color: #&&&&&&&&&&&&int&crKey,
<span style="color: #&&&&&&&&&&&&int&bAlpha,
<span style="color: #&&&&&&&&&&&&int&dwFlags
<span style="color: #&&&&&&&&&&&&);
<span style="color: #
<span style="color: #&&&&&&&&public&static&void&MousePenetrate(Form&mainForm,&byte&alpha)&{
<span style="color: #&&&&&&&&&&&&uint&intExTemp&=&PInvokeService.GetWindowLong(mainForm.Handle,&GWL_EXSTYLE);
<span style="color: #&&&&&&&&&&&&PInvokeService.SetWindowLong(mainForm.Handle,&GWL_EXSTYLE,&intExTemp&|&WS_EX_TRANSPARENT&|&WS_EX_LAYERED);
<span style="color: #&&&&&&&&&&&&//SetLayeredWindowAttributes(mainForm.Handle,&0,&alpha,&LWA_ALPHA);
<span style="color: #&&&&&&&&}
<span style="color: #
<span style="color: #&&&&&&&&public&static&void&MouseNotPenetrate(Form&mainForm,&byte&alpha)&{
<span style="color: #&&&&&&&&&&&&PInvokeService.SetWindowLong(mainForm.Handle,&GWL_EXSTYLE,&WS_EX_LAYERED);
<span style="color: #&&&&&&&&&&&&//SetLayeredWindowAttributes(mainForm.Handle,&0,&alpha,&LWA_ALPHA);
<span style="color: #&&&&&&&&}
<span style="color: #&&&&}
&&& 注释掉的几行代码是有原因的,在设置了窗体的 WS_EX_LAYERED Style 以后,不能再要这两句,否则这个 Style 失去作用。
&&& 如果没有采用这种方式,则需要加上这两句代码。
5. 窗体透明度
&&&
&&& 你可能最快想到的是直接设置 Form的 Opacity 属性,但是在这里他失效了,不但不起作用,还会使WS_EX_LAYERED失效。
&&& 其实在 UpdateLayeredWindow 的调用中,就有透明度的选项的。那句
&&& blend.SourceConstantAlpha = clockOpt.PreviewO
&&& 正是这个作用。由于要支持鼠标经过时的透明度和 正常的透明度,所以ClockOption 里面还有 PreviewOpacity 这个属性。
&&&
最后补充一点,今天对源代码做了一些修改,今天添加了多国语言支持, 添加了中文资源,修正了农历算法问题. 添加了对允许
拖动到屏幕以外的选项. Fix了一些小的Bug. 如果你感兴趣,可以。
&&& 好了,至此这次写的也差不多了,好累, 不知道有没有漏写什么东西,唉, 时间也不早了,休息吧^_^。
参考资料:
本文标题:
本页链接:

我要回帖

更多关于 首都功能定位是什么 的文章

 

随机推荐