簡體   English   中英

如何通過非按鈕控件使用CDialog :: SetDefId?

[英]How to use CDialog::SetDefId with a non button control?


我遇到了CDialog :: SetDefId,雖然很容易並且很清楚它是用於“按鈕”的,但我想將此功能與非按鈕控件一起使用。我知道您必須按EnterReturn 才能創建對話框使用該ID

如果我在CDialog :: OnInitDialog中將nID設置為0,並且沒有設置默認按鈕,則該對話框將默認為CDialog :: OnOk;如果我確實將默認按鈕設置為該對話框,則對話框將按預期的方式按下該按鈕。

事實是,我想使此功能適用於非按鈕控件,因此,如果將nID設置為非按鈕控件,則即使為keydown事件或NM_RETURN設置了消息處理程序,對話框也不會執行任何操作控件是否具有焦點無關緊要,如果按EnterReturn對話框仍然不執行任何操作。

如何在不使用PreTranslateMessage之類的控件的情況下使該控件成為默認控件? 哪個消息發送到控件?

提前致謝

是的,它僅適用於按鈕,但是您可以使用SetFocus將焦點更改為任何其他控件:

BOOL CMyDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    GetDlgItem(IDC_CHECK1)->SetFocus();
    return 0;  // return TRUE  unless you set the focus to a control
}

在此示例中,“確定”按鈕可能仍是默認按鈕。 Enter鍵將轉到默認按鈕,可能是IDOK 但是空格鍵將更改復選框IDC_CHECK1

必須有一個默認按鈕。 如果您不想使用某個按鈕,則添加一個假按鈕,比如說IDC_BUTTON1 ,並將其設置為默認按鈕並且不可見,那么您就不會看到默認按鈕(您仍可以將IDC_BUTTON1添加到消息映射表並決定要IDC_BUTTON1內容使用Enter鍵)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM