| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Не выделяется текст в контроле EDITTEXT |
| Автор: Riddik 5.6.2013, 14:00 | ||
| Нужно при щелчке по EDITTEXT выделить весь текст в нём. В обработке WM_COMMAND ждёт фокуса по контролу:
Но эффекта нет - текст не выделяется. Где ошибка? |
| Автор: feodorv 5.6.2013, 18:12 |
| Несколько вопросов. До SendDlgItemMessageW дело вообще доходит (не пробовали MessageBox туда засунуть)? У Вас уникодовый контрол? Вы создавали диалог через CreateDialogW? |
| Автор: Earnest 6.6.2013, 07:31 |
| Попробуй заменить на Post И да, проверь, что условие выполняется, поскольку непонятно, откуда ты берешь codeNotify |
| Автор: feodorv 6.6.2013, 11:36 |
Заменить SendDlgItemMessageW на PostMessageW( GetDlgItem( hwnd, ID_TAT_SIZE_WIDTH), ...). PS Что есть ID_EDIT??? |
| Автор: Riddik 6.6.2013, 15:50 | ||
Спасибо, теперь работает) id контрола, сперва изменил для форума. |
| Автор: Dem_max 7.6.2013, 04:31 | ||
| Не надо везде писать так SendDlgItemMessageW !!! нужно везде писать так SendDlgItemMessage как и все остальные WinAPI функции !!! И еще не нужно писать так !!!
и тому подобную галиматью Я думаю часть ошибок отпадет или компилятор сругнется показывая на ошибки. |
| Автор: Riddik 13.6.2013, 16:46 | ||||
Почему? Если приложение unicode, всё равно все ф-ии заменяться на W?
А как нужно, поясни, плийз? |
| Автор: volatile 13.6.2013, 17:39 | ||
Иначе ошибка. Вообще чем меньше приведений тем лучче. |
| Автор: GremlinProg 13.6.2013, 21:36 | ||||||||||
А вот так как раз и не нужно! Правильных-то по сути только 3 варианта: 1.
2.
3.
|
| Автор: volatile 13.6.2013, 23:24 | ||
Если уж ставить все точки над i, среди трёх ваших вариантов нет ни одного правильного. Грубейшее нарушение стандарта. Многие компиляторы вообще не обязаны это компилить. |
| Автор: GremlinProg 14.6.2013, 07:25 | ||
по всей видимости, это нарушение персонального стандарта volatile )) |
| Автор: Dem_max 14.6.2013, 17:14 | ||
какого стандарта ??? |
| Автор: volatile 15.6.2013, 03:40 | ||||||
Неявное приведение к неконстантному указателю константной строки. Запись по таким указателям, кстати только студия позволяет. (причем позволяет - не значит что это нормально так делать, даже в студии) gcc же вообще вывалицца с сегфолтом. (и правильно сделает!) А кто помешает записать по неконстантному указателю? Сие есть источник самых мерзопакостных багов. (те которые компиляцца без единой ошибки, а потом когда-то начинают вытворять черт знает что). <удалено> Вчера немного был не в духе. грубовато написал, прошу прощения. В общем, константную строку всегда нужно присваивать константному указателю
А если нужен не константный указатель, то
|
| Автор: xvr 16.6.2013, 12:21 | ||
А кто тут по ним пишет?
В принципе да, но стандарт С++ в части присваивания именно строковых литералов в именно char* указатель сделал некоторое послабление. Для любых других указателей запись const версии в не-const указатель является ошибкой времени компиляции. Если бы то же самое сделали и для строк, то перестало компилится бы процентов 90 старого кода gcc кстати на такие присваивания дает варнинг PS. В данном случае речь шла о правильном написании программы для UNICODEа и не UNICODEа, а не о константности указателей. Замечание на отсутствие const выглядит придиркой. Давайте тогда уж критиковать и имя переменной - должна быть не stroka, а string. |
| Автор: volatile 16.6.2013, 23:26 | ||||||
xvr, если честно - согласен Но только в ответ на такую-же придирку:
Не вижу причин здесь писать А вот так как раз и не нужно!, из-за того что там не введена буква W в конце функции. Если пишецца юникодное приложение, которое никогда не будет компилицца в неюникодном, писать после каждой функции букву W - мазохизм. если бы хоть к wchar_t придрался, я бы и то понял Добавлено @ 23:29 А вот на неконстантный указатель - можно с полной уверенностью сказать: А вот так как раз и не нужно! (причем уже без каких=либо придирок.) |
| Автор: xvr 17.6.2013, 12:19 | ||||||
Причина есть, и весьма веская. Уж если используется явно UNICODE версия строк (wchar_t и L""), то следует так же явно использовать UNICODE версию API, т.е. дописать W к именам функций.
Проблема в том, что на сорцы этого приложения будут смотреть не только вы. Собственно из за того, что из таких сорцов кто то надергает строчек и попытается вставить в свой проект, и появляются перлы типа SetWindowText(hwnd, (LPWSTR)stroka);, а потом вопли на всех форумах - "Взял код из работающего проекта, а он не работает! Ну кто так пишет !!!!" Так что писать
|
| Автор: volatile 17.6.2013, 15:08 | ||||
xvr, спорное утверждение. Сорцы идут вместе с проектом, где есть свойство (UNICODE) или этого свойства нет. Вы предлагаете полностью игнорировать эту фичу IDE/компилятора. От нее уже ничего не зависит =) т.е. фактически берете на себя ненужную/лишнюю работу, которую мог бы выполнить компилятор.
Ну здесь пожалуй соглашусь, но ориентировацца на это врядли стоит. да и потом, даже если так. Ничего страшного не произойдет. Код просто не будет компилировацца, с точным и недвусмысленным указанием ошибок. Что вполне таки нормально. (В отличии от багов компилируемых без единой ошибки, о которых я писал выше |
| Автор: xvr 17.6.2013, 20:19 | ||||
Те, кто знает об этом свойстве в пропертях проекта, обычно не испытывает никаких проблем с UNICODE/ANSI проектами.
Увы, ошибки он указывает точно, но вот первопричину их очень часто ищут не там. Иначе не было бы такого количества соответствующих воплей в разделе для начинающих Отнюдь. К сожалению нет никакого контроля на уровне сорцов включена эта 'фича' или нет (ругань компилятора при неправильной установки фичи не является таким контролем, так как он ругается на совершенно другое, и что бы соотнести это 'другое' с настройкой в проекте, требуются некоторые познания) |
| Автор: volatile 18.6.2013, 06:19 |
| xvr, если не ошибаюсь, вы как-то говорили что у вас есть неюникодные проекты Если есть с WinApi, ответьте честно: Вы в них всегда пишете исключительно SetWindowTextA () ? |
| Автор: xvr 18.6.2013, 08:23 |
Честно - не пишу. Но другим советовать это я бы не стал |
| Автор: volatile 18.6.2013, 19:59 |
я и не сомневался. мазохистов на свете не так много. Да собственно, я тоже не писал какой-то "сверх эталонный образец" для подражания Просто, исправил грубые ошибки ТС. [в сторону] Никогда не знаешь на что тут набросяцца, честное слово. Добавлено через 54 секунды да, и GremlinProg, прошу извинить, если обидел. Не держите зла. |
| Автор: GremlinProg 19.6.2013, 08:32 | ||
|
| Автор: Earnest 20.6.2013, 05:05 |
| Да ладно тебе, GremlinProg. Ребята так интеллигентно спорили. А что из-за ерунды зацепились, ну так мало ли... Все бы так время убивали. |