MFC如何调整CStatic到一个小的大小
MFC how to resize CStatic to a small size
我对CStatic控件有以下问题:
当我调用函数SetIcon
时:
m_CStatic.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));
它加载了一个14x14像素的图标,但是控件的实际大小变成了21x20,我无法修改它。
我试着打电话:
m_CStatic.SetWindowPos(NULL,0 , 0, 14, 14, SWP_NOMOVE);
但是它只能剪切一个大小而不调整图标的大小。因此,我有一部分缩放图像。
是否有办法设置一个图标的大小加载?
编辑
IDI_ICON1
的实际尺寸为14x14像素。
CStatic
控件的大小是21x20,我不能用设计师来改变它。
当我加载一个图标时,它是拉伸的。我不知道为什么。
IDI_ICON1
的实际尺寸为14x14像素。
CStatic
控件的大小是21x20,我不能用设计器来改变它。
如果你在设计器中查看控件的大小,你不是在比较苹果和苹果。设计师在 plus (对话框单位)中报告控件的大小,而不是像素。
在dlu和像素之间不一定有1对1的映射。事实上,DLU的全部意义在于它是像素无关的。单个DLU表示的实际像素数将根据运行应用程序的计算机的字体和DPI而变化。
所以你看到的行为对我来说是完全有意义的。
如果您不相信这种DLUs vs pixels的愚蠢之处,那么尝试在调试器下运行应用程序并使用spy++来调查静态控件的实际大小(以像素为单位)。我打赌它是14x14的。
不,如果您将静态控件设置为显示图标,则无法在设计器中调整其大小。控件会自动调整大小以适应它所显示的图标。这也是设计的结果。我无法想象你为什么想要;你的意思似乎是你不希望这个图标被剪掉。
但是就像我在评论中说的,静态控件不会自动缩放它们的图标。您需要自己编写代码来缩放图标(可能通过调用DrawIconEx
函数)。强制静态控件调整自己的大小只会裁剪图标或在其周围添加边框。添加SS_CENTERIMAGE
样式,就像duDE建议的那样,将改变这种行为,使图标与静态控件的中心对齐,微妙地改变裁剪的方式。但它仍然会被裁剪以适合静态控件的大小。
不过一定要小心。我在评论中关于IDI_ICON1
中图标的问题的全部要点是LoadIcon
函数有一些重要的限制。也就是说,它只被设计为加载SM_CXICON
和SM_CYICON
大小的图标(在大多数系统上,这将是32x32)。当你在图标资源中只定义了一个图标时,它确实像预期的那样工作,但否则它就会崩溃。这可能是对拉伸的解释。相反,建议您使用LoadImage
函数。代码相当冗长,但它是一个更强大的函数:
HICON hIcon = static_cast<HICON>(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON,
14, /* width (x dimension) */
14, /* height (y dimension) */
LR_DEFAULTCOLOR));
// (make sure to call DestroyIcon() on hIcon when you're done with it!)
试试这个:
CStatic m_CStatic;
// Create a child icon static control
m_CStatic.Create(_T("my static"),
WS_CHILD|WS_VISIBLE|SS_ICON|SS_CENTERIMAGE, CRect(0 , 0, 14, 14), pParentWnd);
// Set the icon
m_CStatic.SetIcon(::LoadIcon(IDI_ICON1));
关键是SS_CENTERIMAGE:
位图位于包含它的静态控件的中心。控件没有调整大小,因此对于控件来说太大的位图将被剪切。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '