Всем привет!
Подскажите, чем процесс отличается от приложения? Например, есть окна, у которых id процесса одинаков, а hinstance application разный. Активное окно в этом случае относится к приложению или к процессу. Если к приложению, то у процессса может быть два активных окна?
> Подскажите, чем процесс отличается от приложения? >
Процесс — контейнер потоков (и не только), которые и выполняют всю работу, а приложение я для себя воспринимаю, как программу вцелом!!!
> Например, есть окна, у которых id процесса одинаков, а hinstance > application разный. >
Ну например одно окно создаётся в WinMain, а второе в DLL'ке!!!
> Активное окно в этом случае относится к приложению или к процессу. >
Вообще-то к потоку!!!
> Если к приложению, то у процессса может быть два активных окна? >
А что ты понимаешь под активным окном?
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Здравствуйте, Stanky, Вы писали:
>> Если к приложению, то у процессса может быть два активных окна? >> S>А что ты понимаешь под активным окном?
Если по справочной системе(Win32 programmer's reference), то активное окно — это "top-level window of the application". И далее: "Only one top-level window in the system is active at a time". Так же говориться, что признаком активного окна является его выделенный заголовок и нажатая кнопка в таскбаре. Если запустить Excel, то можно увидеть, что признаками активного обладают как минимум два окна — одно окно в MDI, другое (скрытое) отображает себя на таскбаре, эмулируя SDI интерфейс для MDI окон Excel. Оба этих окна по признакам активны. Через WinSight видно, что эти окна принадлежат одному процессу, только hinstance application разный, т.к. одно принадлежит модулю excel.exe, другое mso.dll. Хочется добиться такого же эффекта для эмуляции SDI интерфейса, но как сделать оба окна активными, не ясно. Но в Excel же это сделали, или это мираж?
> Так же говориться, что признаком активного окна является его выделенный заголовок и > нажатая кнопка в таскбаре. >
Ну заголовок мы и сами можем нарисовать!!!
> Если запустить Excel, то можно увидеть, что признаками активного обладают > как минимум два окна — одно окно в MDI, другое (скрытое) отображает себя на > таскбаре, эмулируя SDI интерфейс для MDI окон Excel. >
На самом деле окно не скрыто, а просто не разварачивается и происходит какраз-таки эмуляция не SDI, а MDI (причём не самая лучшая на мой взгляд) — окна в Excel'е являются дочерними от "главного", как мне кажется с собственной прорисовкой заголовка!!!
> Хочется добиться такого же эффекта для эмуляции SDI интерфейса, но как сделать оба окна активными, не > ясно. >
Создаёшь главное, затем дочерние от него со стилем
и напоследок для каждого дочернего создаёшь минимизированную "заглушку", которая реагирует на WM_SYSCOMMAND/SC_RESTORE (и наверное не только), делая нужные действия по "активации" дочерних окон, а сама она при этом так и остаётся минимизированной!!!
> Но в Excel же это сделали, или это мираж? >
Это надувательство (как мне кажется)!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Здравствуйте, Stanky, Вы писали:
S>Ну заголовок мы и сами можем нарисовать!!!
Об этом я не подумал.
S>На самом деле окно не скрыто, а просто не разварачивается и происходит какраз-таки эмуляция не SDI, а MDI (причём не самая лучшая на мой взгляд) — окна в Excel'е являются дочерними от "главного", как мне кажется с собственной прорисовкой заголовка!!!
А есть примеры более лучшей эмуляции?
S>и напоследок для каждого дочернего создаёшь минимизированную "заглушку", которая реагирует на WM_SYSCOMMAND/SC_RESTORE (и наверное не только), делая нужные действия по "активации" дочерних окон, а сама она при этом так и остаётся минимизированной!!!
Я это пробывал. Пока активна "заглушка", я могу отрисовать главное и дочернее окно(их заголовки), что, якобы они активны. Но как только фокус ввода попадает на главное или дочернее окно, то "заглушка" перестает быть активной и на таскбаре соответсвующая кнопка отжимается. Или они и кнопку на таскбаре сами рисуют нажатой?! Не похоже на это, иначе, действительно, надувательство...
> А есть примеры более лучшей эмуляции? >
Не знаю!!!
> Я это пробывал. Пока активна "заглушка", я могу отрисовать главное и > дочернее окно(их заголовки), что, якобы они активны. Но как только > фокус ввода попадает на главное или дочернее окно, то "заглушка" > перестает быть активной и на таскбаре соответсвующая кнопка отжимается. >
Ну что я могу сказать, пилите Шура, пилите...
> Или они и кнопку на таскбаре сами рисуют нажатой?! >
А вот этого они точно не делают!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Здравствуйте, zmi, Вы писали:
zmi>Всем привет! zmi>Подскажите, чем процесс отличается от приложения?
Пока оно на диске, оно приложение. А как запустится, так и появится процесс. В общем, почти по Фонвизину — та дверь, которая висит, уже прилагательное, а если не висит, то еще существительное
>Например, есть окна, у которых id процесса одинаков, а hinstance application разный.
Не может такого быть. У процесса есть idProcess. Он уникален в Windows на данный момент. Этот процесс имеет свой базовый адрес загрузки EXE — т.е. hInstance. Так что разными они быть не могут.
Но Stanky прав — быть может, ты имеешь в виду базовый адрес модуля, создавшего окно ? Тогда да, может. Но это не hInstance.
> Активное окно в этом случае относится к приложению или к процессу.
Активное окно относится к потоку. Процесс может иметь несколько потоков, каждый из них может иметь активное окно. То окно, которое сейчас имеет синий заголовок — активное окно потока, имеющего окно на переднем плане
Если к приложению, то у процессса может быть два активных окна?
Может, если у него несколько потоков.
Каждый поток может иметь одно и только одно
1. Активное окно
2. Окно в фокусе
3. Окно, захватившее мышь.
Эти свойства являются "потенциальными". Если активное окно данного потока сейчас не на переднем плане, то это лишь потенциальные состояния. Когда активное окно этого потока вылезет на передний план, эти потенциальные состояния станут реальными, а у прежнего потока — потенциальными.
В принципе, мне удалось добиться такого поведения, как в Excel. Есть главное окно(WS_EX_TOOLWINDOW — в таскбаре его нет), есть его минимизированный двойник, который в таскбаре виден. Все работает: фокус ввода на главном окне, и в таскбаре кнопка нажата. Осталось доработка напильником — обработать minmize-maximize, activate и пр. Так что буду пилить дальше