WndImage 控件使用指南

WndImage 控件是一个用于在 Windows 对话框中以任意比例显示位图的工具。它提供了默认的缩放和对齐模式,同时也支持自由缩放、偏移和平铺模式。这个控件在处理不同系统对话框中位图大小的问题时非常有用。

概述

使用简单:在对话框资源中放置一个静态控件,然后调用 CWndImage::CreateFromStatic 来替换它为 WndImage 控件。

设置图像:

  • 使用 HBITMAP、资源 ID 或 SetImgFile(filename) 设置图像。
  • 使用 SetBltMode 设置预定义的缩放模式。
  • 使用 SetAlign 设置预定义的对齐方式(左/中/右,上/中/下)。
  • 使用 SetZoom 和 SetOrigin 进行自定义放置。
  • 使用 SetSourceRect 仅显示位图的一个裁剪矩形。

尝试它!

将 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,则控件将不再使用它。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485