Как оставить родительское окно дочернего окна (принадлежащее a.k.a. окну) активным с winapi? - PullRequest
3 голосов
/ 02 сентября 2011

Я пишу небольшое приложение на C, используя winapi. Там у меня есть окно с дочерним окном (набор инструментов). Я могу держать его в этом окне и т. Д., Но мой вопрос: как сохранить активное главное окно, если дочернее окно становится сфокусированным?

Главное окно в этот момент становится серым.

Окна создаются:

hMainWindow = DialogBoxParam(.......);
hChildWindow = CreateDialogParam(..., hMainWindow, ...); 
ShowWindow (hChildWindow, SW_SHOW);

Вот небольшое изображение поведения двух окон:

The behaviour of the windows

Ответы [ 3 ]

3 голосов
/ 03 сентября 2011

Я обнаружил, что простое создание его как WS_CHILD и явное НЕ как WS_POPUP решают это.Он также превращает абсолютные координаты окна в относительные, так что мне больше не нужно заботиться о положении окна, перемещая родительское окно.

// Solved

1 голос
/ 02 сентября 2011

Извините, так работает Windows: по одному активному окну за раз.

Вы можете увидеть это в Visual Studio, если откроете Find and Replace в качестве окна инструмента, вы увидите, что оностановится активным, и главное окно VS становится неактивным.

Попытка активировать их одновременно может привести к путанице среди пользователей и таких инструментов доступа, как программы чтения с экрана.

1 голос
/ 02 сентября 2011

Создайте дочернее окно как немодальное диалоговое окно вместо модального. Поэтому вместо использования DialogBox используйте CreateDialog

...