基于對(duì)話框的VC程序,ShowWindow的一個(gè)問(wèn)題

2025-02-06 00:24

用實(shí)例說(shuō)明想要做的事情:有一個(gè)對(duì)話框,另外有一個(gè)非模態(tài)對(duì)話框?qū)ο髆_pcLoadDlg,非模態(tài)對(duì)話框已經(jīng)在主對(duì)話框的OnInitDialog中創(chuàng)建,并初始m_pcLoadDlg->ShowWindow(SW_HIDE);我想要在按下按鍵,比如字母A鍵,的時(shí)候,沒(méi)有變化,在我松開(kāi)A鍵的時(shí)候,m_pcLoadDlg顯示。我是這樣做的:在對(duì)對(duì)話框的PreTranslateMessage中添加:if (pMsg->message==WM_KEYDOWN){if(m_bKeyBusy) {return true;}m_bKeyBusy=true;m_pcLoadDlg->ShowWindow(SW_SHOW);}if(pMsg->message==WM_KEYUP){if(m_bKeyBusy)m_bKeyBusy=false;}if(m_bKeyBusy)return true;return CDialog::PreTranslateMessage(pMsg);這樣確實(shí)達(dá)到了我要的效果,按下按鍵直到彈起按鍵時(shí),非模態(tài)對(duì)話框m_pcLoadDlg才顯示。但是如果相反,我在初始化的時(shí)候讓他顯示,也就是換成m_pcLoadDlg->ShowWindow(SW_SHOW);,在PreTranslateMessage中換成m_pcLoadDlg->ShowWindow(SW_HIDE); 按說(shuō)效果
1個(gè)回答
你考慮過(guò)主框架沒(méi)?按鍵消息應(yīng)該不是只有你的對(duì)話框可以接收,主框架也可以接收。

MFC消息的派發(fā)是有順序的,默認(rèn)情況下是先到主框架,主框架處理完再對(duì)話框處理。

所以,分析如下

非模態(tài)對(duì)話框先是隱藏的,按下按鍵,主框架響應(yīng),但不處理,當(dāng)前活動(dòng)窗口應(yīng)該是主框架,所以你看到對(duì)話框還是隱藏,接著非模態(tài)對(duì)話框處理,非模態(tài)對(duì)話框設(shè)為顯示,當(dāng)前活動(dòng)窗口為對(duì)話框,但是為什么你看到的還是隱藏?因?yàn)檫@個(gè)切換太快了,人眼識(shí)別不出來(lái);按鍵彈起時(shí),主框架響應(yīng)但不處理,接著非模態(tài)對(duì)話框響應(yīng),當(dāng)前活動(dòng)窗口為非模態(tài)對(duì)話框,非模態(tài)對(duì)話框顯示。

同理,非模態(tài)對(duì)話框先是顯示的,按下按鍵,主框架響應(yīng),但不處理,當(dāng)前活動(dòng)窗口為主框架,這個(gè)時(shí)候雖然非模態(tài)對(duì)話框是顯示的,但是會(huì)被主框架覆蓋,你就會(huì)覺(jué)得是非模態(tài)對(duì)話框在按鍵一按下就隱藏了,接著對(duì)話框處理的時(shí)候更是將自己的屬性設(shè)為隱藏,肯定就不會(huì)顯示了;按鍵彈起時(shí),主框架先響應(yīng)不處理,非模態(tài)對(duì)話框再響應(yīng)處理,還是隱藏。

這個(gè)分析你看明白了沒(méi)?

其實(shí)你可以驗(yàn)證我的分析,啟動(dòng)你的程序后,先不要按鍵,首先將主框架和和非模態(tài)對(duì)話框的位置錯(cuò)開(kāi),比如一個(gè)拖到左上角,一個(gè)拖到右下角,再看你的現(xiàn)象,這個(gè)時(shí)候你會(huì)發(fā)現(xiàn),第二種情況下,鍵一按下實(shí)際上就隱藏了;第一種情況也不是像你想的那樣,按下時(shí)不顯示,彈起時(shí)才顯示,實(shí)際上還是你鍵一按下就顯示了!只不過(guò)這個(gè)時(shí)候你要看到這個(gè)現(xiàn)象的話,因?yàn)槌绦騿?dòng)后你沒(méi)辦法拖動(dòng)隱藏的非模態(tài)對(duì)話框,但是你可以估計(jì)出來(lái)它會(huì)出現(xiàn)的位置,你將主框架拖離這一區(qū)域就行了。

這個(gè)主要是分析,所以正確的處理還是像三樓說(shuō)的那樣,

m_pcLoadDlg->ShowWindow(SW_SHOW);放的位置要優(yōu)先考慮,其他處理以這個(gè)為準(zhǔn)做改變才是。
相關(guān)問(wèn)答
小程序可以用什么框架
1個(gè)回答2023-05-18 22:21
小程序開(kāi)發(fā)可以使用官方給的開(kāi)發(fā)工具,很方便,其他的框架很難和官方工具這樣功能齊全。
什么是程序框架
1個(gè)回答2022-12-14 18:57
不僅僅是類(lèi)庫(kù)這么簡(jiǎn)單。我個(gè)人的理解是:完成某項(xiàng)業(yè)務(wù)流程或者功能的具體方案??蚣懿捎昧讼鄬?duì)比較成熟的方式或者步驟或者流程去做這件事情,讓程序員只專(zhuān)注于邏輯本身或業(yè)務(wù)本身,省去了很多繁瑣的步驟。
showwindow 是什么意思啊
1個(gè)回答2025-02-25 17:55
顯示窗口 用來(lái)控制窗口是否為可見(jiàn)狀態(tài)
程序框圖的常用符號(hào)
1個(gè)回答2025-01-29 02:32
是算法的一種,又叫流程圖,是有一些規(guī)定的圖形和流程線組成,用來(lái)描述算法的圖形。 程序框圖中,圓角長(zhǎng)方形表示起、止框,平行四邊形表示輸入、輸出框,長(zhǎng)方形表示處理框、執(zhí)行框,用于賦值、計(jì)算,菱形表示判...
全文
程序框圖的常用符號(hào)
1個(gè)回答2025-01-23 00:03
是算法的一種,又叫流程圖,是有一些規(guī)定的圖形和流程線組成,用來(lái)描述算法的圖形.   程序框圖中,圓角長(zhǎng)戚返方形表示起、止框,平行四邊形表示輸入、輸出框,長(zhǎng)方形表示處理框、執(zhí)行框,用于賦值、計(jì)算,菱...
全文
如何用VC++編C窗口程序
2個(gè)回答2022-10-16 09:08
一般用MFC來(lái)做,比較好上手。 推薦去看看孫鑫的MFC系列教程。windows的桌面程序開(kāi)發(fā)說(shuō)開(kāi)了可不小,一句兩句說(shuō)不清的。
五子連珠程序代碼 vc的
2個(gè)回答2022-12-20 06:05
同求,工大計(jì)院的孩紙
道易尋小程序 用什么小程序框架寫(xiě)的?
1個(gè)回答2023-05-11 03:46
小程序開(kāi)發(fā)可以使用官方給的開(kāi)發(fā)工具,很方便,其他的框架很難和官方工具這樣功能齊全。
程序開(kāi)發(fā)中的框架是什么
1個(gè)回答2022-09-19 13:13
我們目前先不要了解那么多 框架是為了方便我們程序員開(kāi)發(fā) 減少代碼量 及代碼質(zhì)量的工具 框架(Framework)是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法;另一種定義認(rèn)...
全文
程序框圖有幾種模式
1個(gè)回答2025-01-03 03:18
全文
熱門(mén)問(wèn)答