当鼠标在某一定范围移动时需要显示滑动条的值,并将该值显示在界面上;当拖动鼠标时需要画一个区域,并纪录该区域的起始位置和结束位置;当鼠标点击该区域时如何选中该区域?我已经作了一部分,但是效果不太好,请大家帮忙,有益的建议一定给分!!
解决方案 »
- MFC 0基础,请问前辈们
- 如何用directsound实现音量调节
- 关于cstring的类型转换后读取
- 线程不能返回的问题!
- 请问CreateCompatibleBitmap能最大创建多大的位图
- 如何改变静态文本框中的文字
- 有谁能给我点学vc的建议
- 哪有ActiveX Controls Inside Out by Adam Denning (also published by Microsoft Press).
- 有想找VC程序员合作,最好是杭州的
- 小问题一个
- const char* getString = "这是UTF格式的字符串", 如何将UTF格式的字符串转换成一般情况下的字符串???
- 我想看一个调试的中间结果,怎么弄啊?
OnMouseMove(point)
{
.....
}想怎么写怎么写。
鼠标抬起:保存终止坐标(GetCursorPos)
鼠标移动:画框(GetCursorPos MoveToEx LineTo, 可以先在上次画线的位置上画一个白线用来覆盖上一次画的框)
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);
}
}