RGN 生成器






4.85/5 (14投票s)
2000年1月22日

199187

6167
创建非矩形对话框
此程序的目的是允许您创建非矩形对话框。程序本身就是一个例子,说明如果过度使用可能会发生什么。
创建透明区域
- 为对话框创建一个蒙版图像。一种颜色将是对话框的透明部分。透明 GIF 是一种很好的方法,但支持许多图像格式。
- 运行
RGNerator
。 - 输入蒙版的文件名。(一旦输入了有效的图像文件名,它就会自动加载)。如果您不记得名称或存放位置,请浏览查找。
- 输入代表对话框透明部分的颜色。如果您不知道确切的 RGB 颜色,请按“拾取”按钮。
拾取透明颜色
- 将光标移到透明颜色上。右侧有两个颜色框。上面的框是当前的透明颜色,下面的框是光标所在像素的颜色。当上面的颜色框包含透明颜色时,右键单击鼠标。
- 如果难以选择像素,可以放大图像。
- 如果图像太大而无法在可视区域显示,请使用滚动条,或者只需按住鼠标左键并拖动图像到所需位置。
- 选择好颜色后,按“确定”。
- 按“创建”按钮。此过程所需的时间取决于透明区域的复杂程度。
- 完成后,系统会要求您输入要存储 rgn 数据的文件的名称。
如何使用透明区域
我包含了一个演示项目供您查看。请先查看它,它会向您展示这有多么简单。
在您自己的应用程序中使用它
- 将 rgn 文件作为“RGN”资源插入。
- 插入要用作背景的位图。
- 插入一个对话框。
- 将对话框的边框属性设置为“无”。
- 将一个图片对象插入到对话框中。
- 将其类型设置为“
Bitmap
”。 - 将背景位图设置为图像。
- (这有点令人头疼,因为它必须是制表符顺序中的第一个。否则,在显示对话框时它会覆盖您的其他对话框控件。不幸的是,在编辑对话框时它会反过来工作!所以,在完成对话框的编辑后,只需将其设置为第一个即可。)
- 从模板创建对话框。
- 将对话框基于
CRGNDlg
类。 - 从演示项目中获取 rgndlg.cpp 和 .h 文件。
- 在对话框源代码中
在构造函数中,只需添加 RGN 资源 ID。
例如:CRGNDlg(CRgnDemoDlg::IDD,pParent,"BACKGROUND")
注释
SetWindowRgn
必须在调用基类InitDialog
函数之前完成。- 您不能使用
SetWindowRgn
中使用的 rgn - 它属于窗口 - 甚至不要删除它。 - 如果轮廓拖动缓慢,请使用全反转。它没有那么好看,但对于复杂的区域更快。它在 rgndlg.cpp 的
Inverttracker
函数中。 - 图像的边缘应为深灰色。非常黑或非常白的边缘在背景颜色相反时会显示出来,而灰色边缘无论背景颜色如何看起来都可以。
“小字体”和“大字体”
问题
例如,您的桌面显示配置中选择了“小字体”。您愉快地创建了对话框,放入了 bmp,并插入了所有必需的控件,小心地将它们与背景 bmp 对齐。然后您得意洋洋地发送了您的应用程序,却收到人们的抱怨说东西没有对齐。
原因
这些人选择了“大字体”。Windows 会根据字体缩放对话框及其控件。字体的大小又取决于“小/大”字体设置 - 因此 MS Sans Serif 8 的“大小”不同。由于图像和 rgn 是基于像素的,因此存在问题。
解决方案
有两种可能的解决方案。
1. 缩放
这就是我在演示应用程序中实现的功能。缩放的缺点是它不精确。例如,从在“小字体”下设计的应用程序缩放到“大字体”下可能会有些块状。
(请查看演示应用程序中 rgndlg.cpp 的 InitDialog
函数)。
2. 使用两个独立的图像和两个 RGN 文件
设计您的对话框,然后基于原始对话框创建两个对话框,并设置一个用于大图像,一个用于小图像。“可靠”确定字体模式的方法是:if (dc.GetDeviceCaps(LOGPIXELSX) == 120)
则为大,否则为小(dc.GetDeviceCaps(LOGPIXELSX)==96)
。
Copyright
此程序由 Data Dynamics 提供。欢迎复制并分发给任何人。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。