Как написать серый текст в поле ввода? - PullRequest
0 голосов
/ 22 января 2010

Я хочу установить текст в поле ввода, но он должен быть серым.

Есть ли способ сделать это?

Я не могу найти подходящий API для этого.

Есть предложения?

Ответы [ 5 ]

2 голосов
/ 22 января 2010

Вас также может заинтересовать управляющее сообщение EM_SETCUEBANNER . Это заставит элемент управления редактирования отображать направления серым текстом, не влияя на ввод данных пользователем.

2 голосов
/ 22 января 2010

Ответьте на сообщение WM_CTLCOLOREDIT и используйте SetTextColor на переданном HDC для выбора цвета текста.

0 голосов
/ 18 июня 2010

Я только что предположил, что вы имеете в виду 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!"));
  }
0 голосов
/ 22 января 2010

Это из приложения 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;
}
0 голосов
/ 22 января 2010

Как насчет обычного SetTextColor ?

Например,

SetTextColor(hdc, RGB(0xc0, 0xc0, 0xc0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...