class CMyDlg : public CDialog
  {
  public:
  CToolTipCtrl m_ToolTips;
  ...............
  };  BOOL CMyDlg::OnInitDialog()
  {
  CDialog::OnInitDialog();  // TODO: Add extra initialization here  CButton *pButton;
  pButton=(CButton *)GetDlgItem(IDC_BUTTON1);
    m_ToolTips.Create(this);
  m_ToolTips.AddTool(pButton,"This is a ToolTips text for this Button");
  return TRUE;  // return TRUE  unless you set the focus to a control
  }
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
  {
      AfxMessageBox("跪求你弹信息框吧!!!!!");      m_ToolTips.RelayEvent(pMsg);
  
  return CDialog::PreTranslateMessage(pMsg);
  }VC好蛋疼 为什么连个鼠标移动到控件上提示信息都没 哎~~ 这代码 我在EXE上测试没问题。搬到DLL窗体上就无效了 反复检查没问题。
然后调试。。在 PreTranslateMessage下断 一点断都没断到 在EXE上 一断就断到了。现在也加了个AfxMessageBox 也是不弹。。为什么  有什么方法可以代替PreTranslateMessage吗跪求大神调教。。注:是在DLL窗体上无效 DLL注入

解决方案 »

  1.   

    seehttp://ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vclib/html/4f68f1eb-c727-4869-8cac-d19bcfa9a934.htmCWnd::IsDialogMessage 
    See Also  Send Feedback 
     Call this member function to determine whether the given message is intended for a modeless dialog box; if it is, this function processes the message.
    Return Value
    Specifies whether the member function has processed the given message. It is nonzero if the message has been processed; otherwise 0. If the return is 0, call the CWnd::PreTranslateMessage member function of the base class to process the message. In an override of the CWnd::PreTranslateMessage member function the code looks like this :
      

  2.   

    可以说具体点吗 怎么解决 比如什么对话框可以解决? 
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    pdlg=new CdlgDll();
    pdlg->Create(IDD_DLG_MAIN);
    pdlg->ShowWindow(TRUE);  
      

  3.   

    根本不用 CToolTipCtrl m_ToolTips;
    对话框 自带 一个 TT
    Enable 一下就可以了
      

  4.   


    你在说什么。。Enable  不是是设置控件是否可以点亮的吗。 我是要提示鼠标移动到控件提示信息
      

  5.   

    CWnd 的方法 EnableTooltips 可以启用该窗口的Tooltip,使该窗口中的子控件可以出现工具提示:
    BOOL EnableTooltips(BOOL bEnable = TRUE);
    对话框也是这样
      

  6.   

     的确是 
    pdlg=new CdlgDll();
    pdlg->Create(IDD_DLG_MAIN); 创建的对话框 这个函数不响应
    pdlg->ShowWindow(TRUE);   
    pdlg->Domodal(); 创建模态对话框就可以但我想要Create 创建的 
      

  7.   

    的确是 
    pdlg=new CdlgDll();
    pdlg->Create(IDD_DLG_MAIN); 模态创建的对话框 PreTranslateMessage 函数不响应
    pdlg->ShowWindow(TRUE);   
    pdlg->Domodal(); 创建非模态对话框就可以但我想要Create 创建的
      

  8.   

    非模态对话框, 与 主对话框 共享一个 消息 队列。pdlg->Create(IDD_DLG_MAIN); 非模态创建的对话框 PreTranslateMessage 函数不响应是当然的。
      

  9.   

    对话框中 响应
    OnToolTipNotify
      

  10.   

    对话框初始化中要:
    BOOL EnableTooltips(BOOL bEnable = TRUE);断点在OnToolTipNotify
      

  11.   

    pdlg=new CdlgDll();
    pdlg->Create(IDD_DLG_MAIN); 非模态创建的对话框 PreTranslateMessage OnToolTipNotify函数不响应
    pdlg->ShowWindow(TRUE);   
    pdlg=new CdlgDll();
    pdlg->Domodal(); 模态创建的对话框 PreTranslateMessage OnToolTipNotify  才响应
    pdlg->ShowWindow(TRUE);  
      

  12.   

    但我需要
    pdlg->Create(IDD_DLG_MAIN); 创建对话框啊   到底怎么样才可以啊 晕死 2天了 都搞不懂
      

  13.   

    你是MFC规则DLL喽?
    导出函数是什么?
    pdlg=new CdlgDll(); pdlg->Create()这些语句放在哪里?
      

  14.   

    dll自己创建个线程 自己消息循环
      

  15.   

    问题已经解决 虽然没正确答案 我说下吧LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)//钩子回调函数
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());  LPMSG lpMsg = (LPMSG) lParam;  
     if(AfxGetApp()->PreTranslateMessage(lpMsg))    
     {               
     lpMsg->message = WM_NULL;   
     lpMsg->lParam = 0L;      
     lpMsg->wParam = 0;      
     }   
    自己安装个钩子 监控鼠标移动的消息
      

  16.   

    VC真的好复杂 控件显示还得自己搞钩子去HOOK
      

  17.   

    其实对 MFC 而言,都是用的 Create 即 非模态, 模态是 用 非模态来 仿真的。
      

  18.   

    tooltip
    .h
    virtual BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
    .cpp
    BEGIN_MESSAGE_MAP(CChildDlg2, CDialog)
    //{{AFX_MSG_MAP(CChildDlg2)
    //}}AFX_MSG_MAP
    ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)
    END_MESSAGE_MAP()BOOL CChildDlg2::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here
    EnableToolTips();
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }BOOL CChildDlg2::OnToolTipNotify(UINT id,NMHDR *pNMHDR,LRESULT *pResult)
    {
        TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
        UINT nID =pNMHDR->idFrom;
        if (pTTT->uFlags & TTF_IDISHWND)
        {// idFrom is actually the HWND of the tool
            nID = ::GetDlgCtrlID((HWND)nID);
            if(nID)
            {
                pTTT->hinst = AfxGetResourceHandle();
        pTTT->lpszText = MAKEINTRESOURCE(nID);// "1=IDOK, 2=IDCENCEL"
                return(TRUE);
            }
        }
        return(FALSE);
    }