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

RusFAQ.ru: Win API


Информационный Канал Subscribe.Ru

RusFAQ.ru: Win API

Выпуск № 093
от 28.09.2004, 19:20

Администратор:
Имя: Калашников О. А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 262
Отправлено ответов: 337
Активность: 128.6 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]

ВНИМАНИЕ!
9 октября 2004 года в 17:00 (суббота) состоится встреча экспертов и подписчиков из Москвы и Области.
С собой иметь некоторое количество денежных знаков в разумных пределах для рюмочно-закусочного заведения.
Всем желающим принять участие в данном мероприятии просьба писать администратору по адресу: adm@rusfaq.ru или сбросить СМС-сообщение на номер +7-926-535-23-31, где сообщить Ваше имя и намерение присутствовать на встрече.
Место встречи будет сообщено дополнительно в начале октября персонально каждому, кто решит принять участие в тусоffке (по почте или СМС-кой соответственно).
Приглашаются все желающие!



 Список экспертов, ответы которых опубликованы в данном выпуске

Василевский Александр
Статус: Доверительный
Общий рейтинг: 113.97
[Подробней >>]
Александр Чуранов
Статус: Доверительный
Общий рейтинг: 136.45
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 258. Начал изучать ассемблер под winNT, по туториалу ICZelion`a скачанного с www.wasm.ru остановился на у... (ответов: 2)
Вопрос № 259. К вопросу №256(про проверялку): если програма не завершилась за отведённое ей определённое время, то... (ответов: 1)

Вопросов: 2, ответов: 3


 Вопрос № 258

Начал изучать ассемблер под winNT, по туториалу ICZelion`a скачанного с www.wasm.ru остановился на уроке 4.
Возникли вопросы:
1.Я понимаю что делает функция CreateWindowEx, но как она это делает? Тонкости?
2.Из урока 4 прочитал про контекст устройства, но там сказано, что это структура и на это вся информация! :(
Что точнее это понятие подразумевает?
С уважением Злое Прерывание



Вопрос отправлен: 23.09.2004, 13:25
Отправитель: EvilsInterrupt (int20h@yandex.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Василевский Александр

Доброе время суток, EvilsInterrupt!
1. Функция CreateWindowEx
Вы хотите знать как работает эта функция. Это нигде не расписано. Могу предложить только свои наблюдения и соображения.
0. Функция проверяет все параметры (класс окна, заголовок, дескриптор приложения ...)
1. Функция ищет указанный класс окна.
2. Создаётся внутренняя структура Windows, содержащая всю информацию об окне. Эта структура запоняется такими значениями как: иконка, меню, курсор, имя класса, заголовок, стили ...
3. Окну посылается сообщение WM_NCCREATE. При этом сообщении окно получает такие-же параметры, как и при сообщении WM_CREATE. Если окно в ответ на это сообщение возвращает FALSE (0), то CreateWindowEx возвращает NULL (0) - окно создать не удалось.
4. Окну посылается сообщение WM_GETMINMAXINFO. Этим сообщением передаётся адрес на структуру MINMAXINFO:
MINMAXINFO STRUCT
ptReserved POINT <>
ptMaxSize POINT <>
ptMaxPosition POINT <>
ptMinTrackSize POINT <>
ptMaxTrackSize POINT <>
MINMAXINFO ENDS
POINT STRUCT
x DD ?
y DD ?
POINT ENDS
Поля структуры MINMAXINFO:
ptReserved
зарезервировано
ptMaxSize
размеры (ширина и высота) максимизированного окна
ptMaxPosition
максимальная позиция левой и верхней границ окна в максимизированном состоянии
ptMinTrackSize
минимальные размеры окна
ptMaxTrackSize
максимальные размеры окна
Программа может изменять размеры как её вздумается. Поставив, например, ptMinTrackSize=ptMaxTrackSize можно запретить изменение размеров окна
5. Окну посылается сообщение WM_CREATE. Оно имеет один параметр - указатель на структуру CREATESTRUCT:
CREATESTRUCT STRUCT
lpCreateParams DD ? ; указатель на пользовательские данные
hInstance DD ? ; дескриптор приложения
hMenu DD ? ; д ескриптор меню
hwndParent DD ? ; дескриптор родительского окна
cy DD ? ; высота окна
cx DD ? ; ширина окна
y DD ? ; позиция окна по вертикали
x DD ? ; позиция окна по горизонтали
style DD ? ; стиль окна
lpszName DD ? ; заголовок
lpszClass DD ? ; имя класса
dwExStyle DD ? ; расширенный стиль
CREATESTRUCT ENDS
Эта структура содержит все параметры, переданные функции CreateWindowEx. Наиболее интересный параметр - lpCreateParams. Он является последним в функции CreateWindowEx. Через него можно передать какие-либо данные окну. При обработке этого сообщения окно может вернуть значение -1, если произошла какая-либо ошибка. При этом процесс создания окна остановится.
6. Функция возвращает дескриптор окна. Еси во время выполнения функции произошли ошибки (недопустимые параметры, WM_NCCREAT E вернуло FALSE (0), WM_CREATE вернуло -1, или произошло ещё что-нибудь), функция возвращает NULL (0), указывая на ошибку.
Более подробно об этой функции можно было бы узнать из исходников системы. Но их увы нет:).
2. Контекст устройства
Вообще, все дескрипторы (HANDLE) на самом деле являются указателями на внутренние структуры данных Windows. Все эти структуры лежат в памяти, защищённой не только от записи, но и от чтения. Доступ к этой памяти имеет лишь система и программы с нулевым приоритетом. Эти программы - различного рода драйвера. Пользовательская программа при попытке доступа к этим структурам будет принудительно завершена. Таким образом, для доступа к этим структурам необходимо писать драйвер. Но для большинства дескрипторов есть GET-функции, возвращающие необходимую информацию.
Для контекста устрйоства можно воспользоваться следующими функциями:
GetObject, GetDCEx, GetDCOrgEx и другими. Более подробно о них можно посмотреть в справочни ках по WinAPI.


Ответ отправлен: 23.09.2004, 14:21
Отправитель: Василевский Александр


Отвечает Александр Чуранов

Приветствую Вас, EvilsInterrupt!
  • В ОС "Виндовс" на экране могут присутствовать окна. Для создания и отображения окна программа должна сообщить ОСе о намерении создать окно и, затем, попросить начать показывать окно. Функция CreateWindowsEx() создаёт в недрах ОС структуру окна и копирует туда информацию о будущем окне.
  • Контекстом устройства называют структуру, хранящую информацию об графических объектах (кисть, перо, шрифт), их атрибутах (толщина, цвет) и режимах, которые влияют на графический вывод программы. То есть если необходимо на экране что-либо нарисовать, то всем функциям рисования передаётся указатель на конекст устройства в качестве параметра. Это делается для того, чтобы функции рисования могли узнать, как и где им рисовать (каким цветом, толщиной и т.п.). Благодаря использованию контекстов устройств уменьшается количество параметров, передаваемых функциям рисования, а также приводится к одной форме графический вывод на различные устройства. То есть под виндой всё равно, рисовать в окне или на принтере.



Ответ отправлен: 26.09.2004, 11:01
Отправитель: Александр Чуранов


 Вопрос № 259

К вопросу №256(про проверялку): если програма не завершилась за отведённое ей определённое время, то её надо завершить из вызывающей её програмы. Просьба не копировать кусок хелпа мне - что надо, сам найду, а остальное уже просмотрел. Моя проверялка должна компилировать(с этим проблем нет) решение и запускать её. Если делаю {CreateProcess(...); waitforsingleProcess(..); TerminateProcess(pinf.hprocess, 0)} то оно работает (неточно +-700мс), и после запуска порядка 150 раз "Система не может найти указанный файл", желательно от этого избавиться.



Вопрос отправлен: 23.09.2004, 14:22
Отправитель: Valera

[Следующий вопрос >>] [Список вопросов]

Отвечает Александр Чуранов

Здравствуйте, Valera!
  • Насчёт неточности: использовали ли вы GetProcessTimes(), как советовал эксперт?
  • Насчёт прерывания работы: TerminateProcess() - самый надёжный способ.
  • Насчёт "Система не может найти указанный файл", желательно от этого избавиться - у Вас ошибка в программе. Исправьте ошибку и избавитесь.



Ответ отправлен: 26.09.2004, 23:54
Отправитель: Александр Чуранов



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (23)
C / C++ (17)
Perl (7)
Builder / Delphi (15)
Pascal (20)
Basic / VBA (7)
Java / JavaScript (6)
PHP (17)
Криптография (7)
WinAPI (13)
Радиоэлектроника (14)
Пользователю
Windows 95/98/Me (49)
Windows NT/2000/XP (67)
"Железо" (42)
Поиск информации (24)
Администратору
Windows NT/2000/XP (45)
Linux / Unix (20)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (6)
КоАП (4)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2004 Россия, Москва. Идея, дизайн, программирование: Калашников О.А. ICQ: 68951340
При перепечатке материалов ссылка на данный сайт обязательна!

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.winapifaq
Отписаться

В избранное