【问题标题】:Get controller who has focus inside CWnd获取在 CWnd 中具有焦点的控制器
【发布时间】: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_SETFOCUSON_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 谢谢,您应该将其发布为答案。比我的评论更详细。

标签: c++ c mfc


【解决方案1】:

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

的函数上
ON_COMMAND(...) 

每个按钮调用

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

GetFocus()是错误的,因为它会返回按钮,因为当你点击它时,你刚刚完成将焦点放在它上面。您可以使用

进行编辑
CEdit* pEdit= ( CEdit*) GetDlgItem(ID_OF_EDIT); 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多