我在对话框里建了很多个控件,我想在程序执行时,鼠标点在哪个控件上就删除哪个?这怎么判断鼠标点在哪个控件上呢?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1669/1669793.xml?temp=.8041803和里面我说的类似。得到那个控件的ID, if 中在一个个比较!
    做出其他操作。
      

  2.   

    first ,use WindowFromPoint can get window handle,then use GetClassName can get control class  name.
      

  3.   

    给你提供一个思路:
    1、做一个鼠标消息钩子,对你的程序中的所有的wm_lbuttondown消息进行过滤
    2、对钩到的每个消息用HWND WindowFromPoint(POINT& Point)
    通过win32定义的POINT结构
    typedef struct tagPOINT 
    {
       LONG x;
      LONG y;
      } POINT;
     
     来获得当前鼠标光标位置的窗口HWND,常规操作如下:先得到Cursor的POINT(BOOL GetCursorPos(LPPOINT)函数),再用WindowFromPoint。这样,我们几乎可以获得任何打开的有窗口的函数的HWND了!然后通过获取类名的win32 api函数(int GetClassName(  HWND hWnd,   LPTSTR lpClassName,   int nMaxCount ))得到类名——这里的lpClassName最好用字符数组地址,nMaxCount就是数组的size了,
     3、对于每个的到的符合条件的hwnd,
     ::ShowWindow(hwnd,SW_HIDE);
     ::DestroyWindow(hwnd);
     
     具体情况请查msdn
      

  4.   

    运行了你的程序?
    不明白你到底要怎么做?
    你是删除表达式树中的某一项呢?还是删除某个edit或者某个ccombobox???如果是前者,你在程序中已经基本上实现了呀?
    如果是后者,你已经使用了vector,那么你直接便利两个vector根据那个item有焦点
    就删除那个item不就行了
    还有你既然在程序中有托动不同的控件,你又怎么可能“鼠标点在哪个控件上就删除哪个?这怎么判断鼠标点在哪个控件上呢?
    话又说回来,你既然已经对你的控件用vector尽心了很好的组织,你想知道鼠标点的是那个控件不是一件很简单的事吗?直接用GetClassName()函数就行了!!!//----------------------------------------
    我想我还是没有弄明白你的意图?