CEdit适用于ComCtrl32版本5.82,但不适用于6.10



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

我使用Microsoft Visual Studio社区进行开发。

在旧的项目中,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();
}

谢谢你的建议

Erhy

请,我需要解释!

我一步一步地对应用程序进行了编程,发现了导致故障的代码,即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控件按预期进行更新。

感谢您的讨论

相关内容

  • 没有找到相关文章

最新更新