如何在编辑框上写灰色文字?

时间:2010-01-22 05:39:14

标签: user-interface text winapi fonts visual-c++

我想在我的编辑框中设置一些文字,但它应该是灰色的。

有没有办法做到这一点?

我无法为此找到合适的API。

有什么建议吗?

5 个答案:

答案 0 :(得分:2)

您可能也对EM_SETCUEBANNER edit control message感兴趣。它将使编辑控件以灰色文本显示方向而不影响用户输入。

答案 1 :(得分:2)

回复WM_CTLCOLOREDIT message并在传递的HDC上使用SetTextColor来选择文本颜色。

答案 2 :(得分:0)

普通SetTextColor怎么样?

例如,

SetTextColor(hdc, RGB(0xc0, 0xc0, 0xc0));

答案 3 :(得分:0)

这是来自MFC应用程序(因此是pWnd),但更改为纯SDK代码相对容易:

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

   switch (nCtlColor)
   {
      case CTLCOLOR_EDIT:

         if (pWnd->GetDlgCtrlID () == IDC_MY_EDIT)
         {
            pDC->SetTextColor (COLOR_GRAYTEXT);
         }
         break;

      default:
         break;
   }
   return hbr;
}

答案 4 :(得分:0)

我刚才假设您指的是Win32 API。如果没有,请忽略我的答案。

如果要在编辑框中以灰色或不同颜色编辑/输入文本,可以参考上面的回复,告诉您如何重载OnCtlColor()。

但是如果您只是在禁用的编辑框中显示文本,那么它将默认显示灰色文本(确保编辑框不是只读的,以便您可以写入编辑框控件)。例如,如果在对话框类的OnInit()方法中包含以下行,它将禁用编辑框并以灰色显示文本:

  virtual void OnInit()
  {
    // Assuming IDC_MY_DISABLED_EDIT is the ID you entered for the editbox 
    // in the dialog designer.
    // the above state will disable the edit box and display text in grey.
    GetDlgCtrl(IDC_MY_DISABLED_EDIT)->EnabledWindow(FALSE);

    // Hello World! will be displayed in grey.
    GetDlgCtrl(IDC_MY_DISABLED_EDIT)->SetWindowText(_T("Hello World!"));
  }