【发布时间】:2016-04-26 09:55:49
【问题描述】:
我有一个对话框,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 并添加文本,但这当然只是改变了我按钮上的文本。
第二次尝试是检查 WM_SETFOCUS 和 ON_WM_SETFOCUS() 并保留以前的 wnd 并投射它并添加文本,但这只会更改我对话框上的文本。
第三次尝试将其移至我的 CWnd,但据我所知,从未调用过 WM_SETFOCUS。
编辑:
在我的 CWnd 中尝试了 ON_WM_ACTIVATE 和 ::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)。
但这也没有被调用。
有人知道接下来要尝试什么吗?
【问题讨论】:
-
pEdit->SetWindowText... GetFocus 只是检索具有焦点的字段。在这种情况下,按钮。所以它没有帮助
-
您的窗口中只有 CEdit 吗?如果是这样,为什么不将该指针作为成员保留,然后在单击按钮时调用其
SetWindowText()? -
CEdit 不是屏幕上唯一的一个,面板大约容纳 5-10 个。但我找到了解决问题的方法。我不知道它是否可以用于其他人。但在 OnCommand 中,我可以检查 EN_SETFOCUS 并从 wParam 获取我的 ID,并从我的 ID 获取控制器。
-
你自己回答了。正确的做法是:在处理每个按钮的
ON_COMMAND(...)的函数上调用pEdit->SetWindowText(_T("text"));。GetFocus()是错误的,因为它会返回按钮,因为当您单击它时,您刚刚完成将焦点放在它上面。您可以使用CEdit* pEdit= ( CEdit*) GetDlgItem(ID_OF_EDIT);进行编辑,其中ID_OF_EDIT是您作为iId参数传递给CreateEx的值。 -
@sergiol 谢谢,您应该将其发布为答案。比我的评论更详细。