65.9K
CodeProject 正在变化。 阅读更多。
Home

燃烧你窗口的边缘,赋予它们特色

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (11投票s)

2008年4月1日

CPOL

2分钟阅读

viewsIcon

40123

downloadIcon

409

不,这不是一个笔误

目录

介绍

你是否厌倦了闪亮、一尘不染的窗口?厌倦了所有那些充满未来感的玻璃?你是否更希望你的窗口拥有经典、老旧、略微烧焦边缘的老式历史文献外观?你知道,那种背面可能写着埋藏的宝藏地图的类型?嗯,答案就在这里!通过现代技术的奇迹,你可以从这个

甚至(哇),这个

到...(请敲鼓)这个

尼古拉斯·凯奇很快就会密谋偷走你的窗户。

现在你已经看到了通过烧毁普通的矩形窗口边缘可以完成的事情。从异形窗口区域开始,可以获得更惊人的结果。例如,这个完全无聊的窗口

打哈欠。但在仅仅几次应用专利*窗口燃烧编码技术后,你将到达这个奇妙的图像

WMP 9 如果不是因为它已停止服务,会很羡慕的。

*实际上没有专利

告诉我更多。拜托,老兄。说出来。它是如何完成的?

每隔几年,微软科学家就会重新发现并使用一种长期休眠的技术。在 Windows 95 中,它是所有者绘制的菜单。在 Windows 98 中,它是 FlashWindow()。在 Windows XP 中,它是窗口区域。这些进步甚至超过了我们学习新 SI 前缀的需求,因为我们的硬盘越来越大(给女士们留下深刻印象的热门提示:在tera-之后是peta-)。

现在,在 2008 年,我发现了...

旋转区域

ExtCreateRegion() API 可以使用 RGNDATA blob 调用一个区域。神奇之处在于 XFORM 参数。用适当培养的 XFORM 咒语成分来沾染你的代码,ExtCreateRegion() 也会旋转该区域。

例如,从原始区域 rgn 开始,我们可以创建一个旋转 30 度的副本,使用以下咒语

int degrees = 30;
float radians = degrees * 2.0f * 3.14159f / 360.0f;
XFORM xform = { cosf(radians), sinf(radians),
                -sinf(radians), cos(radians) };
RGNDATA* pData;
UINT cby;
CRgnHandle rgn = /* original region */;
CRgn newRgn;
 
  // Get the RGNDATA for the original region.
  cby = rgn.GetRegionData ( NULL, 0 );
  pData = (RGNDATA*) new BYTE[cby];
  rgn.GetRegionData ( pData, cby );
 
  // CreateFromData() calls ExtCreateRegion().
  newRgn.CreateFromData ( &xform, cby, pData );
  delete[] (BYTE*) pData;

XFORM 的成员在 Microsoft 开发人员网络之书 中概述。当使用 XFORM 执行旋转时(正如我们所做的那样),前四个成员设置如下

eM11:旋转角的余弦
eM12:旋转角的正弦
eM21:旋转角正弦的负数
eM22:旋转角的余弦

为了实现烧毁效果,只需重复多次将旋转应用于你的窗口区域,随意旋转多少次都行。让舍入误差完成剩下的工作!

结论

祝你一年中的第 92 天快乐!(或非闰年的第 91 天!)

© . All rights reserved.