获取在 CWnd 中具有焦点的控制器

Get controller who has focus inside CWnd

本文关键字:焦点 控制器 CWnd 获取      更新时间:2023-10-16

我有一个对话框,CFormView,其中包含一些按钮和一个面板,其中包含Tabcontrol,单选按钮,文本输入字段等。

因此,在我的面板 CWnd 上,我创建了这样的输入字段:

pEdit = new CEdit();
pEdit->CreateEx(WS_EX_CLIENTEDGE, _T("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | nAttrMultiline | m_clRect, pclPanel, iID)

其中m_clRect是CRect,pclPanel是我的CWnd,iID只是控制器ID。

我想在单击按钮时用文本填充我的CEdit,但不知何故,我无法获得具有焦点的控制器。

我的第一次尝试是调用GetFocus(),将其转换为CEdit并添加文本,但这当然会更改按钮上的文本。

第二次尝试是用ON_WM_SETFOCUS()检查WM_SETFOCUS并保留以前的 wnd 并强制转换它并添加文本,但这只会更改我的对话框中的文本。

第三次尝试是将其移至我的CWnd,但据我所知,WM_SETFOCUS从未被调用过。

编辑:

在我的CWnd中尝试ON_WM_ACTIVATE ::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)。但这也不是所谓的。

有人知道接下来要尝试什么吗?

你刚刚回答了自己。正确的方法是:在处理

ON_COMMAND(...) 

每个按钮调用

pEdit->SetWindowText(_T("text"));. 

GetFocus()错了,因为它会返回按钮,因为当您单击它时,您刚刚完成将焦点放在它上面。您可以使用以下命令进行编辑

CEdit* pEdit= ( CEdit*) GetDlgItem(ID_OF_EDIT); 

其中ID_OF_EDIT是作为参数传递给CreateEx的值iId