易語言界面庫的實(shí)現(xiàn)(三)對(duì)話框的設(shè)計(jì)。
??? 何為對(duì)話框。就是用來和你對(duì)話的框框。既然是和你對(duì)話。自然要得到一個(gè)對(duì)話的結(jié)果。哈……
?
??? Windows的對(duì)話框是一個(gè)經(jīng)過一定封裝的窗口。(這個(gè)封裝了不得,你連消息都要IsDialogMessage^_^)。
?
??? 對(duì)話框在你點(diǎn)擊關(guān)閉按鈕的時(shí)候會(huì)產(chǎn)生一個(gè) 菜單事件(也有稱呼為命令事件) 反正就是 WM_COMMAND里的。LOWORD(wParam) 值為2 這個(gè)2就是 IDCANCEL。
?
??? 對(duì)話框創(chuàng)建,并不立即顯示。因?yàn)槟氵€要決定它是用模態(tài)顯示,還是用非模態(tài)…………。至于非模態(tài),我看和窗口差不了多少。
?
??? 在我的設(shè)計(jì)里面,模態(tài)對(duì)話框有自己的消息循環(huán)。模態(tài)對(duì)話框點(diǎn)擊關(guān)閉按鈕不會(huì)關(guān)閉窗口而僅僅產(chǎn)生一個(gè) IDCANCEL事件。所有的東西都必須你的程序確認(rèn)里,顯式關(guān)閉它。調(diào)用 對(duì)話框.顯示模態(tài)()。會(huì)有一個(gè)模態(tài)對(duì)話框出來。程序會(huì)在這里停頓(不要問我為啥。哈哈。因?yàn)檫M(jìn)入了一個(gè)新的消息循環(huán)……)模態(tài)對(duì)話框關(guān)閉的時(shí)候??梢詡鬟f一個(gè)返回值。這就是我們告訴對(duì)話框?qū)υ捊Y(jié)果的途徑。哈哈…….如下:
?
??? ? 對(duì)話框返回值=對(duì)話框.顯示模態(tài)();
????? 對(duì)話框關(guān)閉后,這里的返回值就是你要得到的“對(duì)話結(jié)果了”
?
????? 對(duì)話框不能銷毀,當(dāng)然。你也可以銷毀它。但是 自從創(chuàng)建后,。你用 顯示() 關(guān)閉模態(tài)()。對(duì)話框都不會(huì)銷毀。所以對(duì)話框你只需要?jiǎng)?chuàng)建1次??梢远啻问褂?。
?
????? 易語言的一個(gè)bug,。繼承類顯式調(diào)用被覆蓋的基類的方法的時(shí)候。如果這個(gè)類封裝在模塊里。則無論如何也只能調(diào)用到類自身。重復(fù)調(diào)用一個(gè)函數(shù)的后果很嚴(yán)重。無限遞歸。直到棧溢出!
?
????? 這個(gè)bug讓我很受傷。意味著我的庫因?yàn)橐椎囊粋€(gè)bug而無法發(fā)布。永遠(yuǎn)停留在調(diào)試版階段。希望公司有關(guān)方面能夠重視起來。