- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是为公共(public)控件的 edit control 替换背景。我当前的代码是这样做的:
HBITMAP hBmp = ::LoadBitmap(hInstance, MAKEINTRESOURCE(BKGND_ID));
HBRUSH hBkgndBrush = ::CreatePatternBrush(hBmp);
::DeleteObject(hBmp);
HBRUSH CDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID() == MY_CTRL_ID && hBkgndBrush)
{
hbr = hBkgndBrush;
//Do I need to select it?
//pDC->SelectObject(hbr); //This line?
pDC->SetBkMode(TRANSPARENT);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
问题是,我需要在返回之前选择hbr
吗? (请参阅上面的注释行。)我似乎在不同的在线示例中看到它是两种方式完成的。
编辑: 还忘了说,我这样覆盖了 WM_ERASEBKGND:
HDC hDc = ::GetDC(hWnd);
if(hDc)
{
RECT rc = {0};
::GetClientRect(hWnd, &rc);
::FillRect(hDc, &rc, hBkgndBrush);
::ReleaseDC(hWnd, hDc);
}
EDIT2: 我做了一个小的 sample MFC project 来说明这个问题。基本上,当我将应用程序快速移出屏幕然后返回时,它会产生这种视觉“故障”,但前提是控件没有 ES_MULTILINE 样式:
最佳答案
当使用 CreatePatternBrush
从位图创建背景画笔时,在对话框调整大小或移动过程中可能会出现一些“重复伪像”。
要移除这些瑕疵,强制子控件重新绘制以响应 ON_WM_WINDOWPOSCHANGED
消息:
void CMyDialog::OnWindowPosChanged(WINDOWPOS *wndpos)
{
CDialog::OnWindowPosChanged(wndpos);
CWnd *wnd = GetWindow(GW_CHILD);
while (wnd)
{
wnd->Invalidate(TRUE);
wnd = wnd->GetWindow(GW_HWNDNEXT);
}
}
或
void CMyDialog::OnWindowPosChanged(WINDOWPOS *wndpos)
{
CDialog::OnWindowPosChanged(wndpos);
edit1.Invalidate(FALSE);
edit2.Invalidate(FALSE);
...
}
OnCtlColor
重写如下:
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* wnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_DLG)
return CDialogEx::OnCtlColor(pDC, wnd, nCtlColor);
pDC->SetBkMode(TRANSPARENT);
return hBkgndBrush;
}
您可以根据wnd
或nCtlColor
添加其他条件,仅更改编辑控件的背景。
关于c++ - 编辑控件替换背景需要选择HBRUSH吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37783444/
好吧,我有点想在 window 上有一种微弱的条纹图案……只是,因为它看起来不错。无论如何,我知道我可以像这样制作一个孵化的画笔: window with red stripes on white b
你能从 HBRUSH 得到 RGB 值吗?还是刷id?例如:我正在寻找 GRAY_BRUSH RGB 值。 最佳答案 您想使用 GetObject函数返回包含画笔颜色的 LOGBRUSH 结构。 关于
我正在为我的应用程序使用 GDI 和 VS 6.0。 在我的应用程序中,绘制的多边形是重叠的,我使用 CreateSolidBrush 用特定颜色填充每个多边形。区域是使用 CRgn class 创建
(此问题是在使用 g++ 编译器的 Win32API 上下文中提出的)。我无法理解为什么以下代码行不起作用 wndclass.hbrBackground = GetStockObject(WHITE_
颜色 (#E6EFFA) 以红色圈出。 我正在尝试制作一个与 IE 用户界面相匹配的 Internet Explorer 工具栏。我应该使用什么 HBRUSH 来获得那种颜色?我尝试查看各种标准 HB
我是一名优秀的程序员,十分优秀!