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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не выделяется текст в контроле EDITTEXT 
:(
    Опции темы
Riddik
Дата 5.6.2013, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно при щелчке по EDITTEXT выделить весь текст в нём.

В обработке WM_COMMAND ждёт фокуса по контролу:

Код

case ID_EDIT: if(codeNotify == EN_SETFOCUS) SendDlgItemMessageW(hwnd, ID_EDIT, EM_SETSEL, 0, -1); break;


Но эффекта нет - текст не выделяется. Где ошибка?
PM MAIL   Вверх
feodorv
Дата 5.6.2013, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 45



Несколько вопросов. 
До SendDlgItemMessageW дело вообще доходит (не пробовали MessageBox туда засунуть)?
У Вас уникодовый контрол? Вы создавали диалог через CreateDialogW?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Earnest
Дата 6.6.2013, 07:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Попробуй заменить на Post
И да, проверь, что условие выполняется, поскольку непонятно, откуда ты берешь codeNotify


--------------------
...
PM   Вверх
Riddik
Дата 6.6.2013, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(feodorv @  5.6.2013,  18:12 Найти цитируемый пост)
До SendDlgItemMessageW 


Цитата(Earnest @  6.6.2013,  07:31 Найти цитируемый пост)
И да, проверь, что условие выполняется


Естественно проверил до того как открыть тему) Доходит, условие выполняется.


Цитата(feodorv @  5.6.2013,  18:12 Найти цитируемый пост)
У Вас уникодовый контрол? Вы создавали диалог через CreateDialogW? 

Контрол:

#define ID_TAT_SIZE_WIDTH            129
...

EDITTEXT        ID_TAT_SIZE_WIDTH, 38, 14, 25, 12, ES_CENTER | ES_NUMBER

В приложении везде юникод.

Создал через CreateDialogParamW.


Цитата(Earnest @  6.6.2013,  07:31 Найти цитируемый пост)
Попробуй заменить на Post


Можно подробнее что именно заменить?


Это сообщение отредактировал(а) Riddik - 6.6.2013, 10:11
PM MAIL   Вверх
feodorv
Дата 6.6.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 45



Цитата(Riddik @  6.6.2013,  11:11 Найти цитируемый пост)
Можно подробнее что именно заменить?

Заменить SendDlgItemMessageW на PostMessageW( GetDlgItem( hwnd, ID_TAT_SIZE_WIDTH), ...).

PS Что есть ID_EDIT???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Riddik
Дата 6.6.2013, 15:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(feodorv @  6.6.2013,  11:36 Найти цитируемый пост)
Заменить SendDlgItemMessageW на PostMessageW( GetDlgItem( hwnd, ID_TAT_SIZE_WIDTH), ...).

Спасибо, теперь работает)

Цитата(feodorv @  6.6.2013,  11:36 Найти цитируемый пост)
PS Что есть ID_EDIT??? 

id контрола, сперва изменил для форума.
PM MAIL   Вверх
Dem_max
Дата 7.6.2013, 04:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Не надо везде писать так SendDlgItemMessageW !!!
нужно везде писать так SendDlgItemMessage как и все остальные WinAPI функции !!!

И еще не нужно писать так !!!

Код

char *stroka = "Это строка";
SetWindowText(hwnd, (LPWSTR)stroka);


и тому подобную галиматью

Я думаю часть ошибок отпадет или компилятор сругнется показывая на ошибки.


Это сообщение отредактировал(а) Dem_max - 7.6.2013, 04:35


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Riddik
Дата 13.6.2013, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Dem_max @  7.6.2013,  04:31 Найти цитируемый пост)
Не надо везде писать так SendDlgItemMessageW !!!
нужно везде писать так SendDlgItemMessage как и все остальные WinAPI функции !!!


Почему? Если приложение unicode, всё равно все ф-ии заменяться на W?


Цитата(Dem_max @  7.6.2013,  04:31 Найти цитируемый пост)
И еще не нужно писать так !!!

код C++
1:
2:
char *stroka = "Это строка";
SetWindowText(hwnd, (LPWSTR)stroka);


и тому подобную галиматью


А как нужно, поясни, плийз?
PM MAIL   Вверх
volatile
Дата 13.6.2013, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 13
Всего: 85



