我的主窗口上有6个static控件,我新建了个基于CStatic的CMyStatic类用来重载左键双击和右键点击消息,由于无论哪个被点击了都会响应重载的消息,目前问题是我怎么确定左键双击或右键点击了哪个static控件呢? 
根据控件坐标判断哪个被点击了的方法不要,请问有其他的解决方法吗?
在线等

解决方案 »

  1.   

    可以考虑static控件上的文本来判断吗?
      

  2.   

    响应每个控件的消息时,this指针是不同的,类中的非静态成员也都是相互独立的。
      

  3.   

    你建了多个static对象,每次响应消息时,响应的是对应对象的消息函数,你处理哪个对象,就是点击的对应那个..
      

  4.   

    听你这么一说我就明白了,不过还有一个疑问请叫下,
    比如说我选择了一个static控件,然后点了另外一个button键,这个button是对static控件进行操作的,我怎么判断在我点button之前是选择了哪个控件呢?
      

  5.   

    窗口类中用一个变量记录当前选中的是哪个static控件。
      

  6.   

    各位大哥,最后一个问题...
    我是想双击后将这个static控件变大,类似全屏,这时候需要把其他控件隐藏起来
    就这样出了问题,因为主界面是的控件用了CMyStatic类的,所以包了它,然后我双击响应是在CMyStatic执行文件里面的,所以就这样,我在CMyStatic里的双击响应消息中调用主窗口的函数(功能是其他的控件隐藏),就隐藏 GetDlgItem(IDC_VIDEO)->ShowWindow(nChoose); 这样的语句出错了,请问下是什么问题?
      

  7.   

    GetDlgItem(IDC_VIDEO) 估计得到的控件对象指针等不正确...检查一下
      

  8.   

    用GetSafeHwnd()来区分是哪个,每个static的HWND肯定不一样
      

  9.   

    郁闷 网卡的要死 急死了,这属于另外的问题了,明天结帖
    我的情况是这样的 主窗口的头文件包含了CMyStatic的头文件,CMyStatic的cpp文件又包含了主窗口的头文件,这样会出问题吗
    然后void CMyStatic::OnLButtonDblClk(UINT nFlags, CPoint point) //双击消息响应的
    {
        OnFullscreen(); //这个是我的全屏函数  
    }
    void CMyStatic::OnFullscreen() 
    {
    // TODO: Add your command handler code here

    CScrutinyDlg dlg;

    dlg.OperAllControls(nFullFlag); //这个函数是隐藏文件的
            //内容全是这样的,GetDlgItem(IDC_VIDEO)->ShowWindow(nChoose);
                                                 //nFullFlag 是全屏标志 
    if (nFullFlag == 0)
    {
    nFullFlag = 1;
    this->ShowWindow(nFullFlag);
    this->MoveWindow(CRect(0,0,1024,768), TRUE);
    }
    else
    {
    nFullFlag = 0;
    this->ShowWindow(nFullFlag);
    CRect rect;
    this->GetClientRect(&rect);
    this->MoveWindow(&rect, TRUE);
    }
    }然后就是dlg是空的,所以就出错了
      

  10.   

    全屏之前要先把static的父窗口设置为NULL(桌面),同时去掉WS_CHILD和所有跟标题栏相关的风格(去掉标题栏和边框),否则窗口位置改得再大也会被对话框父窗口截断(不能超出父窗口客户区的范围)
      

  11.   

    CScrutinyDlg dlg;
    光声明了一个dialog变量,还没有创建对话框
    你需要用DoModal(), 或Create() ... ShowWindow等方式来创建,显示对话框
      

  12.   

    胡大哥这样说吧,我即使不全屏,只是在双击某static控件后隐藏其他的控件,就会出错,dlg值是空的,不知道怎么回事
    另外全屏的问题我换了个方法我是新建了一个对话框用来专门显示全屏后的结果,但是我想问怎么在外面就可以关闭掉对话框,里面的函数调用也行
      

  13.   

    这个CScrutinyDlg 是我的主窗口,也需要DoModal()吗?我只是想调用里面的一个函数
      

  14.   

    你要操作控件啊? 你不创建对话框,控件都没有创建Create,你后面GetDlgItem()返回的指针就会空了...
      

  15.   

    包含头文件只会影响编译,不会影响程序的运行。
    CScrutinyDlg dlg只是构造了一个CScrutinyDlg类对象,并不是程序显示的窗口。如果CScrutinyDlg是static控件的父窗口,应该这样:
    CScrutinyDlg* dlg = (CScrutinyDlg*)GetParent();
    如果不是,可以这样:
    CScrutinyDlg* dlg = (CScrutinyDlg*)AfxGetMainWnd();
      

  16.   

    CScrutinyDlg* dlg = (CScrutinyDlg*)AfxGetMainWnd(); 
    最后是这个方法弄好了,恩主要是今天网络太差太慢,现在结贴