Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать Edit Box - Read Only, не меняя цвет 
V
    Опции темы
bugmenot
Дата 2.9.2006, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 0
Всего: 1



Как сделать Edit Box - Read Only, не меняя его цвет на серый?

Спс
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Fixin
Дата 2.9.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



ну... (возможно так) субклассь едит и при попытке ввода возвращай пустое значение.

Добавлено @ 22:08 
Цитата(GremlinProg @  2.9.2006,  22:01 Найти цитируемый пост)
EDIT изначально и не устанавливает его серым
Верно, это дисейбл "засеряет".

PM MAIL ICQ   Вверх
GremlinProg
Дата 2.9.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



EDIT изначально и не устанавливает его серым. Добавь стиль ES_READONLY при создании едита.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 2.9.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



нужно обработать WM_CTLCOLORSTATIC, только нужно проверить, для какого контрола меняем цвет:
Код

    case WM_CTLCOLORSTATIC:
        return(LRESULT)GetSysColorBrush(COLOR_WINDOW);




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Fixin
Дата 2.9.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Цитата(GremlinProg @  2.9.2006,  22:31 Найти цитируемый пост)
нужно обработать WM_CTLCOLORSTATIC
Зачем?
PM MAIL ICQ   Вверх
GremlinProg
Дата 2.9.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



это уведомление посылается родительскому окну, когда необходимо получить кисть для закраски заднего фона, либо настроить HDC перед прорисовкой контрола. Конечно, по умолчанию, EDIT не ставит цвет серый на readonly, это происходит только в диалоговых шаблонах, поэтому выход через WM_CTLCOLORSTATIC:
Цитата

Read-only or disabled edit controls do not send the WM_CTLCOLOREDIT message; instead, they send the WM_CTLCOLORSTATIC message.



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Fixin
Дата 3.9.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Цитата(GremlinProg @  2.9.2006,  23:16 Найти цитируемый пост)
 в диалоговых шаблонах
не учел.

PM MAIL ICQ   Вверх
bugmenot
Дата 3.9.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 0
Всего: 1



Цитата(GremlinProg @ 2.9.2006,  22:31)
нужно обработать WM_CTLCOLORSTATIC, только нужно проверить, для какого контрола меняем цвет:
Код

    case WM_CTLCOLORSTATIC:
        return(LRESULT)GetSysColorBrush(COLOR_WINDOW);

Не помогло
Может я чето не так делаю...

Я создаю окно с DialogBoxParamA, в ресурсах Edit Box уже Read Only, и код у меня выглядит гдето так:
Код

LRESULT CALLBACK MainDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_COMMAND:
            if(LOWORD(wParam)==IDC_EDITBOX && HIWORD(wParam)==WM_CTLCOLORSTATIC)
                return (LRESULT)GetSysColorBrush(COLOR_WINDOW);
            break;

        default:
            return false;
    }
    return 0;
}


Это сообщение отредактировал(а) bugmenot - 3.9.2006, 19:03
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
GremlinProg
Дата 3.9.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Ну, почти так )
Код

LRESULT CALLBACK MainDlg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {

        case WM_CTLCOLORSTATIC:
            if(GetDlgCtrlID((HWND)lParam)==IDC_EDITBOX)
                return (LRESULT)GetSysColorBrush(COLOR_WINDOW);
            break;

        default:
            return false;
    }
    return 0;
}



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
bugmenot
Дата 3.9.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 3.7.2006

Репутация: 0
Всего: 1



Работает! =)

Большое спасибо, GremlinProg
--------------------
доска объявленийвсе о горных велосипедах 
PM MAIL   Вверх
Rickert
Дата 4.9.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Можно ловить OnKeyDown и оставить его пустым.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0818 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.