Закройте OleCreatePropertyFrame извне - PullRequest
1 голос
/ 08 мая 2020

Я использую OleCreatePropertyFrame для отображения страниц свойств веб-камеры. Но мне не удалось сделать диалоговое окно модальным или закрыть внешнюю рамку при закрытии камеры.

OleCreatePropertyFrame(
        NULL,                   // Parent window
        0, 0,                   // Reserved
        lpcostr,     // Caption for the dialog box
        1,                      // Number of objects (just the filter)
        &pFilterUnk,            // Array of object pointers.
        caGUID.cElems,          // Number of property pages
        caGUID.pElems,          // Array of property page CLSIDs
        0,                      // Locale identifier
        0, NULL                 // Reserved
    );

Любая помощь приветствуется.

1 Ответ

1 голос
/ 08 мая 2020

OleCreatePropertyFrame - стандартный API для модального диалогового окна, означающий, что предполагается, что окно сообщения отображается, пока не будет закрыто в интерактивном режиме. То есть вы не должны иметь возможность закрыть его из кода.

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

Один из способов сделать диалоговое окно модальным - повторно реализовать хост страницы свойств (IPropertyPage и его друзья) и поместить его в свой настраиваемый пользовательский интерфейс как немодальное окно или иным образом. В целом это вполне выполнимо и в основном требует базовых c знаний COM.

Другой [традиционный?] Трюк для закрытия стандартного модального пользовательского интерфейса извне - это PostQuitMessage во внутреннем сообщении l oop of OleCreatePropertyFrame API, так что он закрывает диалоговое окно в ответ на неинтерактивный сигнал, а затем удаляет ожидающее сообщение WM_QUIT из внешнего сообщения l oop, добавленное API после закрытия диалогового окна в попытке переадресовать команду выхода дальше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...