【发布时间】:2010-01-22 05:39:14
【问题描述】:
我想在我的编辑框上设置一些文本,但它应该是灰色的。
有什么办法吗?
我无法为此找到合适的 API。
有什么建议吗?
【问题讨论】:
-
你的意思是,带有灰色阴影的文本还是只是文本颜色为灰色?
标签: user-interface text winapi fonts visual-c++
我想在我的编辑框上设置一些文本,但它应该是灰色的。
有什么办法吗?
我无法为此找到合适的 API。
有什么建议吗?
【问题讨论】:
标签: user-interface text winapi fonts visual-c++
您可能还对EM_SETCUEBANNER edit control message 感兴趣。它将导致编辑控件以灰色文本显示方向,而不会影响用户输入。
【讨论】:
回复WM_CTLCOLOREDIT message,在传入的HDC上使用SetTextColor选择文字颜色。
【讨论】:
【讨论】:
这是来自 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;
}
【讨论】:
我刚刚假设您指的是 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!"));
}
【讨论】: