基於對話方塊的 VC 程式 ShowWindow 存在問題

發布 科技 2024-07-28
16個回答
  1. 匿名使用者2024-01-31

    你考慮過主要框架嗎? 擊鍵訊息不僅應該由您的對話方塊接收,還應該由主機接收。

    MFC 訊息的排程是按順序進行的,預設情況下,它首先進入主框架,然後處理完主框架後再處理對話方塊。

    因此,分析如下。

    非模態對話方塊一開始是隱藏的,按鍵,主框響應,但不處理,當前活動視窗應該是主框架,所以看到對話方塊還是隱藏的,然後處理非模態對話方塊,設定非模態對話方塊顯示,當前活動視窗為對話方塊, 但為什麼你看到它仍然隱藏著呢?因為這個開關太快,人眼無法識別; 當按鍵彈出時,主框架響應但不處理,然後非模態對話方塊響應,當前活動視窗為非模態對話方塊,顯示非模態對話方塊。

    同理,非模態對話方塊先顯示,按下按鈕,主框響應,但不處理,當前活動視窗是主幀,雖然顯示非模態對話方塊,但會被主框覆蓋,按下按鈕時會感覺到非模態對話方塊被隱藏了, 然後對對話方塊進行處理,將自己的屬性設定為隱藏,絕對不會顯示出來;當該鍵彈出時,主框架首先響應並且不處理,非模態對話方塊再次響應處理,或隱藏。

    你理解這個分析嗎?

    其實你可以驗證一下我的分析,啟動你的程式後,不要先按鍵,先錯開主框和非模態對話方塊的位置,比如拖乙個到左上角,乙個拖到右下角,再看看你的現象,這時候你會發現,在第二種情況下, 按鍵實際上一按就隱藏了;第一種情況並不像你想象的那麼簡單,你按下它時它不會顯示,它只會在你彈出時顯示,事實上,它一按鍵就會顯示! 只不過,如果此時想看到這種現象,因為程式啟動後不能拖動隱藏的非模態對話方塊,但是可以估計它會出現的位置,只需將主幀拖離該區域即可。

    這主要是分析,所以正確的處理還是像三樓說的,m pcloaddlg->showwindow(sw show); 應優先考慮放置的位置,並應在此基礎上更改其他處理。

  2. 匿名使用者2024-01-30

    wm keydown,這是被按下的響應按鈕,wm keyup,這是對被釋放的鍵的響應; 看看lz的意思,m pcloaddlg->showwindow(sw show);

    此函式應放在:

    if(pmsg->message==wm keyup)?

  3. 匿名使用者2024-01-29

    新增斷點除錯以跟蹤問題的根本原因。

    從理論上講,當第二次按下該鍵時,您的 m pcloaddlg->showwindow(sw hide) 將響應。

  4. 匿名使用者2024-01-28

    if(m bkeybusy)? 更改為 if(!.)m bkeybusy) 嘗試 **不是乙個大問題,主要是邏輯問題。

  5. 匿名使用者2024-01-27

    對於 VC++ 初學者,您可能會遇到這樣的問題:當基於 Dialog 的 MFC AppWizard 應用程式插入對話方塊時,如何顯示這兩個對話方塊? - 其實問題很簡單,如果你想同時在螢幕上顯示兩個對話方塊,並且兩個對話方塊都可以啟用,至少第二個對話方塊應該是乙個非模態對話方塊。

    啟動非模態對話方塊的方法與啟動普通視窗相同,即先呼叫視窗類的create()函式建立乙個視窗物件,然後使用showwindow()顯示它(值得注意的是,第二個對話方塊的物件不能是區域性變數, 否則,該物件將在退出 OnInitDialog 時自動關閉,這也將導致第二個視窗關閉)。例如,以下 ** 演示了如何在主對話方塊的 oninitdialog() 中啟動另乙個非模態對話方塊。

    cdialog2 dlg2;請注意,DLG2 不能是 oninitdialog 的本地伺服器變數。 bool cdialog1::oninitdialog() 編譯並執行,怎麼樣,結果好嗎?

    我不知道我是否能幫你搜尋!!

  6. 匿名使用者2024-01-26

    我知道怎麼了。

    您應該將上述 ** 放在 initinstance() 函式的開頭。

    記住,一定要在前面,在開始,否則戰鬥蘆葦的初始化已經完成,你無意再做出這個判斷。

  7. 匿名使用者2024-01-25

    在新專案中選擇“MFC 應用程式”,然後在下一步中選擇“基於對話方塊”,其餘的一步一步就可以了!

  8. 匿名使用者2024-01-24

    只需選擇嚮導中的對話方塊即可。

  9. 匿名使用者2024-01-23

    VC呼叫對話方塊有兩種模式,分別是:模態對話和非模態對話。

    模式對話方塊使用 domodal() 函式呼叫,這是一種遮蔽父視窗的獨佔模式,更常用。

    在非獨佔模式下,使用 showwindow 函式呼叫非模式對話方塊。 需要注意的是,對話方塊例項必須是指標變數(指標以避免區域性變數無效),並且需要通過應用記憶體和建立來建立,然後再顯示。

    非模態的簡單示例如下:

    ctestdlg* dlg = new ctestdlg;

    dlg->create(idd_dialog1,this);

    dlg->showwindow(sw_show);

  10. 匿名使用者2024-01-22

    這可以通過隱藏視窗來實現,您可以在其中單擊第乙個按鈕,顯示所需的小部件並隱藏其他小部件。 同樣,當您單擊第二個視窗時,將顯示要顯示的控制項,而其他控制項將被隱藏。 以下是您需要的:

    首先為按鈕 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 迴圈,一切正常。

  11. 匿名使用者2024-01-21

    製作四個非模態視窗,當您單擊它們時,您可以顯示相應的視窗。

  12. 匿名使用者2024-01-20

    不管是模態還是非模態,也就是說,不管你用的是domodal,create還是direct messagebox,domodal,都只能顯示乙個你必須發布它,否則很難確定原因。

  13. 匿名使用者2024-01-19

    它是模態對話方塊還是非模態對話方塊?

    如果是模態的,只能乙個乙個地顯示。

    會不會是對話方塊的位置重疊並被覆蓋了?

  14. 匿名使用者2024-01-18

    原始碼出來檢視您是否沒有在第二個對話方塊中使用 display 語句:;

  15. 匿名使用者2024-01-17

    建立為非模式對話方塊。 嘗試執行乙個並將其拖到一邊。

  16. 匿名使用者2024-01-16

    我以前問過類似的問題。

相關回答
4個回答2024-07-28

對於 VC++ 初學者,您可能會遇到這樣的問題:當基於 Dialog 的 MFC AppWizard 應用程式插入對話方塊時,如何顯示這兩個對話方塊? >>>More

10個回答2024-07-28

有時是程式有問題,請解除安裝並重新安裝。 如果是電腦卡,就需要找出原因,而且網路也會很慢,原來的卡,宕機還是反應慢? 在崩潰或減速之前你做了什麼? >>>More

19個回答2024-07-28

msgbox 函式具有返回值。

目標。 msgbox(prompt[, buttons] [title] [helpfile, context]) >>>More

12個回答2024-07-28

1.單擊“開始”,然後單擊“執行”。

2.鍵入 regedit,然後單擊“確定”。 >>>More

8個回答2024-07-28

你最近過得怎麼樣? 嘗試在事故發生前解除安裝所有軟體、補丁和驅動程式,並檢視以下方法。 如果故障仍然存在,建議先檢查並殺死木馬,然後嘗試修復系統(你想想最近的操作,故障不會無緣無故發生,有問題請問我)。 >>>More