2012-11-11 29 views
0

我正在寫一個Win32控件/對話框/窗口的相當簡單的包裝。Win32 ListBox WNDPROC從未調用

我遇到的問題是ListBox和ComboBox的行爲似乎有點不同。

在我繼承的基礎Widget類中,我重寫了控件的現有WNDPROC,然後在新的WNDPROC中處理消息,主要是提升它們以提升:: signal事件。

問題是,雖然ComboBox的WndProc收到CBN_SELCHANGE - 如預期的那樣 - ListBox的WndProc沒有收到LBN_SELCHANGE命令。

我意識到擁有控件的對話框/窗口很可能會收到這個,但我已經把這個兔子洞放下了,它感覺就像一個非常整齊的解決方案。需要我退出並讓控件的所有者處理WM_COMMAND消息(並從那裏將它提升爲控件本身的事件)。

這是一個學習練習,所以請不要提醒我關於MFC或評論這樣做的價值。

+0

你打開了LBS_NOTIFY風格嗎?您不能忽略WM_COMMAND消息發送給父級。 –

+0

是的,用LBS_NOTIFY通知擁有對話框ListBox WM_COMMANDs。但是,ComboBox自己的WNDPROC也會收到這些通知,所以我一直在想ListBox的WNDPROC會得到類似的通知,但顯然不是。 –

回答

1

通知消息通常會發送給控件的父級。大概所有的窗口(即父窗口和控件)都使用相同的窗口過程?在這種情況下,通常的解決方案是:在窗口過程的通知處理程序中,檢查通知是否來自當前窗口。如果是這樣,請舉辦一個活動;如果它沒有將消息重新發回到它來自的控件(它將作爲事件提出)。

+0

是的,我想我只需要接受擁有控件的對話框/窗口需要將命令轉發給控件本身。不理想,因爲這意味着控制不像我想要的那樣封裝,但我認爲這是我在這種情況下最好的。 –

+0

管道總是有點混亂。從應用程序代碼的角度來看,封裝是完美的。對我來說似乎很好。 – arx