簡體   English   中英

如何從MFC中禁用的非父窗口將焦點設置為模式窗口?

[英]How can I set focus to a modal window from a disabled non-parent window in MFC?

我有一個帶有多個窗口的應用程序。 當一個窗口打開一個模式對話框時,父窗口會自動被DoModal禁用。 我還通過調用EnableWindow(FALSE)禁用其他窗口。 但是,如果父窗口被另一個應用程序遮蓋,並且用戶單擊了另一個窗口,則我想將焦點放在模式對話框上。 這可能嗎? 如果是這樣,我該怎么辦? 我試圖給用戶一個視覺線索,表明該應用程序尚未掛起。 提前致謝。

好吧,當您禁用窗口時,可以防止用戶與其進行交互。 因此,如果禁用除模式對話框之外的所有窗口,則將無法單擊它們。 我認為您可能唯一的機會是為鼠標安裝HookProc並嘗試以這種方式攔截點擊。 我不知道它是否行得通,但這是一個想法。

看來我找到了問題的解決方案。 在我的主窗口中實現OnMouseActivate,PreTranslateMessage和OnActivate可以解決此問題,就像這樣...

int CCVMDIChild::OnMouseActivate(CWnd* desktopWindow, UINT hitTest, UINT message)
{
    if (m_IsDisabled)
    {
        CWnd* inDialogWindow = GetAppData()->GetInDialogWindow(); // Pointer to the parent of the modal dialog
        if (inDialogWindow != nullptr)
        {
            inDialogWindow->GetLastActivePopup()->SetFocus();
            inDialogWindow->GetLastActivePopup()->FlashWindowEx(FLASHW_CAPTION, 5, 50);
        }
        return MA_NOACTIVATE;
    }
    return CDocFrame::OnMouseActivate(desktopWindow, hitTest, message);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM