Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 262
от 23.06.2006, 18:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 344, Экспертов: 31
В номере:Вопросов: 3, Ответов: 6


Вопрос № 46544: Добрый вечер уважаемые експерты. Начну с примера: ... char ch= char(192); TextOut(GetDC(hwnd),20,20,&ch,1); ... Эти строки позволят вывести в рабочую область окна символ с ASCII-кодом 192 (буква "А"). Как вывести эту...
Вопрос № 46577: Доброе время суток, эсперты. Буду ссылаться на вопрос номер 45546 Скажу вам, братцы что я в конец запутался. Попробую объяснить поподробней.1) Не могу понять что такое hinstance - в документации написано, что это хэндле. Чёт я запутался. Как я ...
Вопрос № 46578: Привет эксперты. Буду ссылаться на следующий номер вопроса - 45548 Ниже приведена программа на APi. Помогите разобраться в деталях. Если исп. расширнный стиль окна то в нём есть доп. строка hIconSm. Так вот, если от неё отказаться то будет ис...

Вопрос № 46.544
Добрый вечер уважаемые експерты.
Начну с примера:
...
char ch= char(192);
TextOut(GetDC(hwnd),20,20,&ch,1);
...
Эти строки позволят вывести в рабочую область окна символ с ASCII-кодом 192 (буква "А"). Как вывести эту же букву используя Юникод? Вообще задача состоит в том, чтобы вывести на экран определенные символы греческого алфавита (в частности буквы альфа, мю, кси и т.д.), а также символы отображенные в виде степеня. Все это необходимо для представления математических выражений. Никак не пойму чем это может быть достигнуто.
Заранее благодарен за любую информацию.
PS Пишу в Visual C++ 6.0.
Отправлен: 17.06.2006, 23:16
Вопрос задал: Юра (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: gitter
Здравствуйте, Юра!
Необходимо в этом случае работать с типом TCHAR
вот, примерно, так:
TCHAR txt[] = {0x00e4, 0x0020, 0x0442, 0x0435, 0x0441, 0x0442, 0x0020, 0xfa2d, 0x00d6, 0x0020, 0x0398, 0};
pDC->TextOut(100,100,txt);

Предварительно выбрав нужный Вам шрифт.

PS http://lib.csu.ru/dl/bases/prg/frolov/articles/mirpk/11.98/index.htm - статья по этому поводу

Удачи!
Ответ отправил: gitter (статус: 9-ый класс)
Ответ отправлен: 18.06.2006, 02:38


Вопрос № 46.577
Доброе время суток, эсперты. Буду ссылаться на вопрос номер 45546
Скажу вам, братцы что я в конец запутался. Попробую объяснить поподробней.1) Не могу понять что такое hinstance - в документации написано, что это хэндле. Чёт я запутался. Как я понимаю хэндл это то с помощью чего мы можем управлять окном. Так вот, при создании окна CreateWindowsEx - создаёт тоже хэндл. А использую функцию FindWindow - мы находим хэндл. Хэндл чего? CreateWindow или этот самый hinstance. Не совснем понятно. Что этим хэндлом(hinstance) мы можем управлять?
2) Когда подставляем hinstance=0, это подразумевает каждый раз он будет уникальным или нет?
3) Как в дельфи получить это значение, ведь в си он передаётся через главную функцию.
4) Мож. его стоит вообще оставлять пустым или это очень важный параметр?
Плиз, ответьте попунктно, хочу разобраться.
Отправлен: 18.06.2006, 16:30
Вопрос задал: Александр Михайлович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: estiGi
Здравствуйте, Александр Михайлович!
ты запутался немного в другом.
HINSTANCE - это уникальный дескриптор приложения. HWND - это дескриптор окна. Почуствуйте разницу :) Еще есть HANDLE - тоже дескриптор, но обычно открытого потока или еще чего то открытого, например, процесса, файла и еще до фига чего.
Само собой, что создавая окно CreateWindows, то получаешь дескриптор окна HWND. Когда тебе нужны ресурсы - ты передаешь HINSTANCE, чтобы система знала, из какого бинарника их тащить. Иногда HINSTANCE легко заменяется дескриптором загруженной библиотеки HMODULE.
2. Если ты передаешь куда то HINSTANCE как 0, то обычно это означает дескриптор текущего приложения
3. хз
4. эт зависит от того, где используешь :)
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 18.06.2006, 16:49

