![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Нужно при щелчке по EDITTEXT выделить весь текст в нём.
В обработке WM_COMMAND ждёт фокуса по контролу:
Но эффекта нет - текст не выделяется. Где ошибка? |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Несколько вопросов.
До SendDlgItemMessageW дело вообще доходит (не пробовали MessageBox туда засунуть)? У Вас уникодовый контрол? Вы создавали диалог через CreateDialogW? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Попробуй заменить на Post
И да, проверь, что условие выполняется, поскольку непонятно, откуда ты берешь codeNotify -------------------- ... |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Естественно проверил до того как открыть тему) Доходит, условие выполняется.
Контрол: #define ID_TAT_SIZE_WIDTH 129 ... EDITTEXT ID_TAT_SIZE_WIDTH, 38, 14, 25, 12, ES_CENTER | ES_NUMBER В приложении везде юникод. Создал через CreateDialogParamW. Можно подробнее что именно заменить? Это сообщение отредактировал(а) Riddik - 6.6.2013, 10:11 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Заменить SendDlgItemMessageW на PostMessageW( GetDlgItem( hwnd, ID_TAT_SIZE_WIDTH), ...). PS Что есть ID_EDIT??? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
||||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Не надо везде писать так SendDlgItemMessageW !!!
нужно везде писать так SendDlgItemMessage как и все остальные WinAPI функции !!! И еще не нужно писать так !!!
и тому подобную галиматью Я думаю часть ошибок отпадет или компилятор сругнется показывая на ошибки. Это сообщение отредактировал(а) Dem_max - 7.6.2013, 04:35 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Riddik |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Почему? Если приложение unicode, всё равно все ф-ии заменяться на W?
А как нужно, поясни, плийз? |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
| GremlinProg |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
А вот так как раз и не нужно! Правильных-то по сути только 3 варианта: 1.
2.
3.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||||
|
|||||||||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Если уж ставить все точки над i, среди трёх ваших вариантов нет ни одного правильного. Грубейшее нарушение стандарта. Многие компиляторы вообще не обязаны это компилить. Это сообщение отредактировал(а) volatile - 13.6.2013, 23:27 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
по всей видимости, это нарушение персонального стандарта volatile )) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
какого стандарта ??? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| volatile |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Неявное приведение к неконстантному указателю константной строки. Запись по таким указателям, кстати только студия позволяет. (причем позволяет - не значит что это нормально так делать, даже в студии) gcc же вообще вывалицца с сегфолтом. (и правильно сделает!) А кто помешает записать по неконстантному указателю? Сие есть источник самых мерзопакостных багов. (те которые компиляцца без единой ошибки, а потом когда-то начинают вытворять черт знает что). <удалено> Вчера немного был не в духе. грубовато написал, прошу прощения. В общем, константную строку всегда нужно присваивать константному указателю
А если нужен не константный указатель, то
Это сообщение отредактировал(а) volatile - 16.6.2013, 00:33 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А кто тут по ним пишет?
В принципе да, но стандарт С++ в части присваивания именно строковых литералов в именно char* указатель сделал некоторое послабление. Для любых других указателей запись const версии в не-const указатель является ошибкой времени компиляции. Если бы то же самое сделали и для строк, то перестало компилится бы процентов 90 старого кода gcc кстати на такие присваивания дает варнинг PS. В данном случае речь шла о правильном написании программы для UNICODEа и не UNICODEа, а не о константности указателей. Замечание на отсутствие const выглядит придиркой. Давайте тогда уж критиковать и имя переменной - должна быть не stroka, а string. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
xvr, если честно - согласен Но только в ответ на такую-же придирку: Не вижу причин здесь писать А вот так как раз и не нужно!, из-за того что там не введена буква W в конце функции. Если пишецца юникодное приложение, которое никогда не будет компилицца в неюникодном, писать после каждой функции букву W - мазохизм. если бы хоть к wchar_t придрался, я бы и то понял Добавлено @ 23:29 А вот на неконстантный указатель - можно с полной уверенностью сказать: А вот так как раз и не нужно! (причем уже без каких=либо придирок.) Это сообщение отредактировал(а) volatile - 17.6.2013, 00:16 |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Причина есть, и весьма веская. Уж если используется явно UNICODE версия строк (wchar_t и L""), то следует так же явно использовать UNICODE версию API, т.е. дописать W к именам функций.
Проблема в том, что на сорцы этого приложения будут смотреть не только вы. Собственно из за того, что из таких сорцов кто то надергает строчек и попытается вставить в свой проект, и появляются перлы типа SetWindowText(hwnd, (LPWSTR)stroka);, а потом вопли на всех форумах - "Взял код из работающего проекта, а он не работает! Ну кто так пишет !!!!" Так что писать
|
||||||
|
|||||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
xvr, спорное утверждение. Сорцы идут вместе с проектом, где есть свойство (UNICODE) или этого свойства нет. Вы предлагаете полностью игнорировать эту фичу IDE/компилятора. От нее уже ничего не зависит =) т.е. фактически берете на себя ненужную/лишнюю работу, которую мог бы выполнить компилятор.
Ну здесь пожалуй соглашусь, но ориентировацца на это врядли стоит. да и потом, даже если так. Ничего страшного не произойдет. Код просто не будет компилировацца, с точным и недвусмысленным указанием ошибок. Что вполне таки нормально. (В отличии от багов компилируемых без единой ошибки, о которых я писал выше Это сообщение отредактировал(а) volatile - 17.6.2013, 15:17 |
||||
|
|||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Те, кто знает об этом свойстве в пропертях проекта, обычно не испытывает никаких проблем с UNICODE/ANSI проектами.
Увы, ошибки он указывает точно, но вот первопричину их очень часто ищут не там. Иначе не было бы такого количества соответствующих воплей в разделе для начинающих Отнюдь. К сожалению нет никакого контроля на уровне сорцов включена эта 'фича' или нет (ругань компилятора при неправильной установки фичи не является таким контролем, так как он ругается на совершенно другое, и что бы соотнести это 'другое' с настройкой в проекте, требуются некоторые познания) |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
xvr, если не ошибаюсь, вы как-то говорили что у вас есть неюникодные проекты
Если есть с WinApi, ответьте честно: Вы в них всегда пишете исключительно SetWindowTextA () ? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
я и не сомневался. мазохистов на свете не так много. Да собственно, я тоже не писал какой-то "сверх эталонный образец" для подражания Просто, исправил грубые ошибки ТС. [в сторону] Никогда не знаешь на что тут набросяцца, честное слово. Добавлено через 54 секунды да, и GremlinProg, прошу извинить, если обидел. Не держите зла. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Это сообщение отредактировал(а) GremlinProg - 20.6.2013, 09:48 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Да ладно тебе, GremlinProg. Ребята так интеллигентно спорили. А что из-за ерунды зацепились, ну так мало ли... Все бы так время убивали.
-------------------- ... |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |