如何建立一个类似Visual Studio风格的提示框,跟随鼠标进行基于语法字符串的自动匹配?
对于词头的自动完成好像要Using Autocomplete,而网上的例子都是基于comboBox control的有没有在文档编辑窗口进行Autocomplete的?另外它那个随鼠标弹出类似comboBox的小窗是怎么实现的?希望能有人提供例子或相关文章,记得很久以前曾有过相关的讨论。

解决方案 »

  1.   

    (转贴)很麻烦,还要区别是什么样的视,通常因为CHtmlView无法接受mouse消息,所以在CView中可以用的,在CHtmlView中不一定行。
    给你一点资料吧,在CView中可以用。CHtmlView中不行,其它的没试。  工具提示控制是一个小窗口,在其中显示单行文字用以描述应用程序中的工具的用途。这里的工具所指的既可以是窗口(如工具栏上的按钮),也可以是一个固定的区域。大家都知道利用APPWIZARD生成 的应用程序中工具栏带有提示,当你将鼠标放在工具栏某一个按钮上时,将显示一个小提示框告诉你按钮的功能,这种功能方便了软件的使用者。但是在视图区如何实现提示,这方面介绍的资料较少,我是在开发一个图像处理程序的时候遇到这个问题,当时我是想当鼠标放在图像上时,显示图像上对应像素点的灰度值,后来查了一些资料,终于将它解决了,现在将这个方法介绍给大家,希望对朋友们有所帮助。  首先声明一个CtoolTipCtrl类的变量,调用Create函数创建工具通用提示,并将它附在CtoolTipCtrl对象上,然后调用CtoolTipCtrl类的AddTool函数注册工具提示控制,从而为光标放在规定的窗口或区域内时显示工具提示做准备。该函数的原形为:BOOL AddTool( CWnd* pWnd,LPCTSTR lpszText, LPCRECT lpRectTool, UINT nIDTOOL );其中pWnd为指向包含工具提示控制的窗口指针,lpszText为所要在工具提示中显示的文字,lpRectTool为工具书提示所对应的窗口或规定区域,nIDTOOL为工具提示的标志号。在调用CtoolTipCtrl类的Active函数激活提示。最后要作的工作是重载工具提示父窗口的WindowPorc函数,调用CtoolTipCtrl类的RelayEvent函数将鼠标消息传递给工具提示控制对象。以在视图区显示对应点的坐标为例,给出了实现代码:// TestView.cpp : implementation of the CTestView class
    ………..
    //在文件头定义的全局变量
    CToolTipCtrl m_ToolTip;//工具提示对象
    char string[50];//用来存放提示文字
    CRect rect;//用来存放工具提示所对应的窗口的尺寸
    #define IDC_CONST 12345//定义的工具提示标志号,注意不要和系统冲突
    void CTestView::OnMouseMove(UINT nFlags, CPoint point) 
    {
     // TODO: Add your message handler code here and/or call default
     wsprintf(string,"%d,%d",point.x,point.y);
     GetClientRect(&recty);
     m_ToolTip.AddTool(this,string,&rect,IDC_CONST);
     m_ToolTip.Activate(TRUE);
     CView::OnMouseMove(nFlags, point);
    }
     LRESULT CTestView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
     // TODO: Add your specialized code here and/or call the base class
     switch(message)
      {case WM_LBUTTONDOWN:
       case WM_RBUTTONDOWN:
       case WM_MBUTTONDOWN:
       case WM_LBUTTONUP:
       case WM_MBUTTONUP:
       case WM_RBUTTONUP:
       case WM_MOUSEMOVE:
       {MSG msg;
        msg.hwnd=m_hWnd;
        msg.message=message;
        msg.wParam=wParam;
        msg.lParam=lParam;
        m_ToolTip.RelayEvent(&msg);
       }
      }
      return CView::WindowProc(message, wParam, lParam);