这是一个CSDN出问题之后消失的帖子,好在我备份了^_^帖子大家不用回答了,因为我已经在那个时候得到满意的答案并且结贴了.希望A_QIAO(),kongyunzhongque(云雀),_foo(void)进来领分,相信我以前给你们的分,被这次的冲击都搞没了...
我以前给你们少了(每个人少于10分的*-*),今天给你们每人10分.

解决方案 »

  1.   

    希望A_QIAO(),kongyunzhongque(云雀),_foo(void)来跟贴,跟完贴之后,我才会把已结贴,并得到满意回复的帖子贴上来...希望你们早点看到,他人请勿回此贴~~谢谢
      

  2.   


      CSDN - 专家门诊 - VC/MFC 界面问题  
     回复 | 推荐 | 收藏 | 专题 | 公告 | 管理 | 保存 | 关闭窗口   
     
     
    主  题:  如何在MDI客户区窗口响应鼠标双击消息? 
    作  者:  huyoo (空格键)  
    等  级:    
    信 誉 值:  100 
    所属论坛:  VC/MFC 界面 
    问题点数:  20 
    回复次数:  15 
    发表时间:  2004-5-15 4:48:26 大家知道,在PhotoShop中的客户区双击鼠标的话,将会弹出打开文件对话框;按住CTRL并双击鼠标的话,会执行新建命令.
    我的目的就是,在MDI窗口的客户区中响应鼠标双击消息.
    看了《深入MDI客户窗口编程》(在CSDN中有)之后, 我重载了PreTranslateMessage(MSG* pMsg)函数.使它能够在消息发送到TranslateMessage()和DispatchMessage() 函数以前预先解释消息.
    可以重载该函数截获MDI客户窗口WM_LBUTTTONDBLCLK消息,我是这样做的:
    1.在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CMDIFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    return TRUE;
    }
    中添加cs.style|=CS_DBLCLKS;以防MDI窗口不响应双击消息.
    2.重载PreTranslateMessage(MSG* pMsg)函数
       添加代码如下:
    BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
    {
          //if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_LBUTTONDOWN)
    //PostMessage(WM_LBUTTONDOWN);
           //我在这里注释掉拦截鼠标单击的消息,是因为客户区响应了鼠标单击的消息
           //而没有响应鼠标双击的消息       if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_LBUTTONDBLCLK)
    PostMessage(WM_LBUTTONDBLCLK);
         return CMDIFrameWnd::PreTranslateMessage(pMsg);
    }
    3.在CMainFrame中添加WM_LBUTTONDOWN和WM_LBUTTONDBLCLK消息的响应:
    void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    AfxMessageBox("客户区单击鼠标了!");
    CMDIFrameWnd::OnLButtonDblClk(nFlags, point);
    }
    void CMainFrame::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    AfxMessageBox("客户区双击鼠标了!");
    CMDIFrameWnd::OnLButtonDblClk(nFlags, point);
    }
    4.编译,通过了!
    >>>>>>>执行,关掉新建的文档,测试结果:
    #单击鼠标左键:没反应
    #双击鼠标左键:没反应
    5.将CMainFrame::PreTranslateMessage(MSG* pMsg)中取消对WM_LBUTTONDOWN的注释,编译通过并执行,关掉新建的文档,测试结果:
    #单击鼠标左键:弹出对话框
    #双击鼠标左键:没反应我不知道该怎么办了,请大家帮助我!!!!!SOS!!!
    谢谢大家里!!!
    huyoo@2004/5/15  
     
     ---------------------------------------------------
     回复人: enoloo(行者无疆) ( ) 信誉:102  2004-5-15 8:15:59  得分:0  
      
    if(pMsg->hwnd==GetActiveFrame() ->GetActiveView()->m_hWnd && pMsg->message==WM_LBUTTONDBLCLK)
    正常childframe是不接收dbclick的,他的视图接收。你可以处理视图的dbclick,然后发消息给app,通知建立新文档。//我搜了,找不到,楼主可否给个连接,谢谢~
    ---------------------------------------------------
     
     回复人: huyoo(空格键) ( ) 信誉:100  2004-5-15 10:23:04  得分:0  
      
    测试中...childframe的视图View是接收DBClick,但是我要的不是这个,因为一个childframe就是一个新文档,而不是MDI窗口的客户区.哇,像 enoloo(行者无疆) 所说,在第二步中那样改,结果在进行第四步:4.编译,
    >>>>>>>执行,关掉新建的文档,测试结果:一点ChildFrame的关闭按钮,就出现MDIClientMSG.exe发生错误需要关闭,问我要不要发送报告.$%^$^&*(省去若干抱怨字数...)我要的效果就是无论在MainFrame中有没有ChildFrame(子文档窗口),只要露出一部分MDIClient客户区,双击那灰色的MDIClient客户区,就弹出打开文件对话框.^_~//我搜遍了CodeProject和CodeGURU,没有发现有这方面的文章和例子.(!_!)
    //中国的网站就更不用说了.@_@你说它(MDIClient客户区)为什么就能够响应鼠标单击(无论左右键)呢,就是不肯响应左键单击(也是无论左右键)呢?期待那位大侠解决ing...huyoo@2004/5/15/10:10:18---------------------------------------------------