请教大家两个问题:
1.一个基于MFC的对话框,按下回车之后会消失。然后我改写了PreTranslateMessage
BOOL CDfggDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == 0x0d)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
这时就不会消失了,恩,我理解,没有被DispatchMessage,但是我改成return FALSE之后按照我的理解应该还是消失的,但事实上并没有消失,奇怪了,return FALSE,不是表明继续分发吗?
2.一个基于MFC的对话框程序,上面有一个Edit控件。在Dlg::OnLButtonDown()中SetFocus(...)为什么Edit上的焦点还是在呢?
1.一个基于MFC的对话框,按下回车之后会消失。然后我改写了PreTranslateMessage
BOOL CDfggDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == 0x0d)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
这时就不会消失了,恩,我理解,没有被DispatchMessage,但是我改成return FALSE之后按照我的理解应该还是消失的,但事实上并没有消失,奇怪了,return FALSE,不是表明继续分发吗?
2.一个基于MFC的对话框程序,上面有一个Edit控件。在Dlg::OnLButtonDown()中SetFocus(...)为什么Edit上的焦点还是在呢?
2SetFocus(...)到哪?焦点问题有点复杂吧,在SDK里面也不是能很想当然的使用。
是因为,界面能关掉,是下面的 return CDialog::PreTranslateMessage(pMsg);
这句话,里面的操作让界面关掉了,你return false;没有关掉,是因为后面的代码没有运行
你的dialog的基类 CDialog,如果他处理了 VK_RETURN 就会关掉,你直接 return 了,不管你return true还是false ,这句没有运行,return CDialog::PreTranslateMessage(pMsg);
就这么简单,如果这句你放在函数的开头,你后面的操作会起作用吗?不管你怎么return 都没用了吧这个问题很好理解,理解了派生就明白了第二个问题,我是这样理解的,你的edit控件是mfc的子窗口,他是当前焦点,那你的mfc界面的标题栏也是亮的吧,说明你的edit的父窗口当前也是焦点,这种关系的,子控件是焦点时,父窗口也是,你设置窗口上的另一个edit得到焦点,我想先前的焦点就不在了