- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 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,我无法通过设计器更改它。
当我加载一个图标时,它被拉伸(stretch)了。我不知道为什么。
最佳答案
An actual size of the
IDI_ICON1
is 14x14 pixels.Also the size of the
CStatic
control is 21x20 and I can not change it with the designer.
如果您正在查看设计器中控件的大小,那么您并不是在这里进行同类比较。设计者报告的控件大小以 DLUs(对话框单位)为单位,不是像素。
DLU 和像素之间不一定存在一对一的映射。事实上,DLU 的全部意义在于它与像素无关。单个 DLU 表示的实际像素数将根据您运行应用程序的计算机的字体和 DPI 而变化。
所以你看到的行为对我来说非常有意义。
如果您不相信这种 DLU 与像素的愚蠢行为,请尝试在调试器下运行应用程序并使用 Spy++ 调查静态控件的实际大小(以像素为单位)。我敢打赌它是 14x14。
不,如果将静态控件设置为显示图标,则不能在设计器中调整静态控件的大小。控件会自动调整大小以适应它所显示的图标。这也是设计使然。我无法想象你为什么想要;您的全部意思似乎是您不想剪裁图标。
但正如我在评论中所说,静态控件不会自动缩放其图标。您需要编写代码来自己缩放图标(可能通过调用 DrawIconEx
function )。强制静态控件自行调整大小只会裁剪图标或在其周围添加边框。添加 SS_CENTERIMAGE
样式,如 duDE suggested将改变此行为,使图标与静态控件的中心对齐,从而巧妙地改变裁剪的方式。但它仍会被裁剪以适合静态控件的大小。
不过要小心。我在关于 IDI_ICON1
中的图标的评论中提出的全部问题是,LoadIcon
函数有一些重要的限制。即,它仅设计用于加载具有 SM_CXICON
和 SM_CYICON
大小的图标(在大多数系统上,这将是 32x32)。当您在图标资源中只定义了一个图标时,它确实能按预期工作,但否则它就会分崩离析。这可能是拉伸(stretch)的解释。相反,建议您使用 LoadImage
function .代码比较冗长,但是功能更强大:
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!)
关于c++ - MFC 如何将 CStatic 调整为小尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321658/
我一直无法找到一个简洁的代码块来允许我向 CStatic(和 CLed)控件添加/显示工具提示。显然,这样做的标准代码不适用于这种类型的控件。有人可以发布代码片段吗? 最佳答案 我不知道这是否仍然需要
我正在使用基于 MFC 对话框的应用程序,并且有一个子类化的 CStatic 控件。我想在我的子类控件中接收 WM_MOUSEWHEEL 和其他消息,但不知何故这些消息永远不会到达。 这是我的对话框的
我正在尝试在 vc++ 中创建自定义 CStatic 控件,但遇到了一些问题。 我最初只是使用 SS_BLACKRECT 样式的 CStatic 控件。在我需要按需在控件上显示图像之前,这对这种情况很
1.我已经从 CStatic 中派生了一个名为 CLed_arr 的类。2.一个名为IDC_leds的cstatic控件被添加到资源编辑器的对话窗口中。3.为此 IDC_leds 创建了一个名为 m_
有没有办法在 CStatic 标签中设置字母间距?所以 "TEST" 看起来像 "T E S T" ?我通过 SetFont() 方法使用 LOGFONT 及其参数进行了尝试,如下所示: LOGFON
我在使用 WTL 设置 CStatic 的背景颜色时遇到问题(我猜我在使用 MFC 时也会遇到同样的问题) 我有一个黑色背景的窗口,上面有一个派生自 CStatic 的控件。我通过 WM_CTLCOL
我正在尝试将位图加载到 CStatic 控件中。在我的对话框中,我有一个 CStatic 控件,我通过 _myStatic 引用它。在我的对话框的 OnInitDialog 方法中,我将控件连接到该变
我正在尝试将一张位图添加到图片框中。这是我试过的: void DlgError::Define_Image() { // I generate all requiered elements.
我有一个二维字符数组 lineData 和一个 bool 数组,linesToUnderline。 lineData 只存储文本。 linesToUnderline 为 lineData 中的每一行存
我现在正在编写自己的 CStatic 子类,但我对如何更改它的背景颜色有点困惑。 根据以前的经验,我习惯于用我想要的颜色对“CTLCOLORSTATIC”消息使用react。 但是,目前这是我的子类:
我正在尝试绘制一些颜色介绍对话框,我有几个按钮(用于选择颜色)和一个 CStatic 控制我将使用哪个窗口来绘制所选颜色它。但是,当我调用 m_myStatic.GetWindow( NULL ) 时
我正在尝试动态更改 CStatic 控件的文本。我的成员变量名为 mStatic,类型为 CStatic。我已将 ID 更改为 IDC_MYSTATIC 而不是 IDC_STATIC。 当我想更改控件
我想我在这里遗漏了一些小东西。 我正在尝试创建一个继承自 CStatic 且具有透明背景的类。我设法创建了该类的一个实例,它显示在父 CView 中。但是,当我添加一个 OnCtlColor 消息处理
我想我在这里遗漏了一些小东西。 我正在尝试创建一个继承自 CStatic 且具有透明背景的类。我设法创建了该类的一个实例,它显示在父 CView 中。但是,当我添加一个 OnCtlColor 消息处理
我有一个 CStatic 控件,我想在运行时设置其文本(计算斐波那契数) Class TXT:public CStatic { private: CString m_str; publ
我创建了一个自定义控件,其类以 CStatic 作为基类。目前我使用 WM_PAINT 事件处理绘图。但是有一个奇怪的行为。当我使用 CWnd::EnableWindow 函数禁用窗口后重新启用它时,
是否可以在 Visual C++6 中向 CStatic 控件添加工具提示?怎么办? 最佳答案 当然,您可以使用 CToolTipCtrl以便将工具提示添加到窗口、对话框或控件的任何部分。 关于c++
我对 CStatic 控件有以下问题: 当我调用函数 SetIcon 时: m_CStatic.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1)); 它加载了一
我有一个 MFC 应用程序,我试图让用户通过在图片控件上拖动鼠标来绘制一个矩形。我创建了自己的由 CStatic 子类化的 PictureCtrl 类。但是,当我单击任何鼠标时,OnLButtonUp
我试图了解消息路由在 MFC 中的工作原理,但我对此有一些疑问。想象一个扩展 CWnd 的控件。我的第一个问题是:该控件中的所有消息是否都传递给了父控件? 我知道 CStatic 不会发生这种情况,它
我是一名优秀的程序员,十分优秀!