为MFC静态标签的整个背景着色
Coloring the entire background of an MFC static label
如果要更改"常规"文本标签的背景颜色,此答案真的很棒。但是,如果您想在该文本标签上放置边框并扩大其尺寸,以便文字在名副其实的色彩海洋中游泳呢?它仅以所需颜色的形式绘制文本背景,然后将其余的扩展控制权带有标准按钮面。如何使整个控件的颜色保持一致?
注意:关于上述答案的有吸引力的功能(无论如何对我来说)是使用OnCtlColor()
,它为CWnd
控件提供了指针。因此,无需创建CStatic
子类即可处理颜色更改。避免创建这种子类的答案将是首选。
我对OP的注释不确定。仍在发布此代码以寻求帮助。
HBRUSH CSampleDlg::OnCtlColor(CDC* pDC, CWnd *pWnd, UINT nCtlColor)
{
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
{
CRect rcWindow(0, 0, 220, 40);
//::GetWindowRect(pWnd->GetSafeHwnd(), &rcWindow);
pDC->FillSolidRect(rcWindow, RGB(49, 49, 49));
pDC->SetTextColor(RGB(255, 255, 255));
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
default:
{
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
}
您可以使资源编辑器中的静态控制不可见,然后从cmydialog绘制它。
void CMyDialog::OnPaint()
{
CDialog::OnPaint();
paintstatic(IDC_STATIC1);
}
void CMyDialog::paintstatic(int id)
{
CClientDC dc(this);
CRect rc;
CWnd *child = GetDlgItem(id);
child->GetWindowRect(&rc);
CPoint offset(0, 0);
ClientToScreen(&offset);
rc.OffsetRect(-offset);
dc.FillSolidRect(rc, RGB(0, 255, 128));
CFont *font = GetFont();
dc.SelectObject(font);
CString text;
child->GetWindowText(text);
dc.DrawText(text, rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- C++ MFC Libraries in Travis CI
- 使用窗口中的QSlider更改背景音量
- 从 bmp 文件数据创建 MFC CBitmap
- 如何在 MFC 中显示文件的所有行
- 目录删除 MFC 的问题
- SDL2 透明背景
- MFC:如何设置CEdit框的焦点?
- MFC 中的抗锯齿
- MFC 更改 CListCtrl 背景颜色
- 什么是"MFC Dialog Extension"?(Windows/C++ 新手 - Linux 背景)
- C++MFC更改单选框的背景颜色
- 如何在鼠标上更改背景颜色悬停 c++ MFC
- 为MFC静态标签的整个背景着色
- 在 MFC 窗口中使用 PNG 作为背景图像
- 更改MFC中组合框的项背景颜色
- MFC显示具有透明背景的png
- 更改对话框mfc的背景颜色
- 改变一个MFC对话框元素的背景颜色
- MFC自定义控制背景/文本颜色