Цитата(Riddik @  13.6.2013,  16:46 Найти цитируемый пост)
А как нужно

Цитата(Riddik @  13.6.2013,  16:46 Найти цитируемый пост)
wchar_t *stroka = L"Это строка";
SetWindowText(hwnd, (LPWSTR)stroka);

Иначе ошибка.
Вообще чем меньше приведений тем лучче.


PM MAIL   Вверх
GremlinProg
Дата 13.6.2013, 21:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(volatile @ 13.6.2013,  19:39)
Цитата(Riddik @  13.6.2013,  16:46 Найти цитируемый пост)
А как нужно

Цитата(Riddik @  13.6.2013,  16:46 Найти цитируемый пост)
wchar_t *stroka = L"Это строка";
SetWindowText(hwnd, (LPWSTR)stroka);

Иначе ошибка.
Вообще чем меньше приведений тем лучче.

А вот так как раз и не нужно!

Правильных-то по сути только 3 варианта:
1. 
Код

wchar_t *stroka = L"Это строка";
SetWindowTextW(hwnd, stroka);


2. 
Код

char *stroka = "Это строка";
SetWindowTextA(hwnd, stroka);


3. 
Код

TCHAR *stroka = TEXT( "Это строка" );
SetWindowText(hwnd, stroka);



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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 13
Всего: 85



Цитата(GremlinProg @  13.6.2013,  21:36 Найти цитируемый пост)
А вот так как раз и не нужно!
Правильных-то по сути только 3 варианта: 

Если уж ставить все точки над i, среди трёх ваших вариантов нет ни одного правильного.  smile 

Цитата(GremlinProg @  13.6.2013,  21:36 Найти цитируемый пост)
char *stroka = "Это строка";

Грубейшее нарушение стандарта.
Многие компиляторы вообще не обязаны это компилить.



Это сообщение отредактировал(а) volatile - 13.6.2013, 23:27
PM MAIL   Вверх
GremlinProg
Дата 14.6.2013, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(volatile @  14.6.2013,  01:24 Найти цитируемый пост)
Грубейшее нарушение стандарта.Многие компиляторы вообще не обязаны это компилить.

по всей видимости, это нарушение персонального стандарта volatile ))


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

Грубейшее нарушение стандарта.

какого стандарта ???


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
volatile
Дата 15.6.2013, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 13
Всего: 85



Цитата(GremlinProg @  14.6.2013,  07:25 Найти цитируемый пост)
по всей видимости, это нарушение персонального стандарта volatile )) 

Неявное приведение к неконстантному указателю константной строки.
Запись по таким указателям, кстати только студия позволяет. (причем позволяет - не значит что это нормально так делать, даже в студии)
gcc же  вообще вывалицца с сегфолтом. (и правильно сделает!)

А кто помешает записать по неконстантному указателю?
Сие есть источник самых мерзопакостных багов. (те которые компиляцца без единой ошибки, а потом когда-то начинают вытворять черт знает что).

<удалено>
Вчера немного был не в духе. грубовато написал, прошу прощения.

В общем, константную строку всегда нужно присваивать константному указателю
Код

const char *stroka = "Это строка";

А если нужен не константный указатель, то
Код

char stroka [] = "Это строка";
// ну или динамическое выделение...



Это сообщение отредактировал(а) volatile - 16.6.2013, 00:33
PM MAIL   Вверх
xvr
Дата 16.6.2013, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(volatile @  15.6.2013,  03:40 Найти цитируемый пост)
Запись по таким указателям, кстати только студия позволяет. 

А кто тут по ним пишет?

Цитата(volatile @  15.6.2013,  03:40 Найти цитируемый пост)
В общем, константную строку всегда нужно присваивать константному указателю

В принципе да, но стандарт С++ в части присваивания именно строковых литералов в именно char* указатель сделал некоторое послабление. Для любых других указателей запись const версии в не-const указатель является ошибкой времени компиляции. Если бы то же самое сделали и для строк, то перестало компилится бы процентов 90 старого кода  smile 

gcc кстати на такие присваивания дает варнинг  smile 

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

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


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

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


 




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


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

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