获取焦点在CWnd

时间:2016-04-26 09:55:50

标签: c++ c mfc

我有一个对话框,CFormView,它包含一些按钮和一个包含Tabcontrol,radiobuttons,文本输入字段等的面板。

所以,在我的面板上,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)。 但那也没有被召唤。

任何人都知道下一步该尝试什么?

1 个答案:

答案 0 :(得分:0)

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

的函数上
ON_COMMAND(...) 
每次按键调用

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

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

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

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