例如,
当mouse指向listctrl的第一行,第2列时,出现一个气泡窗口,上面写着“第一行,第2列提示信息”如何做到?谢谢

解决方案 »

  1.   

    使用CToolTipCtrl类,然后响应listctrl的 NM_CLICK 消息,在里面取到选定的行,调用CTooltipCtrl的AddTool方法~~把文字加进去,就OK了.
      

  2.   

    我是説,只有当mouse移动到指定的某一个框(比如,第一行,第2列,这个框时)才出现提示。这应该怎么做呢?例子程序好象都只是根据指定的控件的,而没有我説的这种情况?
      

  3.   

    也就是説,如果要使用CToolTipCtrl, 我现在要知道,如何才能得到某一个listctrl的某一个小矩形对应的窗口(比如,我要知道第一行,第二列,这个矩形对应的CWnd,这个如何得到呢?)
      

  4.   

    POSITION pos = m_list.GetFirstSelectedItemPosition();if (pos)
    {
      int n = m_list.GetNextSelectedItem(pos);//n就是当前行 }
      

  5.   

    添加listctrl控件的NM_CLICK消息相应函数
          void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
          {
               // 方法一:
               /*
               DWORD dwPos = GetMessagePos();
               CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
       
               m_list.ScreenToClient(&point);
       
               LVHITTESTINFO lvinfo;
               lvinfo.pt = point;
               lvinfo.flags = LVHT_ABOVE;
         
               int nItem = m_list.SubItemHitTest(&lvinfo);
               if(nItem != -1)
               {
                    CString strtemp;
                    strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
                    AfxMessageBox(strtemp);
               }
              */
       
              // 方法二:
              /*
               NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
               if(pNMListView->iItem != -1)
               {
                    CString strtemp;
                    strtemp.Format("单击的是第%d行第%d列",
                                    pNMListView->iItem, pNMListView->iSubItem);
                    AfxMessageBox(strtemp);
               }
              */
               *pResult = 0;
          }
      

  6.   

    to trueadou(木头龙) :你这种方法,没有使用CTooltipCtrl类啊。而且,你这种方法是使用::MessageBox,而不是气泡窗口。因为如果使用CTooltipCtrl类,是需要知道父窗口的指针的。我现在,就是不知道,listctrl的某一个小矩形对应的窗口指針......
      

  7.   

    晕,我只是贴个事例代码!
    而且我不认为这里可以使用CTooltipCtrl!你可以自己画一个气泡啊!!!
      

  8.   

    因为如果使用CTooltipCtrl类,是需要知道父窗口的指针的。我现在,就是不知道,listctrl的某一个小矩形对应的窗口指針......___________________________________________________________________干嘛要那个小矩形的指针?你就用ListCtrl指针就是了你的顶楼描述的情况按上面说的肯定可以实现
      

  9.   

    给你看个效果好了http://www5.freep.cn/Photo.aspx?url=photo5/0611161123053456.JPG---------------------------------------------------------------图片空间随便找的,点击之前最好开杀毒软件:)
      

  10.   

    干嘛要那个小矩形的指针?你就用ListCtrl指针就是了你的顶楼描述的情况按上面说的肯定可以实现
    ________________________________________________________________如果不得到这个矩形,那鼠标指向不同的行时,会显示不同的内容吗?如果以listctr指针,那鼠标不管指向listctrl的哪个位置,都显示的是同样的内容吧!!(如果用CTooltipCtrl类)如果自己画,
    cclutpk() ( ) ,能否把你给的那幅图的代码给我看一下?参考一下。
      

  11.   

    当鼠标指向listctrl的某一位置,可以获得当前鼠标位置的行、列(参考trueadou的代码,2种方法很详细),根据行列可以填充tooltip的文字再弹出显示,不知道有没有说明白。
      

  12.   

    to cclutpk() :trueadou的代码,是可以得到mouse所在的行、列。可是,怎么弹出气泡窗口呢?气泡还是要自己画啊。对吧?我想,自己画气泡可能不太好画。不是吗?
      

  13.   

    to cclutpk(),邮件已经收到,非常感谢,一会结贴。可我有个问题,你这个例子程序,必须是mouse点击才能显示气泡,而我需要是当mouse移动到某个小矩形时,就出现这个气泡,我看你用的是NM_CLICK消息处理函数,我试着使用NM_HOVER,可是不行,没有效果啊。
      

  14.   

    因为LISTCTRL控件不响应WM_MOUSEMOVE消息,所以要从CListCtrl派生一个类来响应WM_MOUSEMOVE
    新的代码发给你了
      

  15.   

    由衷的感谢以上所有人的热情帮助!
    尤其要感谢 cclutpk() !谢谢你,基本上满足了要求了,再次感谢。以后有问题,还要向你请教。