[英]How to use CDialog::SetDefId with a non button control?
我遇到了CDialog :: SetDefId,雖然很容易並且很清楚它是用於“按鈕”的,但我想將此功能與非按鈕控件一起使用。我知道您必須按Enter或Return 鍵才能創建對話框使用該ID
如果我在CDialog :: OnInitDialog中將nID設置為0,並且沒有設置默認按鈕,則該對話框將默認為CDialog :: OnOk;如果我確實將默認按鈕設置為該對話框,則對話框將按預期的方式按下該按鈕。
事實是,我想使此功能適用於非按鈕控件,因此,如果將nID設置為非按鈕控件,則即使為keydown事件或NM_RETURN設置了消息處理程序,對話框也不會執行任何操作控件是否具有焦點無關緊要,如果按Enter或Return對話框仍然不執行任何操作。
如何在不使用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.