2011-10-01 20 views
-1

我試圖用一個熱鍵,可以是透明的,允許鼠標消息才能通過改變一個分層的窗口。創建兩個Windows原因二創建到燒盡

在我的主要功能我叫

// make hotkey with WM_HOTKEY messages sent to hwnd's window procedure, id 1, 
// no other keys to work, F5 as hotkey 
// while checking for errors and it completes successfully. I also do the same 
// (id of 2) for VK_F7 and it completes successfully. 

RegisterHotKey (hwnd, 1, 0, VK_F5); 
RegisterHotKey (hwnd, 2, 0, VK_F7); 

在我的窗口過程中,我有

case WM_HOTKEY: 
    MessageBox (hwnd, "Got here", "Attention", MB_OK); 
    // Other stuff I need to do here 

我嘗試添加MOD_CONTROL,但無濟於事。

這實際上沒有工作之前。現在唯一的區別是我意識到兩個窗口可以解決我遇到的問題。上次我只有一個,現在我的應用程序中有兩個窗口過程。我確定這一切都是正確的,但是我不應該僅限於一個窗口......窗口本身顯示,因爲我將透明度設置爲100/255,因此它稍微遮擋了視圖,並且我可以看到那個屏幕。

改變本身並沒有什麼鑰匙,和WM_HOTKEY消息被髮布到隊列中。我會嘗試手動將它們發送到窗口。

編輯:^與SendMessage()不工作,去看看它是否得到任何消息,並與我在其中的其他窗口相同。

編輯:好吧,我覺得這麼說是個白癡,但我不得不RegisterHotKey將空HWND,因爲我並沒有真正創建一個窗口,但(我創建了一個不首先得到熱鍵消息和原來有這些權之後)。 問題是即使我可以看到這個窗口,並且如果我評論它全部出來的視圖是不同的(沒有屏幕),它沒有收到任何消息。

編輯:我改變了標題的東西更適合搭配這種額外的信息。如果這是任何人經驗豐富的通用東西,我會很高興聽到。現在,我假設它是我的包裝並手動創建它們。

主要編輯:我只是用,而不是我的包裝的原始API嘗試,它有一個錯誤登記第二。我改變了類名,現在類註冊並創建了窗口。出現熱鍵的消息框也顯示。我想我忘記了爲他們展示窗口,但我會說在一秒鐘內如何工作(編輯:我重新啓動計算機後再次!!!)。在你問之前,我沒有花太多時間在我的包裝器上,是的,它有錯誤檢查,但使用一個類似的系統來設置/獲取lasterror(),我沒有檢查它們的返回值,因爲第二個一個似乎是之前創建的。

+0

您是否在同一個線程上創建了兩個窗口?你在消息循環中檢查了WM_HOTKEY嗎? –

+0

我基本上設置了一個窗口,創建它,然後設置另一個窗口並在之後創建它。如果你的意思是main()中的消息循環,我不應該因爲我指定了相關的窗口。儘管如此,我仍然要確保它們首先被髮布。編輯:是的,他們正在發送,我通過檢查(msg.message == WM_HOTKEY)MessageBox(...); – chris

+0

如果他們到達你的消息循環,那麼你的窗口過程並不是你想象的那樣,或者你是錯誤的。你的消息循環是什麼樣的? –

回答

0

的問題是,這兩個窗口有相同的類名。這讓我感到困惑了一些,因爲我認爲他們被允許,我將在我的包裝器中添加一個靜態實例計數成員。最後的結果是這個區域的每一個問題現在都被修復了:D
編輯:我只是在學習之後添加了這個,但是我發現了可以創建兩個具有相同類名的窗口的知識,但他們必須使用相同的窗口過程。學習這一點實際上增強了我對這個話題的理解,所以如果我爲其他人明確這一點,我會很高興。 /編輯

以防萬一你想知道這是什麼目的,我包括它的一點點。希望能夠變成可以「屏蔽」屏幕的東西。它確實保持在最佳狀態,並且現在跟隨你,所以大部分工作都完成了。正如你所看到的,不是最好的計算機與

screenshot of program in action http://i56.tinypic.com/24g6d5l.jpg

當我添加的方式來退出控制檯窗口將在後面隱藏的工作。

+0

解決方案的「如何發展」笑臉部分,如果不是的話,我會在沒有它的情況下發布截圖。這是分散注意力而不是必要的。 – Kev

+0

這只是人們通常想知道你想要完成的事情,而截圖是一旦主要部分實際工作後顯示它的最佳方式。它不一定非得如此,裝飾邊框是一種用途。笑臉是該程序的一個產品,當你切換窗口等時它會保持在最前面,這就是我的觀點,因爲這是我解決這個問題時所能達到的。將來,我會記得爲我自己的問題提供更多信息的答案,而不是我原來的帖子。 – chris

+1

啊,好吧......它看起來像一個MS塗料徒手想過之後:) – Kev