-
你考慮過主要框架嗎? 擊鍵訊息不僅應該由您的對話方塊接收,還應該由主機接收。
MFC 訊息的排程是按順序進行的,預設情況下,它首先進入主框架,然後處理完主框架後再處理對話方塊。
因此,分析如下。
非模態對話方塊一開始是隱藏的,按鍵,主框響應,但不處理,當前活動視窗應該是主框架,所以看到對話方塊還是隱藏的,然後處理非模態對話方塊,設定非模態對話方塊顯示,當前活動視窗為對話方塊, 但為什麼你看到它仍然隱藏著呢?因為這個開關太快,人眼無法識別; 當按鍵彈出時,主框架響應但不處理,然後非模態對話方塊響應,當前活動視窗為非模態對話方塊,顯示非模態對話方塊。
同理,非模態對話方塊先顯示,按下按鈕,主框響應,但不處理,當前活動視窗是主幀,雖然顯示非模態對話方塊,但會被主框覆蓋,按下按鈕時會感覺到非模態對話方塊被隱藏了, 然後對對話方塊進行處理,將自己的屬性設定為隱藏,絕對不會顯示出來;當該鍵彈出時,主框架首先響應並且不處理,非模態對話方塊再次響應處理,或隱藏。
你理解這個分析嗎?
其實你可以驗證一下我的分析,啟動你的程式後,不要先按鍵,先錯開主框和非模態對話方塊的位置,比如拖乙個到左上角,乙個拖到右下角,再看看你的現象,這時候你會發現,在第二種情況下, 按鍵實際上一按就隱藏了;第一種情況並不像你想象的那麼簡單,你按下它時它不會顯示,它只會在你彈出時顯示,事實上,它一按鍵就會顯示! 只不過,如果此時想看到這種現象,因為程式啟動後不能拖動隱藏的非模態對話方塊,但是可以估計它會出現的位置,只需將主幀拖離該區域即可。
這主要是分析,所以正確的處理還是像三樓說的,m pcloaddlg->showwindow(sw show); 應優先考慮放置的位置,並應在此基礎上更改其他處理。
-
wm keydown,這是被按下的響應按鈕,wm keyup,這是對被釋放的鍵的響應; 看看lz的意思,m pcloaddlg->showwindow(sw show);
此函式應放在:
if(pmsg->message==wm keyup)?
-
新增斷點除錯以跟蹤問題的根本原因。
從理論上講,當第二次按下該鍵時,您的 m pcloaddlg->showwindow(sw hide) 將響應。
-
if(m bkeybusy)? 更改為 if(!.)m bkeybusy) 嘗試 **不是乙個大問題,主要是邏輯問題。
-
對於 VC++ 初學者,您可能會遇到這樣的問題:當基於 Dialog 的 MFC AppWizard 應用程式插入對話方塊時,如何顯示這兩個對話方塊? - 其實問題很簡單,如果你想同時在螢幕上顯示兩個對話方塊,並且兩個對話方塊都可以啟用,至少第二個對話方塊應該是乙個非模態對話方塊。
啟動非模態對話方塊的方法與啟動普通視窗相同,即先呼叫視窗類的create()函式建立乙個視窗物件,然後使用showwindow()顯示它(值得注意的是,第二個對話方塊的物件不能是區域性變數, 否則,該物件將在退出 OnInitDialog 時自動關閉,這也將導致第二個視窗關閉)。例如,以下 ** 演示了如何在主對話方塊的 oninitdialog() 中啟動另乙個非模態對話方塊。
cdialog2 dlg2;請注意,DLG2 不能是 oninitdialog 的本地伺服器變數。 bool cdialog1::oninitdialog() 編譯並執行,怎麼樣,結果好嗎?
我不知道我是否能幫你搜尋!!
-
我知道怎麼了。
您應該將上述 ** 放在 initinstance() 函式的開頭。
記住,一定要在前面,在開始,否則戰鬥蘆葦的初始化已經完成,你無意再做出這個判斷。
-
在新專案中選擇“MFC 應用程式”,然後在下一步中選擇“基於對話方塊”,其餘的一步一步就可以了!
-
只需選擇嚮導中的對話方塊即可。
-
VC呼叫對話方塊有兩種模式,分別是:模態對話和非模態對話。
模式對話方塊使用 domodal() 函式呼叫,這是一種遮蔽父視窗的獨佔模式,更常用。
在非獨佔模式下,使用 showwindow 函式呼叫非模式對話方塊。 需要注意的是,對話方塊例項必須是指標變數(指標以避免區域性變數無效),並且需要通過應用記憶體和建立來建立,然後再顯示。
非模態的簡單示例如下:
ctestdlg* dlg = new ctestdlg;
dlg->create(idd_dialog1,this);
dlg->showwindow(sw_show);
-
這可以通過隱藏視窗來實現,您可以在其中單擊第乙個按鈕,顯示所需的小部件並隱藏其他小部件。 同樣,當您單擊第二個視窗時,將顯示要顯示的控制項,而其他控制項將被隱藏。 以下是您需要的:
首先為按鈕 1 新增訊息函式,在函式中新增以下 **, getdlgitem(idc kongjian1(id of the control)))-showwindow(sw show);顯示控制項。
如果要顯示其他控制項,只需修改 ID。
getdlgitem(idc kongjian2(控制項的id)))-showwindow(sw hide);隱藏控制項。
如果要隱藏其他按鈕,只需更改 ID。
當然,如果要顯示和隱藏太多控制項,可能會很麻煩。 有辦法做到這一點,我還沒有嘗試過,我不知道它是否有效,你可以試一試! 它是將所有控制項的 ID 命名為常規 ID,例如:
id_1,id_2。。。然後在訊息函式中使用 for 迴圈,一切正常。
-
製作四個非模態視窗,當您單擊它們時,您可以顯示相應的視窗。
-
不管是模態還是非模態,也就是說,不管你用的是domodal,create還是direct messagebox,domodal,都只能顯示乙個你必須發布它,否則很難確定原因。
-
它是模態對話方塊還是非模態對話方塊?
如果是模態的,只能乙個乙個地顯示。
會不會是對話方塊的位置重疊並被覆蓋了?
-
原始碼出來檢視您是否沒有在第二個對話方塊中使用 display 語句:;
-
建立為非模式對話方塊。 嘗試執行乙個並將其拖到一邊。
-
我以前問過類似的問題。
對於 VC++ 初學者,您可能會遇到這樣的問題:當基於 Dialog 的 MFC AppWizard 應用程式插入對話方塊時,如何顯示這兩個對話方塊? >>>More
有時是程式有問題,請解除安裝並重新安裝。 如果是電腦卡,就需要找出原因,而且網路也會很慢,原來的卡,宕機還是反應慢? 在崩潰或減速之前你做了什麼? >>>More
msgbox 函式具有返回值。
目標。 msgbox(prompt[, buttons] [title] [helpfile, context]) >>>More
1.單擊“開始”,然後單擊“執行”。
2.鍵入 regedit,然後單擊“確定”。 >>>More
你最近過得怎麼樣? 嘗試在事故發生前解除安裝所有軟體、補丁和驅動程式,並檢視以下方法。 如果故障仍然存在,建議先檢查並殺死木馬,然後嘗試修復系統(你想想最近的操作,故障不會無緣無故發生,有問題請問我)。 >>>More