gpt4 book ai didi

c++ - 嵌套的 CWnd 派生类中的 Tab 键不会改变焦点

转载 作者:太空狗 更新时间:2023-10-29 23:15:13 26 4
gpt4 key购买 nike

环境:VS2013、MFC、C++

我有一个 CDialog 派生对话框,带有 2 个静态按钮(确定、取消),是使用对话框编辑器创建的。此外,该对话框应包含动态创建的 CWnd-Derived 类实例,其中包含 2 个编辑框。

问题是我无法通过编辑框之间的 tab 键移动焦点,而且在打开对话框时我也无法使其中一个框具有初始焦点。当我按下 tab 键时,第一个编辑框获得焦点,但从这一点开始,我无法用 tab 键移动焦点(用鼠标点击有效)。

我已经创建了 WS_EX_CONTROLPARENT 样式的 CWnd,但它仍然无法移动焦点。那么问题出在哪里呢?到目前为止我做了什么:

//the CDialog-class which should be the container for the CWnd
//.h
class CDlgSelCatalogItem : public CDialog {
CListFilterInput _ctrlList; //CWnd-Derived, contains 2 Edit-Boxes
}

//.cpp
BOOL CDlgSelCatalogItem::OnInitDialog()
{
CRect rectList(10, 10, 100, 50);
_ctrlList.Create(rectList, this);
}

//the CWnd-derived class that contains 2 edit-boxes
//.h
class CListFilterInput : public CWnd {
BOOL Create(const RECT& rect, CWnd* pParentWnd);

//2 Edit-Boxes
CEdit _ctrl1;
CEdit _ctrl2;
}

BOOL CListFilterInput::Create(const RECT &rect, CWnd *pParentWnd)
{
BOOL bRetVal;

bRetVal = CWnd::CreateEx(WS_EX_CONTROLPARENT, NULL, _T(""), WS_CHILDWINDOW | WS_VISIBLE,
rect, pParentWnd, CTRL_ID_THIS);

if (bRetVal == TRUE){
//1st box
CRect rectTextbox = ...; //calculate rect fox box

bRetVal = _ctrl1.Create(
WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL,
rectTextbox, this, CTRL_ID_TEXTBOX);

//2nd box above 1st
rectTextbox.MoveToY(rectTextbox.top - rectTextbox.Height());
bRetVal = _ctrl1.Create(
WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL,
rectTextbox, this, CTRL_ID_TEXTBOX+1);

//set input-focus initially on 1st textbox - doesnt work
_ctrl1.SetFocus();
}

return bRetVal;
}

最佳答案

菜单->格式->标签顺序(ctrl + d)这个东西提供了对话框的选项卡顺序。设置好订单后,请在对话框外单击。希望对您有所帮助

关于c++ - 嵌套的 CWnd 派生类中的 Tab 键不会改变焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com