Форум: "Прочее";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
ВнизЗачем нужен DefWindowProcW, если есть DefWindowProcA? Найти похожие ветки
← →
Пробегал... (2008-02-08 20:34) [0]ну и собственно сабж.
← →
ketmar © (2008-02-08 20:39) [1]затем, чтобы ты не читал MSDN, а задавал тут идиотские вопросы.
---
Understanding is not required. Only obedience.
← →
Черный Шаман (2008-02-08 20:43) [2]Ты что студент, дальтоник, W от A отличить не можешь?
← →
Пробегал... (2008-02-08 20:52) [3]ketmar © (08.02.08 20:39) [1]
DefWindowProcW,
а в MSDN даже как-то не различают эти функции: http://msdn2.microsoft.com/en-us/library/ms633572(vs.85).aspx
И уж там точно не написано почему существует две реализации W и A этой функции
← →
Пробегал... (2008-02-08 20:52) [4]Черный Шаман (08.02.08 20:43) [2]
а тебе до этого вопроса еще расти надо. Не говоря уже до ответа на него.
← →
ketmar © (2008-02-08 20:54) [5]>[3] Пробегал… (2008-02-08 20:52:00)
я за тебя, что ли, буду конкретное место искать? я злой, мне за пивом идти лень.
дам хинт: CreateWindowEx тоже в двух вариантах есть. к чему бы это? а также ещё офигенное количество функций есть в A и W. зачем бы? ответь на два эти вопроса — и всё станет ясно.
---
Understanding is not required. Only obedience.
← →
ketmar © (2008-02-08 20:56) [6]и ещё полухинт: WM_CHAR, например. который несколько в разном виде поступает в A и W. но это станет очевидно, когда ответишь на два вопроса.
---
Understanding is not required. Only obedience.
← →
Черный Шаман (2008-02-08 20:56) [7]
> Пробегал... (08.02.08 20:52) [4]
>
> Черный Шаман (08.02.08 20:43) [2]
>
> а тебе до этого вопроса еще расти надо. Не говоря уже до
> ответа на него.
В message посылаемому окну(в параметрах) может быть указатель на строку, она может быть как и ansi так и unicode.
← →
Пробегал... (2008-02-08 20:58) [8]видимо, есть какие-то сообщения, wpr/lpr которых содержит указатель на структуры со строками... У меня больше предположений нет.
Но в какой кодировке посылать сообщения главной функции окна? Получается так что ли: если окно зарегистрировано с помощью RegisterClassW - то посылаются строки Wide, а если RegisterClassA - то строки Ansi?
← →
ketmar © (2008-02-08 21:00) [9]>[8] Пробегал… (2008-02-08 20:58:00)
если окно твоё — то ты знаешь. если чужое — магия поработает.
на самом деле ньюансов больше. если тебе просто для общего развития — то хватит и этого. а если надо для чего-то серьёзного, то направление поиска дано.
---
Understanding is not required. Only obedience.
← →
Пробегал... (2008-02-08 21:01) [10]ketmar © (08.02.08 20:54) [5]
а также ещё офигенное количество функций есть в A и W
ууу, ты про это. Значит, ты все таки не понял. Понятно, что на каждую A функцию есть W, но во все эти функции НЕПОСРЕДСТВЕННО передается строки, у них принимаемые параметры разные. Одни принимают Ansi, а другие Wide.
У DefWindowProc же принимаемые параметры АБСОЛЮТНО одинаковые, меня это удивило. А не наличие вообще Wide версий функций ;))))
В принципе, SendMessage тоже есть в версии W, думаю моя догадка в [8] верная.
← →
Пробегал... (2008-02-08 21:08) [11]Черный Шаман (08.02.08 20:56) [7]
В message посылаемому окну(в параметрах) может быть указатель на строку, она может быть как и ansi так и unicode.
ну да. А вот как она догадывается в какой кодировке слать сообщения главной функции окна?
И самое даже главное - если это сообщение принять в потоке при выборке - как догадаться в какой она кодировке?
← →
ketmar © (2008-02-08 21:10) [12]>[10] Пробегал… (2008-02-08 21:01:00)
нет, это ты не понял. точнее, не пожелал читать мои ответы полностью. хозяин-барин, а я уже всё сказал.
---
Understanding is not required. Only obedience.
← →
KilkennyCat © (2008-02-08 21:10) [13]Еще есть понятие совместимости.
← →
Черный Шаман (2008-02-08 21:14) [14]
> Пробегал... (08.02.08 21:08) [11]
>
> Черный Шаман (08.02.08 20:56) [7]
> В message посылаемому окну(в параметрах) может быть указатель
> на строку, она может быть как и ansi так и unicode.
>
> ну да. А вот как она догадывается в какой кодировке слать
> сообщения главной функции окна?
Оно после посылки должно конвертироваться в кодировку с которой функция зарегистрирована. Ansi чудесно перегоняется в Wide и Wide с потерями перегоняется в Ansi.
Хотя с этим шаманством - со строками передаваемыми в сообщениях я особо дела не имел.
← →
Пробегал... (2008-02-08 21:21) [15]ketmar © (08.02.08 21:10) [12]
нет, это ты не понял. точнее, не пожелал читать мои ответы полностью. хозяин-барин, а я уже всё сказал
понятно. Свободен ;)
KilkennyCat © (08.02.08 21:10) [13]
Еще есть понятие совместимости
супер грамотный комментарий ;)
Черный Шаман (08.02.08 21:14) [14]
Оно после посылки должно конвертироваться в кодировку с которой функция зарегистрирована
ты хотел сказать - в кодировку с каким окно зарегистрировано? Допустим. Я это же предполагаю.
Но если извлечь это сообщение из GetMessage - как определить кодировку? Логично, чтобы кодировка содержалась где-нибудь в параметрах. Но если бы было так - не нужно было бы две версии DefWindowProc.
Значит, судя по всему, извлекя сообщение в потоке по GetMessage кодировку точно никак не определишь.
← →
Игорь Шевченко © (2008-02-08 21:22) [16]
> Зачем нужен DefWindowProcW, если есть DefWindowProcA?
Если ты задумаешься о том, как работает SetWindowText, например, вызываемый из DefWindowProc в ответ на сообщение WM_SETTEXT, то ответ тебе будет очевиден.
← →
KilkennyCat © (2008-02-08 21:26) [17]> [15] Пробегал... (08.02.08 21:21)
>
> KilkennyCat © (08.02.08 21:10) [13]
> Еще есть понятие совместимости
>
> супер грамотный комментарий ;)
для суперглупых могу и разжевать.
← →
Пробегал... (2008-02-08 21:27) [18]Игорь Шевченко © (08.02.08 21:22) [16]
Если ты задумаешься о том, как работает SetWindowText, например, вызываемый из DefWindowProc в ответ на сообщение WM_SETTEXT, то ответ тебе будет очевиден
ооо... Вот сразу видно профи, сразу понял о чем речь ;) Да, именно над этим я и задумался. Просто нелогично как-то:WM_SETTEXT
wParam = 0; // not used; must be zero
lParam = (LPARAM)(LPCTSTR)lpsz; // address of window-text string
почему wparam not used? Ведь очень логично было бы там хранить кодировку. Тогда бы DefWindowProc сама бы разобралась с кодировкой.
Впрочем, видимо, все сделано так, потому что сделано имено так ;)
← →
Пробегал... (2008-02-08 21:30) [19]KilkennyCat © (08.02.08 21:26) [17]
для суперглупых могу и разжевать.
да уж не напрягайтесь ;) Советую даже не напрягаться вообще на форуме.
Суперглупо - действительно считать, что такой комментарий может чем-то помочь вопрошающему.
← →
ketmar © (2008-02-08 21:35) [20]Удалено модератором
← →
Пробегал... (2008-02-08 21:41) [21]Удалено модератором
← →
ketmar © (2008-02-08 21:44) [22]Удалено модератором
← →
Пробегал... (2008-02-08 21:44) [23]Игорь Шевченко © (08.02.08 21:22) [16]
Если ты задумаешься о том, как работает SetWindowText, например, вызываемый из DefWindowProc в ответ на сообщение WM_SETTEXT
так. Игорь Шевченко меня сбил с толку. Неправильно написано.
Как может SetWindowText вызываться в ответ на WM_SETTEXT, если в справке написано, что SetWindowText приводит к посылке сообщения WM_SETTEXT. Рекурсия какая-то.
← →
Пробегал... (2008-02-08 21:48) [24]Удалено модератором
← →
ketmar © (2008-02-08 21:49) [25]Удалено модератором
← →
ketmar © (2008-02-08 21:51) [26]Удалено модератором
← →
Игорь Шевченко © (2008-02-08 21:58) [27]Пробегал... (08.02.08 21:27) [18]
> почему wparam not used? Ведь очень логично было бы там хранить
> кодировку. Тогда бы DefWindowProc сама бы разобралась с
> кодировкой.
потому что он не использовался в Windows 3.1
Хорошо, возьмем WM_GETTEXT, там wParam используется. Для кодировки места не остается
← →
Игорь Шевченко © (2008-02-08 22:05) [28]Пробегал... (08.02.08 21:44) [23]
Ну InternalSetWindowText - какая разница. Главное, ты понял, что я имею в виду - то, что у сообщения есть строковые параметры, кодировка которых определяется тем, какие функции были вызваны для их посылки и обработки (A или W)
← →
Пробегал... (2008-02-08 22:16) [29]Игорь Шевченко © (08.02.08 21:58) [27]
ну в принципе логично, наследие тянется издалека...
А я правильно предположил, что если окно зарегистрировано RegisterClassA - то и все сообщения текстовые ему будут в ANSI перекодироваться, а если с помощью RegisterClassW - то соответственно unicode?
А я бы тогда ошибся. Потому что регистрирую я под NT с помощью RegisterClassW, а внутри по привычке вызывал просто DefWindowProc - и главное ведь полное соответствие параметров и соответственно никаких предупреждений.
← →
KilkennyCat © (2008-02-08 22:18) [30]Удалено модератором
← →
Пробегал... (2008-02-08 22:18) [31]и еще интересно, по какому алгоритму винда преобразует ansi в unicode? Наверное, в соответствии с локалью потока, но с локалью потока, где вызывается send/post-message или там где оно принимается?
← →
guav © (2008-02-08 22:22) [32]На самом деле всё немного более запутано, некоторые сообщения, например LVN_GETDISPINFO, имеют различные коды для A и W версий, и в Wide оконную процедуру может попасть Ansi сообщение и наоборот.
← →
Игорь Шевченко © (2008-02-08 23:04) [33]
> и еще интересно, по какому алгоритму винда преобразует ansi
> в unicode
MultiByteToWideChar и WideCharToMultiByte, в качестве кодовой страницы выступает константа CP_ACP
Сообщения будут преобразоваться перед их обработкой - то есть, перед тем, как будет вызвана та оконная процедура, которая их обрабатывает (и после обработки, если сообщение имеет выходные параметры типа строки)
> А я правильно предположил, что если окно зарегистрировано
> RegisterClassA - то и все сообщения текстовые ему будут
> в ANSI перекодироваться, а если с помощью RegisterClassW
> - то соответственно unicode?
Все зависит еще от того, как было создано окно (CreateWindowExA, CreateWindowExW).
Например, если ты создаешь окно от класса Edit вызовом CreateWindowExA (как делается в VCL), то все сообщения, обрабатываемые оконной процедурой VCL, приходят в Ansi-кодировке, а необработанные перекодируются в unicode внутри вызова DefWindowProcA в момент вызова оригинальной процедуры оконного класса Edit
← →
Сатир (2008-02-09 14:52) [34]
> Зачем нужен DefWindowProcW, если есть DefWindowProcA?
для поддержки Unicode
W- unicode
A- ansi
Вычитал у Рихтера:)
← →
ketmar © (2008-02-09 15:01) [35]>[34] Сатир (2008-02-09 14:52:00)
там интересных вещей больше, на самом деле. %-)
я когда-то ковырялся, мог бы рассказать, если бы кое-кто не полез в анал. а так — лениво вспоминать.
---
Understanding is not required. Only obedience.
← →
Сатир (2008-02-09 15:03) [36]
> там интересных вещей больше, на самом деле. %-)
согласен, но сам особо не вникал, поскольку писать на винапи не было нужды.
но для общего развития тоже ничего, в смысле, книжка Рихтера ничего.
← →
ketmar © (2008-02-09 15:08) [37]>[36] Сатир (2008-02-09 15:03:00)
>книжка Рихтера ничего
фигасе «ничего»… O_o
---
Understanding is not required. Only obedience.
← →
Сатир (2008-02-09 15:10) [38]
> фигасе «ничего»… O_o
ладно-ладно, зачётная книжка, сдаюсь:)
сейчас по дотнету Рихтера читаю, тоже интересно.
← →
begin...end © (2008-02-09 15:17) [39]У меня, типа, оффтопик... А что за интересная тенденция смены ников? Семёнычи тут всякие, Пробегающие...
← →
KilkennyCat © (2008-02-09 15:23) [40]> begin...end © (09.02.08 15:17)
а это в целях безопасности. вдруг, глупость сморозят.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.009 c