WndImage 控件是一个用于在 Windows 对话框中以任意比例显示位图的工具。它提供了默认的缩放和对齐模式,同时也支持自由缩放、偏移和平铺模式。这个控件在处理不同系统对话框中位图大小的问题时非常有用。
使用简单:在对话框资源中放置一个静态控件,然后调用 CWndImage::CreateFromStatic 来替换它为 WndImage 控件。
设置图像:
将 WndImage.h 和 wndImage.cpp 添加到项目中,然后在需要的地方包含 wndimage.h。
在对话框中添加一个静态或“图片”控件,并给它一个 IDC_ST_IMG 控件 ID。
在对话框类中添加一个 CWndImage m_img 成员变量。
在 OnInitDialog 中添加以下代码:
m_img.CreateFromStatic(GetDlgItem(IDC_ST_IMG));
m_img.SetImg(IDB_MYBITMAP); // 指定一个有效的位图资源
m_img.SetBltMode(CWndImage::bltFitXY); // 如果已经使用了一个图片控件,并已经指定了一个位图,可以省略第二和第三行
创建控件:
BOOL Create(RECT const & r, CWnd * parent, UINT id, DWORD dwStyle = WS_CHILD | WS_VISIBLE)
BOOL CreateFromStatic(CWnd * static)
CreateFromStatic 将使用静态控件的样式、位置和 ID,并用 wndImage 控件替换它。如果静态控件指定了位图(需要在资源编辑器中选择“图片控件”),这个位图将以 FitXY 模式显示(按比例拉伸以适应而不裁剪)。
选择图像:
void SetImg(HBITMAP bmp, bool shared = false)
void SetImg(CBitmap * bmp)
bool SetImg(LPCTSTR resID, HINSTANCE instance = 0)
bool SetImg(UINT resID, HINSTANCE instance = 0)
bool SetImgFile(LPCTSTR fileName)
共享:如果为 true,WndImage 控件在销毁时不会 DeleteObject() 提供的 HBITMAP。原型 2..5 不共享位图。
实例:如果不为 NULL,指定从哪个模块句柄加载位图。
设置位图模式:
void SetBltMode(int mode)
bltNormal - 图像以其原始大小绘制。
bltStretch - 图像被拉伸以适应整个窗口。
bltFitX - 图像按比例缩放,水平适应窗口。
bltFitY - 图像按比例缩放,垂直适应窗口。
bltFitXY - 图像按比例缩放到最大可能的尺寸而不裁剪图像。
bltFitSm - 图像按比例缩放,使得一个坐标适应窗口,另一个被裁剪(这种模式适用于视图的宽高比与图像的宽高比差异很大的小视图)。
bltTile - 图像以其原始大小重复以适应窗口。
注意:常量必须以 "CWndImage::" 为前缀。
注意:a/r:这些模式保留了图像的宽高比。
设置对齐:
void SetAlign(int alignX, int alignY)
void SetAlignX(int alignX)
void SetAlignY(int alignY)
有效的对齐方式有:bltLeft, bltTop, bltCenter, bltRight, bltBottom(希望能理解它们的含义)。
设置缩放因子(1.0 == 原始大小,<1 更小,>1 更大)。
void SetZoom(double zoomX, double zoomY)
void SetZoom(double zoom)
第二个原型设置成比例缩放,其中 zoomX == zoomY。
自定义缩放不能与 bltTile 模式一起使用。
设置图像左上角在窗口中的位置。正值将图像移向中心,负值将其移出视线。
void SetOrigin(int origX, int origY)
void SetOriginX(int origX)
void SetOriginY(int origY)
自定义对齐也可以与平铺一起使用。
通过使用 SetSourceRect,可以为位图指定一个裁剪矩形。这可以与所有模式一起使用。坐标以位图像素为单位。第二个原型将设置恢复为整个位图。
void SetSourceRect(RECT const & r)
void SetSourceRect()
当图像更改(SetImg, SetImgFile)时,除了源窗口外,所有设置都保留。源窗口将重置为整个图像。
设置用于填充图像未占用的背景的画刷。
void SetBackgroundBrush(HBRUSH)
void SetBackgroundBrush(int sysColorIndex)
void SetBackgroundBrush(CBrush & brush)
有效的 sysColorIndex 值,请参见 GetSysColor Win32 API 文档(例如 COLOR_WINDOW 用于默认窗口背景颜色,或 COLOR_3DFACE 用于默认对话框背景)。
初始颜色是 COLOR_3DFACE。
获取图像大小、位图模式、缩放因子、对齐方式、原点位置等信息。
int GetImgSizeX() const
int GetImgSizeY() const
int GetBltMode() const
double GetZoomX() const
double GetZoomY() const
int GetAlignX() const
int GetAlignY() const
int GetOriginX() const
int GetOriginY() const
这些函数返回它们承诺的值。即使在标准位图或对齐模式中,这些值也是正确的。
获取位图句柄:
HBITMAP GetBitmap(bool detach = false)
返回正在使用的位图的句柄。如果 detach 为 true,则控件将不再使用它。