繁体   English   中英

更改只读的颜色CEdit控件工件和文本突出显示问题

[英]Change Color of read only CEdit control Artifacts and Text Highlighting issue

我有一个只读的Edit控件,其中包含文本。 我想将默认的灰色背景切换为白色,但运气有限。 在我第一次使用时,我在对话框初始化期间执行以下代码:

CEdit *m_ctrlEditOne = (CEdit*) GetDlgItem(IDC_EDIT1);
CDC *m_ctrlEEditWee = m_ctrlEditOne->GetDC();
m_ctrlEEditWee->SetBkColor(RGB(255,0,0));
Invalidate(true);

我尝试的另一个解决方案是

HBRUSH CTestingDlg::OnCtlColor(CDC* pDC, CWnd *pWnd, UINT nCtlColor)
{
if (pWnd->GetStyle() & ES_READONLY)
//if(pDC->GetRuntimeClass == & ES_READONLY)
{
    switch (nCtlColor)
    {
    case CTLCOLOR_STATIC:
        pDC->SetBkColor(RGB(255,255,255));
        return (HBRUSH)GetStockObject(NULL_BRUSH);
    default:
        //return NULL;
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
}
//return NULL;
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

在下面的屏幕截图中,您可以看到文本是在事实之后插入的(这是需要发生的事情)并且以蓝色突出显示 - 我不知道从哪里开始如何使其显示为正常,非突出显示文本。 点击它时,它会正常显示。 在每个编辑控件的左下角,可以看到一个不应出现在那里的正方形。 此外,您可以看到一些看起来像是更大框中出现的组合框下拉选择的工件。

在此输入图像描述

我将不胜感激任何有关如何摆脱工件和修复插入文本突出显示问题的指针。

我这样做如下所示。 它会将只读编辑控件IDC_EDIT1的背景更改为白色。 这是我的一个项目中的复制粘贴。

m_whitebrush是HBRUSH类型的CTestOnCtlClorDlg的私有成员,必须在CTestOnCtlClorDlg的构造函数中初始化为NULL。

HBRUSH CTestOnCtlClorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

  int id = pWnd->GetDlgCtrlID( ) ;

  if (id == IDC_EDIT1)
  {
    pDC->SetTextColor(RGB(0, 0, 0));
    pDC->SetBkColor(RGB(255,255,255));

    if (!m_whitebrush)
      m_whitebrush = CreateSolidBrush(RGB(255,255,255)) ;

    hbr = m_whitebrush ;
  } 

  return hbr;
}

void CTestOnCtlClorDlg::OnDestroy() 
{
  CDialog::OnDestroy();

  if (m_whitebrush !=NULL)
  {
    DeleteObject(m_whitebrush) ;
    m_whitebrush = NULL ;
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM