定义画笔宽为5   m_penPlot.CreatePen(PS_SOLID,5,RGB(0, 0, 0))
//----------------------------------------------------------------------------
//----------------------------鼠标左键起来响应函数----------------------------
//----------------------------------------------------------------------------
void CWordWrite::OnLButtonUp(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
//鼠标左键抬起时,上一个点置为无效
m_ptPrevious.x = -1;
m_ptPrevious.y = -1;
if(falgB==1)
{
m_nBihua++;
falgB=0;
}
CStatic::OnLButtonUp(nFlags, point);
}//----------------------------------------------------------------------------
//----------------------------鼠标移动响应函数--------------------------------
//----------------------------------------------------------------------------
void CWordWrite::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
//检查是否鼠标左键被按下
if(nFlags == MK_LBUTTON)
{
//首先判断上一个点是否有效
if(m_ptPrevious.x == -1)
{//无效
m_ptPrevious = point;
}
else
{//有效
//选择画笔
CPen *oldPen = m_dcPlot.SelectObject(&m_penPlot);
//画线
m_dcPlot.MoveTo(m_ptPrevious);
m_dcPlot.LineTo(point);
m_ptPrevious = point;
m_dcPlot.SelectObject(oldPen);
//重绘图像
Invalidate(); falgB=1;  //笔画数标志为1

//---获得每一笔划上每一点的坐标
store[m_nBihua][m_nDian].x=point.x;
store[m_nBihua][m_nDian].y=point.y;
m_nDian++;//点 数加1 //---获得最外点
if(point.x>xmax)
xmax=point.x;
if(point.x<xmin)
xmin=point.x;
if(point.y>ymax)
ymax=point.y;
if(point.y<ymin)
ymin=point.y;
}
}
else//-------鼠标在非控件区域放开时,上一个点无效--------
{
m_ptPrevious.x = -1;
m_ptPrevious.y = -1;
} CStatic::OnMouseMove(nFlags, point);
}
大家帮看下我上面获取图像的 像素点数(m_nDian)和图形最外围(xmax,xmin,ymax,ymin)是否有问题??我在另外一个函数中,将获得的图像最外围 长和宽分为3等分
x1=xmin+(xmax-xmin)/3;
x2=x1+(.xmax-xmin)/3;
y1=ymin+(ymax-ymin)/3;
y2=y1+(ymax-ymin)/3;
[code=C/C++]
for(i=0;i<15;i++)//根据记录得到的每笔画上点坐标比较,获得9个小分区中点的个数
{
for(j=0;j<300;j++)
{
if((m_ctrlPic.store[i][j].x>=m_ctrlPic.xmin) && (m_ctrlPic.store[i][j].x<x1))
{//0,3,6区像素点数
if((m_ctrlPic.store[i][j].y>=m_ctrlPic.ymin) && (m_ctrlPic.store[i][j].x<y1))
{
Rnum[0]++;//0区像素加1
sum++;//总像素加1
}
if((m_ctrlPic.store[i][j].y>=y1) && (m_ctrlPic.store[i][j].x<=y2))
{
Rnum[3]++;//3区像素加1
sum++;//总像素加1
}
if((m_ctrlPic.store[i][j].y>y2) && (m_ctrlPic.store[i][j].x<=m_ctrlPic.ymax))
{
Rnum[6]++;//6区像素加1
sum++;//总像素加1
}
}if((m_ctrlPic.store[i][j].x>=x1) && (m_ctrlPic.store[i][j].x<=x2))
{//1,4,7像素点数
if((m_ctrlPic.store[i][j].y>=m_ctrlPic.ymin) && (m_ctrlPic.store[i][j].x<y1))
{
Rnum[1]++;//1区像素加1
sum++;//总像素加1
}
if((m_ctrlPic.store[i][j].y>=y1) && (m_ctrlPic.store[i][j].x<=y2))
{
Rnum[4]++;//4区像素加1
sum++;//总像素加1
}
if((m_ctrlPic.store[i][j].y>y2) && (m_ctrlPic.store[i][j].x<=m_ctrlPic.ymax))
{
Rnum[7]++;//7区像素加1
sum++;//总像素加1
}
}if((m_ctrlPic.store[i][j].x>x2) && (m_ctrlPic.store[i][j].x<=m_ctrlPic.xmax))
{//2,5,8像素点数
if((m_ctrlPic.store[i][j].y>=m_ctrlPic.ymin) && (m_ctrlPic.store[i][j].x<y1))
{
Rnum[2]++;//2区像素加1
sum++;//总像素加1
}
if((m_ctrlPic.store[i][j].y>=y1) && (m_ctrlPic.store[i][j].x<=y2))
{
Rnum[5]++;//5区像素加1
sum++;//总像素加1
}
if((m_ctrlPic.store[i][j].y>y2) && (m_ctrlPic.store[i][j].x<=m_ctrlPic.ymax))
{
Rnum[8]++;//8区像素加1
sum++;//总像素加1
}
}
}[/code]但发现 sum并不和m_nDian相同!!!!
而且若是我画一根直线,发现得到的ymax会和ymin相等!!!
内容多了点,求好心人带看看!!!

解决方案 »

  1.   

    你的最外面的xmax那4个值和sum是不是都初始化了,还有你画直线如果是沿着x轴画的那ymax盒ymin就相等的
    再就是你在移动鼠标的时候是否应该判断一下你当前点是否重复了以前的轨迹,这样的话m_nDian就重复累加了 感觉好像没有其它问题,如果这些都没问题再看下sum和m_nDian差的数值是否是你整个区域的边界,但感觉好像不是这的问题
      

  2.   

    初始化了,我沿x轴画直线,的确ymax=ymin,但这样一来原本宽为5的就变成了1了,像素点就会少了很多了,
    重复轨迹的我也想到了,还没去解决,只是我将sum和m_nDian调出来,比较下,相差太大了,变化也大。基本都是m_nDian更大,画直线时有时刚好是5倍。