当鼠标在某一定范围移动时需要显示滑动条的值,并将该值显示在界面上;当拖动鼠标时需要画一个区域,并纪录该区域的起始位置和结束位置;当鼠标点击该区域时如何选中该区域?我已经作了一部分,但是效果不太好,请大家帮忙,有益的建议一定给分!!

解决方案 »

  1.   

    在消息映射函数里面写
    OnMouseMove(point)
    {
       .....
    }想怎么写怎么写。
      

  2.   

    GetCursorPos()获取当前点的坐标
      

  3.   

    希望楼主看一看windows程序设计一书,做为一个程序员,这一套书(2本)是完全有必要买的,而且,他是一套有价值的书
      

  4.   

    鼠标按下:保存起始坐标(GetCursorPos)
    鼠标抬起:保存终止坐标(GetCursorPos)
    鼠标移动:画框(GetCursorPos MoveToEx LineTo, 可以先在上次画线的位置上画一个白线用来覆盖上一次画的框)
      

  5.   

    下面是我针对鼠标处理的过程
    1、获取鼠标在某一区域内的位置,设置滑动条的位置,并显示在编辑框中
    2、鼠标按下时获取滑动条的位置
    3、鼠标放松时比较滑动条的位置,比较两个位置,从而决定哪个滑动条的位置的值大,将其显示在对应的编辑框中
    但运行后的效果发现:鼠标从左到右的时候显示左边位置的滑动条值,而鼠标从右边到左边的时候却是显示右边的值,我不知道下面的程序哪些地方出问题?void CFK_TParamSet8::OnMouseMove(UINT nFlags, CPoint point)
    {
             if(!(nFlags & MK_LBUTTON))
    {
    if((point.x > 26 && point.y > 132) && (point.x < 656 &&        point.y < 325))
    {
    m_nSliderTime.SetPos((point.x - 22)* 48 /632); pos = m_nSliderTime.GetPos();
    if(pos%2 ==0)
    {
    minute = 0;
    tStart.Format("%02d:%02d",pos * 24 /48,minute);
    GetDlgItem(IDC_EDIT_START_TIME)->SetWindowText(tStart);
    }
    else
    {
    tStart.Format("%02d:%02d",pos * 24 /48,minute);
    GetDlgItem(IDC_EDIT_START_TIME)->SetWindowText(tStart);
    }
    CBrush brush(RGB(128,128,128));
    oldBrush = dc.SelectObject(&brush);
    CPen pen1(PS_SOLID,1,RGB(128,128,128));
    oldPen = dc.SelectObject(&pen1);
    //dc.Rectangle(26,132,656,132+61); dc.SetTextColor(RGB(192, 64, 128)); dc.SetBkColor(RGB(0,0, 0));
    dc.SetBkMode(OPAQUE);//;(TRANSPARENT)
    if(point.x < 630)
    {
    //dc.SetROP2(R2_XORPEN);

    dc.TextOut(old_x,162,"         ");
    dc.TextOut(point.x,132+30,tStart);
    old_x = point.x;


    }
    else
    {
    dc.TextOut(old_x,162,"           ");
    dc.TextOut(point.x-40,132+30,tStart);
    old_x = point.x;
    }
    dc.SelectObject(oldBrush);
    dc.SelectObject(oldBrush);
    }
    }
    }void CFK_TParamSet8::OnLButtonDown(UINT nFlags, CPoint point)
    {
    if((point.x > 26 && point.y > 132) && (point.x < 656 && point.y < 325))
    {
    pos1 = m_nSliderTime.GetPos();
    //if(bControl)
    //{
    old_posvalue = pos1;
    // bControl = ~bControl;
    //}
    if(pos1%2 ==0)
    {
    minute = 0;
    tEnd.Format("%02d:%02d",pos1 * 24 /48,minute);
    GetDlgItem(IDC_EDIT_START_TIME)->SetWindowText(tEnd);
    //UpdateData(TRUE);
    }
    else
    {
    tEnd.Format("%02d:%02d",pos1 * 24 /48,minute);
    GetDlgItem(IDC_EDIT_START_TIME)->SetWindowText(tEnd);
    //UpdateData(TRUE);
    } }
    }void CFK_TParamSet8::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CString tEnd;
    int pos;
    int minute = 30;
    CPen   *oldPen;
    CBrush *oldBrush;
        CClientDC dc(this);
    if(((CButton *)GetDlgItem(IDC_RADIO_PEAK))->GetCheck())
    {
    //dc.SelectStockObject(BLACK_BRUSH);

    CBrush brush(RGB(255,0,0));
    oldBrush = dc.SelectObject(&brush); CPen pen1(PS_SOLID,1,RGB(255,0,0));
    oldPen = dc.SelectObject(&pen1);
    if((point.x > 26 && point.y > 132) && (point.x < 656 && point.y < 325))
    {
    pos = m_nSliderTime.GetPos();
    if(pos >= old_posvalue)
    {
    if(pos%2 ==0)
    {
    minute = 0;
    tEnd.Format("%02d:%02d",pos * 24 /48,minute);
    GetDlgItem(IDC_EDIT_END_TIME)->SetWindowText(tEnd);
    }
    else
    {
    tEnd.Format("%02d:%02d",pos * 24 /48,minute);
    GetDlgItem(IDC_EDIT_END_TIME)->SetWindowText(tEnd);
    }
    }
    else
    {
    if(old_posvalue%2 ==0)
    {
    minute = 0;
    tEnd.Format("%02d:%02d",old_posvalue * 24 /48,minute);
    GetDlgItem(IDC_EDIT_END_TIME)->SetWindowText(tEnd);
    }
    else
    {
    tEnd.Format("%02d:%02d",old_posvalue * 24 /48,minute);
    GetDlgItem(IDC_EDIT_END_TIME)->SetWindowText(tEnd);
    } } dc.SelectObject(oldBrush);
    dc.SelectObject(oldBrush);
    }
    }