【问题标题】:If mouse movement detected, show cursor in a dialog window C++ MFC如果检测到鼠标移动,则在对话窗口中显示光标 C++ MFC
【发布时间】:2016-03-01 17:23:21
【问题描述】:

用 C++ MFC 编写的程序有一个 Dialog Window,可以播放全屏视频,并且光标是隐藏的。

  1. 我想在鼠标移动时显示光标 (视频正在后台播放)

  2. 鼠标不活动 3 秒后光标消失(视频 还在玩)

示例:就像任何处于全屏模式的视频播放器一样,如果鼠标处于非活动状态,则控件会被隐藏,并且鼠标移动会恢复控件。

我试过了

if(WM_MOUSEMOVE)
{ShowCursor(TRUE)}

BOOL CDialog1::OnInitDialog()

但即使没有鼠标移动它也会显示 (TRUE)。

谢谢!

【问题讨论】:

    标签: c++ mfc cursor detect mousemove


    【解决方案1】:

    这段代码:

    I have tried if(WM_MOUSEMOVE) {ShowCursor(TRUE)
    
    } in the BOOL CDialog1::OnInitDialog()
    

    看起来如果它是一个伪代码,if(WM_MOUSEMOVE) 等同于if(true)

    你应该做的是捕捉WM_MOUSEMOVE 消息然后显示你的光标,仍然在这个消息处理程序中设置一个计时器,例如3秒,在计时器处理程序中隐藏你的光标。请记住,每次收到WM_MOUSEMOVE 时都要重新创建计时器,以便将其重置为从头开始重新计数。

    我没有详细说明,因为这个问题不是关于如何使用 MFC 接收消息,对吧?您不会在OnInitDialog 中捕获消息。


    BOOL CDlg::PreTranslateMessage(MSG* pMsg)
    {
      if (pMsg->message == WM_MOUSEMOVE)
      {}
      return CDialogEx::PreTranslateMessage(pMsg);
    }
    

    【讨论】:

    • 是的,我可能没有在问题中提到这一点,我在哪里可以看到 MouseMove 消息?定义 HRESULT 或 HCURSOR 函数?
    • BEGIN_MESSAGE_MAP(CFlickyFull, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() void CFlickyFull::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此处添加您的消息处理程序代码并/ 或调用默认 ShowCursor(TRUE);如果我移动鼠标,它应该进入功能(MouseMove)?当我执行它时不会发生这种情况。
    • @mrudulaw 我想一些子控件正在吃这个消息,你可以尝试在 PreTranslateMessage 中捕获它,例如查看我的答案。
    • 好的,现在它捕捉到了,但它在视频播放和停止后捕捉。我已经在 OnPaint() 中编写了视频播放代码。
    猜你喜欢
    • 2021-09-02
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多