【问题标题】:Change CDialog controls focus from another dialog从另一个对话框更改 CDialog 控件焦点
【发布时间】:2014-05-20 15:20:28
【问题描述】:

我正在尝试使用 PostMessage 从 CFormView 更改 CDialog 控件的焦点:

[CHelpView 继承自 CFormView。 而m_wndDlg是一个CSampleDlg(继承自CDialog)对象]

void CHelpView::OnEnterbutton() 
{
    pSplitterFrame->m_dlgPane->m_wndDlg->PostMessage(WM_KEYDOWN, 'r', 2); 
}

BOOL CSampleDlg::PreTranslateMessage(MSG* pMsg) 
{
    if (pMsg->message >= WM_KEYFIRST && // for performance
        pMsg->message <= WM_KEYLAST)
    { 
         if (pMsg->wParam=='r' && pMsg->lParam==2){
            NextDlgCtrl();
            return TRUE; 
         }
    }
}

对话框收到消息,但 NextDlgCtrl 方法不改变焦点。我意识到,如果我更改 PreTranslateMessage 方法,以便在按下 Return 键时,在对话框中,此 NextDlgCtrl 方法会在用户每次点击返回键(从对话框中)时正确更改焦点。然而,我无法通过另一个对话来实现。

有没有人知道它背后的原因或任何提示或解决方法?

谢谢。

编辑:

这是来自 SPY++ 的对话框的(部分)日志文件。

0016013E R WM_GETDLGCODE fuDlgCode:0000

0016013E P WM_KEYDOWN nVirtKey:00726574 cRepeat:2 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

0016013E S WM_NEXTDLGCTL wCtlFocus:(null)(下一个控件接收焦点)fHandle:False

0016013E R WM_NEXTDLGCTL

0016013E S WM_GETDLGCODE

【问题讨论】:

  • 您是否在发布 KEYDOWN 后尝试发布 WM_KEYUP?这将更正确地模仿鼠标发生的事情。否则,请尝试使用 Spy++ 将消息捕获到对话框。
  • 感谢 rrirower。我不认为发送 KEYDOWN 消息会改变任何内容,因为这些参数仅用于在 PreTranslateMessage 中捕获此特定消息以调用 NextDlgCtrl。
  • 我还编辑了问题并添加了与消息相关的部分日志文件。
  • 你能确认PostMessage线上的流量吗?在其上设置断点并告诉我们执行是否停止。

标签: c++ mfc cdialog


【解决方案1】:

您编写的 PreTranslateMessage 处理程序将永远无法工作。这一行,

if (pMsg->wParam=='r' && pMsg->wParam==2){
            NextDlgCtrl();
            return TRUE; 

永远不可能是真的。 pMsg->wParam 如何同时等于两个值?我想你是想检查 lParam 吗?

【讨论】:

    【解决方案2】:

    您发布的 lParam 值为 2,但检查 '2' - 它们不一样!

    试试

    if (pMsg->wParam == 'r' && pMsg->wParam == 2)

    编辑:在rrrower的回答后实现:当然应该是

    if (pMsg->wParam == 'r' && pMsg->lParam == 2)
    

    【讨论】:

    • 这只是我在这里写错了。不过还是谢谢。
    • 对不起,大家不够小心。这些错误只有在我在这里写这个问题时才发生。在项目中,执行实际上到达了 NextDlgCtrl 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多