首页 > 解决方案 > CEdit 适用于 ComCtrl32 版本 5.82 但不适用于 6.10

问题描述

我想将 MFC 项目移植到当前可用的资源。

我使用 Microsoft Visual Studio Community 进行开发。

在旧项目中,Windows SDK 版本是10.0.15063.0

在新项目中,Windows SDK 版本为10.0.17763.0

旧项目使用 ComCtrl32.dll 版本5.82

新项目使用 ComCtrl32.dll 版本6.10

使用SetWindowTextW(textp)更新后, 使用的CEdit控件显示黑色控件矩形

如果我将光标移到控件上,它看起来像预期的那样。

ValEdit.h:

class ValEdit : public CEdit
{
public:
    ValEdit();
    virtual ~ValEdit();
    int ZeroMeansInactiv;

protected:

    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnUpdate();

    DECLARE_MESSAGE_MAP()

private:

    COLORREF    m_TextColor;

    HBRUSH m_hBackgroundBrush;
    HBRUSH m_hBackgrInactivBrush;

};

ValEdit.cpp:

ValEdit::ValEdit()
{
    ZeroMeansInactiv = 1;
    m_TextColor = Black;
    m_hBackgroundBrush = CreateSolidBrush(RGB(255, 255, 255));
    m_hBackgrInactivBrush = CreateSolidBrush(RGB(90, 90, 90));
}

ValEdit::~ValEdit()
{
}

BEGIN_MESSAGE_MAP(ValEdit, CEdit)
    ON_WM_ERASEBKGND()
    ON_CONTROL_REFLECT(EN_UPDATE, OnUpdate)
END_MESSAGE_MAP()

BOOL ValEdit::OnEraseBkgnd(CDC* pDC) 
{
    RECT rc;
    this->GetClientRect(&rc);

    SetMapMode(*pDC, MM_TEXT);
    FillRect(*pDC, &rc, !!ZeroMeansInactiv ? m_hBackgroundBrush : m_hBackgrInactivBrush );
    return TRUE;
}

void ValEdit::OnUpdate() 
{
    RedrawWindow();
}

谢谢你的建议

尔希

标签: visual-studiomfccomctl32

解决方案


拜托,我需要解释!

我一步一步地对应用程序进行编程,发现导致故障的代码,即 CEdit 控件没有正确更新。

HBRUSH CStyleToolkitDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (nCtlColor == CTLCOLOR_STATIC)
    {
        // We handle this message only if we have set the region
        BOOL bHandled = m_bIsRgnSet;
        if (bHandled)
        {
            HDC hDC = pDC->GetSafeHdc();
            SetBkMode(hDC, TRANSPARENT);
            return (HBRUSH)GetStockObject(HOLLOW_BRUSH); //causes the malfunction
        }
    }
    return hbr;
}

如果我排除 CEdit

if (!pWnd->IsKindOf(RUNTIME_CLASS(CEdit)))
            return (HBRUSH)GetStockObject(HOLLOW_BRUSH);

CEdit 控件按预期更新。

谢谢讨论


推荐阅读