从外部关闭 OleCreatePropertyFrame

Close OleCreatePropertyFrame externally

我正在使用 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
    );

感谢任何帮助。

OleCreatePropertyFrame 是模态对话框的标准 API,这意味着消息框会一直显示到交互式关闭。也就是说,您不应该能够从代码中关闭它。

This function always creates a modal dialog box and does not return until the dialog box is closed.

使对话框成为模态的方法之一是重新实现 属性 页面宿主(IPropertyPage 和朋友)并将其作为无模态 UI 放入您的自定义 UI =27=] 或其他。总体来说还算可以,主要是希望有COM基础知识。

从外部关闭标准模式 UI 的另一个 [传统?] 技巧是 PostQuitMessage 进入 OleCreatePropertyFrame API 的内部消息循环,以便关闭对话框响应非交互式信号的框,然后从外部消息循环中删除挂起的 WM_QUIT 消息,关闭对话框后由 API 添加,以进一步转发退出命令。