Отвечает: mix_mix
Здравствуйте, Александр Михайлович!
1) По сути дела hWnd - указатель на запись в таблице дескрипторов данного приложения, hWnd - дескриптор окна (ну это уже было), hInstance - указатель на начало PE в памяти, тоесть если вывести MessageBox с адресом строки равной hInstance, то мы увидим "MZ", если открыть PE (*.exe) в hex-редакторе, то можно увидеть в начале файла символы MZ (а далее 2 нулевых символа).
2) Не буду повторяться
3) var a: DWORD; ... a:=hInstance; ... Вот и все.
4) Не, не надо. Тогда класс будет привязан к конкретному приложению
Ответ отправил: mix_mix (статус: 4-ый класс)
Ответ отправлен: 18.06.2006, 17:42

Отвечает: Melamed
Здравствуйте, Александр Михайлович

Уточняя предыдушие ответы по 2 вопросу хочу заметить что если hInstance = 0, то грузится системный ресурс, например, чтобы загрузить стандартный курсос ввиде стрелки, достаточl 5;о написать
hCur = LoadCursor(0 /* = NULL в C++ */,IDC_ARROW);
Ответ отправил: Melamed (статус: 1-ый класс)
Ответ отправлен: 18.06.2006, 19:22

Отвечает: Vest
Здравствуйте, Александр Михайлович!
1) в помощи Win32 SDK написано:
В главе: Instance Handle
Every window class requires an instance handle to identify the application or DLL that registered the class. As a multitasking system, Windows lets several applications or DLLs run at the same time, so it requires instance handles to keep track of all of them. Windows assigns a handle to each copy of a running application or DLL.

Multiple instances of the same application or DLL all use the same code segment, but each has its own data segment. Windows uses an instance handle to identify the data segment that corresponds to a particular instance of an application or DLL.
Windows passes an instance handle to an application or DLL when the application starts. The application or DLL assigns this instance handle to the class by copying it to the hInstance member of the WNDCLASSEX structure.

В кратце - hInstance - это хендл приложения, а HWND - окна, приложение одно, а окон - много
2) Честно, я немного не понял этой фразы, обычно hInstance делается глобальной переменной (одной) и всё, далее присваивается после функции WinMain, и используется во всём теле программы
3) можно использовать функцию: GetModuleHandle()
4) Насчёт этого не уверен, что можно оставлять пустым, т.к. в помощи по WNDCLASSEX сказано что: hInstance - Identifies the instance that the window procedure of this class is within.
Т.е. раз ноль, то такой процедуры по этому адресу может и не быть

Приложение:

---------
Халявы не бывает

Ответ отправил: Vest (статус: 3-ий класс)
Ответ отправлен: 20.06.2006, 14:28


Вопрос № 46.578
Привет эксперты. Буду ссылаться на следующий номер вопроса - 45548
Ниже приведена программа на APi. Помогите разобраться в деталях.
Если исп. расширнный стиль окна то в нём есть доп. строка hIconSm. Так вот, если от неё отказаться то будет исп иконка из windowclass.hIcon:= LoadIcon(0,IDI_HAND); , а если заполнить hIconSm, то будет исп. именно она , а не просто hIcon. Чёт я не вижу разницы что использовать, но ведь она для чего -то введена. Непонятно для чего нужна тогда hIconSm.
2) Приведите плиз пример загрузки другой иконки, не из стандартных.
Спасибо.

Приложение:

Отправлен: 18.06.2006, 16:40
Вопрос задал: Александр Михайлович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vest
Здравствуйте, Александр Михайлович!
Согласно помощи если hIconSm оставить NULL, то тогда Windows автоматически именяет размер иконки согласно hIcon. Не факт, что он изменит размер удовлетворительно...
---------
Халявы не бывает
Ответ отправил: Vest (статус: 3-ий класс)
Ответ отправлен: 20.06.2006, 15:27


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное