我是MFC的初学者,我只想默认选择我的输入框,当输入框弹出时,可以用键盘输入文本。
这是我的类的C++.cpp文件:
testInputBox::testInputBox(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_INPUT_BOX, pParent)
, warning(_T(""))
{
}
testInputBox::~testInputBox()
{
}
void testInputBox::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_INPUT_BOX, editcedit);
DDX_Text(pDX, IDC_STATIC_MESSAGE, warning);
DDV_MaxChars(pDX, warning, 100);
}
BEGIN_MESSAGE_MAP(testInputBox, CDialogEx)
ON_EN_CHANGE(IDC_EDIT_INPUT_BOX, &testInputBox::OnEnChangeEdit1)
ON_BN_CLICKED(IDOK, &testInputBox::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &testInputBox::OnBnClickedCancel)
ON_STN_CLICKED(IDC_STATIC_MESSAGE, &testInputBox::OnStnClickedStaticMessage)
END_MESSAGE_MAP()
您需要覆盖CDialogEx
类的OnInitDialog()
成员,并在该覆盖中,将焦点设置为所需控件。然后,因为已经显式设置了焦点,所以覆盖函数应该返回零(或FALSE
(。
假设你的editcedit
是一个指向你想要焦点的控件的指针,那么你的覆盖将看起来像这样:
BOOL testInputBox::OnInitDialog()
{
CDialogEx::OnInitDialog(); // Always call base class function
// ... anything else you want to do here
editcedit->SetFocus(); // Or: GetDlgItem(IDC_EDIT_INPUT_BOX)->SetFocus();
return FALSE;
}
您的覆盖应该在类中声明如下:
class testInputBox : public CDialogEx
{
//...
protected:
BOOL OnInitDialog() override;
//...
};
CDialog::GotoDlgCtrl
是您搜索的内容。
BOOL testInputBox::OnInitDialog()
{
CDialogEx::OnInitDialog();
// ...
GotoDlgCtrl(&editcedit);
// alternativ
CWnd* pWnd = GetDlgItem(IDC_EDIT_INPUT_BOX)
if(pWnd)
GotoDlgCtrl(pWnd)
// ...
}