推 Ting1024:1. Dialog跟Form要處理的情境不一樣。不能混為一談04/25 03:42
推 fanntone:T大說的沒錯 這兩種情況不一樣,所以在創專案時特別分成04/25 23:36
→ fanntone:consloe Dialog Formview這三種(VC6)04/25 23:38
我比較武斷,我覺得原討論串的發文者應該是在做練習,還停留在 WndClass、WndProc 的
學習階段,很多名詞、東西都搞不清楚,就好像一個客戶太外行,不知道我們可以
替他寫出什麼東西一樣,無法給出具體的需求,今天說好的,也許明天就要否決。
所以建議他用 Dialog 沒有錯,告訴他可以用 MFC CFormView 也沒有錯,這只是一個提供
菜單給客人的過程,我不認為哪邊說的有問題。
當然如果絕對不用 MFC,那一開始就不必考慮 CFormView。
如果可以用 MFC,那要用哪種,只能原 PO 自己決定,不是說你要寫瀏覽器就一定
要用 CFormView,不能用 CDialog,只是多數情況用 CFormView 會比較好,
也不是說你要寫小算盤,就一定要用 CDialog,這沒有強制規定的。
==
另外 CreateWindow 那邊是我的錯,當時一看到 E 大說用 CreateWindow("buttton",..)
我反射想到的是 Popup window,這類視窗建立後出現的位置,不會像 child window
一樣,一定要限制在 hWndParent 的客戶區內。整個桌面哪個位置都可以出現,那我
以為 E 大正在說這個東西,所以形容它是剛好建立在 hWndParent 上空而已。
當然也不是說一個程式客戶區內的視覺元件,就一定是 WS_POPUP 或 WS_CHILD,
不是一定要寫成子視窗,比如 MFC 有一類控件 (Control) 叫 CControlBar (工具列、
狀態列...),他們平常待在程式裡面,這時候是 WS_CHILD,為停駐狀態 (Docking),
那你可以把他拉到程式外面,變成獨立的 floating 視窗,此時又
變成 WS_POPUP 狀態,座標位置可以隨便移動。
所以完整的講法是,你用 CreateWindow 建立控制項時,有可能是 WS_CHILD (子視窗)
也有可能是 WS_POPUP,端看你希望該控件是 floating 或 docking 狀態。
==
補充一下,前面推文我說只有部份 WndClass 裡面可以放東西,這講得太簡陋,
本來懶得詳細說明,大家跳過我裝死就好,但都回文了就重新解釋。
普通自己寫的 WndClass 所建立出來的視窗,他客戶區裡面一片空白,你可以用
CreateWindow 放一些東西進去客戶區,但這不是它原本直接支援的。
而 dialog、rebar、staus bar、dialog bar、list view 這類東西才是我想說的,他們
有直接支援一些介面,讓你放一些東西進去,而不必使用 CreateWindow 來自己
設定座標位置去建立。
我是想讓原發文者,自己去看看有哪些 contorl 有支援放東西的介面,而不要什麼
東西都 CreateWindow 去土法煉鋼。
==
在補充一個 resource 那邊,在 Dialog 裡面是可以使用部份資源表裡的東西,
主要就是底層的 CreateDialog 函數會依造資源的內容來建立視窗,但是像
字串資源,你不是 Dialog 也可以用,畢竟 resource 只是跟 PE 檔掛勾,只要用
resource 相關的 Windows API 就可以讀取,甚至你的程式不是 GUI 也無所謂。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.128.199
※ 編輯: purpose 來自: 124.8.128.199 (04/26 03:18)
※ 編輯: purpose 來自: 124.8.128.199 (04/26 03:19)
推 EdisonX:感謝指教 ^^ 04/26 15:02
推 s3748679:有股熱血的感覺~~~ 04/26 19:53
→ yoll522:謝謝你的說明,這幾天我在網路上學的那篇api,我已經大概 05/01 20:23
→ yoll522:知道該怎麼做了 05/01 20:23