※ 引述《Mute@bbs.ee.ntu.edu.tw (123456780)》之銘言:
> 那麼, 我們寫給 qsort 用的東西也算是囉... 我想...
完全正確。;)
> 還有, 一般我們的 window proc 都算是 callback,
> 而 DefWindowProc() 算不算?
> 我對它的宣告沒有查的很清楚,
不不, 它不算, DefWindowProc() 是十分正常的由 USER(32).DLL 匯出的 WinAPI
之一而已, 與 callback 扯上的唯一關係就是, 我們會在自己的 window procedure
呼叫 DefWindowProc(), 而 window procedure 屬於 callback functions.
> 只是我想到我們會在自己的 window proc 中呼叫它,
> 而如果我們可以在 Register Window Class 的時候指定要用 DefWindowProc,
> 那它就算是被系統呼叫的函式囉;
對, 把系統提供的函式以 callback 的方式使用。
說得更清楚一點: callback 並不是函式的型態或種類, 它指的是函式的使用方式。
> 這樣一個東西算是 callback 的話,
> 那 callback 的呼叫者看起來就沒有限制了.
> 我想, 如果可以把 window proc 直接拿來呼叫,
> 那好像可以代替 SendMessage() ?
某些情況下是的。
但經由 SendMessage() 將訊息傳入 window procedure 的動作不啻是直接呼叫而已,
還經過 message loop, keyboard messages translating 等等。另外, SendMessage()
還可處理 synchronization 及跨 process 等等, 都是直接呼叫 window procedure
是辦不到的。
> 只是不知道如果送進這個 window procedure 的 HWND
> 其所屬的視窗如果與這個 window proc 不合的話,
> 結果會不會很有趣...
這就跟拿 SendMessage(), 將要傳給 hwnd1 的 message 誤傳給 hwnd2 而已, 應該
不算是太有趣的課題 :Q 一般來說除了運作不正常外, 大概不會有什麼特別狀況發生。
--
現在人做事要是不夠快,就會覺得浪費時間;
但是他們又不知如何善用時間,只好找其他消遣消磨時間。
- 弗洛姆
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: a-181.RAS.NCTU.edu.tw