各位大虾,大家好啊。俺弄这个东西弄了好几个天数了,可是还是没搞定。俺想弄一个类似QQ宠物的那样的喂养菜单出来。试过用Ontimer和OnMouseMone了,都不行。俺是想在鼠标进入到一个对话框的时候,然后出现第二个对话框。鼠标离开后那个对话框就自动关闭或者消失。但是用dlg.DoModal(),出现后鼠标离开就没反应了。下面是代码:
//处理鼠标移动消息,鼠标进入bar内
void CQuickBarDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default CRect Mrect;
CFunDLG dlg;
GetWindowRect(&Mrect); //鼠标进入bar
if (!m_MOverControl||GetCapture()!=this)
{
m_MOverControl=true;
  dlg.Create(IDD_FUNDLG);
  dlg.ShowWindow(SW_SHOWNORMAL);
  SetCapture();

else
{
//鼠标离开
if (!Mrect.PtInRect(point))
{
m_MOverControl=false;
ReleaseCapture();
}
} CDialog::OnMouseMove(nFlags, point);
}

解决方案 »

  1.   

    谢谢,那个类似QQ宠物的菜单图片在附件里面。还有就是用上面的代码鼠标进入就会发生闪烁。离开的代码我删除了。谢谢了。如果不用Dialog,可以用其他方法解决也可以,谢谢大家帮忙
      

  2.   

    QQ宠物是一个不规则窗体。还有,你SetCapture之后,应该在适当的位置ReleaseCapture。还有宠物那个右键弹出喂养指南菜单也是和正常窗口右键弹出菜单一样的
      

  3.   

    ReleaseCapture有啊。正常右键菜单?应该不是啊,那个是鼠标进入宠物的范围了,然后出现的几个按键的那一小排哦。那个应该是用什么做的呢?
      

  4.   

    不知道LZ解决了没?
    这样就不闪了。
    闪是因为不停的
    dlg.Create(IDD_FUNDLG);
    dlg.ShowWindow(SW_SHOWNORMAL);具体的功能自己实现吧void CQQDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CRect rect;
    GetClientRect( &rect );
    if ( rect.PtInRect( point ) || GetCapture() != this )
    {
    SetCapture();
    if ( !m_dlg.m_hWnd )
    {
    m_dlg.Create( IDD_NEWDLG );
    m_dlg.ShowWindow( SW_SHOW );
    } }
    else
    {
    ReleaseCapture();
    if ( m_dlg.m_hWnd )
    {
    m_dlg.ShowWindow( SW_HIDE );
    m_dlg.DestroyWindow();
    }
    }
    CDialog::OnMouseMove(nFlags, point);
    }
      

  5.   

    if (!m_MOverControl||GetCapture()!=this)
        {
          if(m_MOverControl==false){
            m_MOverControl=true;
             dlg.Create(IDD_FUNDLG);
             dlg.ShowWindow(SW_SHOWNORMAL);
             SetCapture();
           }
        } 
    不行么?
    如果设断点的话,他还是在一直构造?
      

  6.   

    回:shaxing 兄试用了你的代码还是不行,继续闪。好像都跳过了那个if(!m_dlg.m_hWnd)了
    这个都没判断的说 
      

  7.   

    那你设了断点
     if(m_MOverControl==false判断是否有效
    也就是是否反复执行这里面的内容?
      

  8.   

    Windows中鼠标进入消息不存在,只有MOSEMOVE消息,应该判断首次进入窗口消息,请参考http://blog.csdn.net/flower/archive/2000/09/26/4849.aspx,希望有所帮助