我正在创建一个简单的程序并尝试使用ownerdraw控件,并遇到了这个问题。
我有一个ownerdraw按钮和一个静态ownerdraw背景。该程序似乎工作正常,但是当我最小化主窗口时,静态背景与按钮重叠,并且它完全消失,直到我将鼠标悬停在按钮的位置上。
背景和按钮都在
WM_DRAWITEM
中处理:
case WM_DRAWITEM:
{
self->OnDrawItem(lParam, wParam); //Buttons
//Background Static control with round corner
HWND base = GetDlgItem(hWnd, IDC_STATIC_FOOTER);
HDC hdc = GetDC(base);
HPEN nullPen = CreatePen(PS_SOLID, 1, RGB(169, 169, 169));
RECT rect;
GetWindowRect(base, &rect);
MapWindowPoints(NULL, base, (LPPOINT)&rect, 2);
SelectObject(hdc, nullPen);
RoundRect(hdc, rect.left, rect.top, rect.right, rect.bottom, 5, 5);
SetBkColor(hdc, TRANSPARENT);
DeleteObject(nullPen);
return TRUE;
}
我尝试从静态控件中删除
SS_OWNERDRAW
,以及从WM_DRAWITEM
中删除其以下代码。这似乎解决了问题,但是我希望背景有圆角而不是尖角。
这并不是一个真正的答案,但是,就在两三周前,我在尝试自定义一个简单图形静态框的颜色时遇到了类似的情况,我的一个玩具程序使用该静态框在一个小矩形下显示一个填充矩形。控件簇由一个标准(非所有者绘制)编辑字段和三个常规按钮组成(见下文)。将静态框的样式设置为
SS_OWNERDRAW
并在 Visual Studio 2019 中实现所需的 WM_DRAWITEM
处理程序后,我重建了整个解决方案,程序似乎运行得非常完美。然而,在以通常的方式启动它之后(即不使用 Visual Studio),我立即注意到出了问题,因为一旦我按下 Alt,纯白色矩形就会被带到 z 顺序的顶部,与所有其他(标准)控件重叠。我不知道它为什么起作用,但我通过转到控制面板>轻松访问中心>使键盘更易于使用并勾选下划线键盘快捷键和访问键复选框来“修复”了这个问题。
截图:
启动程序后:
按 Alt 后: