主窗口最小化时,Ownerdraw 控件重叠

问题描述 投票:0回答:1

我正在创建一个简单的程序并尝试使用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
中删除其以下代码。这似乎解决了问题,但是我希望背景有圆角而不是尖角。

c++ winapi
1个回答
0
投票

这并不是一个真正的答案,但是,就在两三周前,我在尝试自定义一个简单图形静态框的颜色时遇到了类似的情况,我的一个玩具程序使用该静态框在一个小矩形下显示一个填充矩形。控件簇由一个标准(非所有者绘制)编辑字段和三个常规按钮组成(见下文)。将静态框的样式设置为

SS_OWNER­DRAW
并在 Visual Studio 2019 中实现所需的
WM_DRAW­ITEM
处理程序后,我重建了整个解决方案,程序似乎运行得非常完美。然而,在以通常的方式启动它之后(即不使用 Visual Studio),我立即注意到出了问题,因为一旦我按下 Alt,纯白色矩形就会被带到 z 顺序的顶部,与所有其他(标准)控件重叠。我不知道它为什么起作用,但我通过转到控制面板>轻松访问中心>使键盘更易于使用并勾选下划线键盘快捷键和访问键复选框来“修复”了这个问题。

截图:

启动程序后:

按 Alt 后:

© www.soinside.com 2019 - 2024. All rights reserved.