2011-09-02 150 views
3

我正在寫一個使用winapi的小型C應用程序。在那裏我有一個帶有子窗口的窗口(工具箱)。我可以將它保存在這個窗口內,等等,但我的問題是:如果子窗口聚焦,如何保持主窗口處於活動狀態?如何讓一個子窗口(也叫做擁有窗口)的父窗口在winapi中保持活動狀態?

主窗口在此刻變灰。

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

在這裏,兩個窗口的行爲有點像:

The behaviour of the windows

+1

AFAIK該活動窗口具有焦點,所以如果孩子有重點,然後在主窗口不能同時具有焦點之一。 –

+0

也許不是這樣,但我知道其他應用程序 - 你可能知道 - Paint.NET是可能的。 –

+0

您可能想要定義「活動」的意思嗎?你在使用MDI窗口嗎? – jweyrich

回答

3

我發現簡單地將其創建爲WS_CHILD,並明確地將作爲作爲WS_POPUP解決了這個問題。它還將絕對窗口座標轉換爲相對窗口座標,以便通過移動父窗口不必再關心窗口位置。

//解決

1

創建子窗口爲無模式對話框,而不是

窗戶得到由創建莫代爾。因此,使用DialogBox,而不是使用CreateDialog

+0

我已經這樣做了。 hPanel = CreateDialogParam(......); ShowWindow(hPanel,SW_SHOW); –

+0

那麼我不明白我猜的問題。您只能有一個「活動」窗口。最上面的窗口始終是關注的窗口。 –

+0

@Mike Kwan的回答一直對我有用。你的意思是你根本無法選擇父窗口?或者你的意思是你只是不想讓子窗口在創建時全部關注? – 2011-09-02 16:17:25

1

對不起,這只是Windows的工作方式:一次一個活動窗口。

你可以在Visual Studio中看到這個,如果你打開Find and Replace作爲一個工具窗口,你會看到它被激活並且主VS窗口變爲非活動狀態。

試圖讓它們同時處於活動狀態可能會混淆用戶和可訪問性工具,如屏幕閱讀器。

+0

是的你是對的,我可以讓它成爲一個小組,但是C中的一個小組我會以同樣的方式做,就像一個無字幕的窗口。所以問題依然存在。還是有其他可能性? –