说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请帮忙解决一下这个问题!

编辑:说三道四文库 发布时间:2018-08-17 06:03
HTML文档下载 WORD文档下载 PDF文档下载
我现在想在FormView的主界面画一个仪表,下面对应一个编辑框,每次在文本框输入变化的时候,让其指针指向表头的对应位置,以标明大概的表的示数!
画的表头在Ondraw函数里面:Ondraw函数里面有个WriteWord子函数,它的作用就是在表头上表刻度。
void CMy212TestPlatView::OnDraw(CDC* pDC) 
{   
  //电流表表头
    {CBrush br,*pOldBrush;
br.CreateSolidBrush(RGB(0,0,0));
    pOldBrush=pDC->SelectObject(&br);
CPen pen1,*pOldPen,pen2(PS_SOLID,6,RGB(0,0,0));
pen1.CreatePen(PS_SOLID,5,RGB(255,255,255));
    pOldPen=pDC->SelectObject(&pen1);
pDC->Rectangle(10,40,200,300);
pDC->MoveTo(10,170);
pDC->LineTo(200,170);
pDC->Pie(45,80,165,170,165,125,45,125);//椭圆圆心坐标为(105,125)

//画表头的标尺
    
pDC->MoveTo(45,122);
pDC->LineTo(35,122); 
   
pDC->MoveTo(165,122);
pDC->LineTo(175,122);

pDC->MoveTo(105,80);
pDC->LineTo(105,70);

pDC->MoveTo(68,88);
pDC->LineTo(62,82);

    pDC->MoveTo(142,88);
pDC->LineTo(148,82);

pDC->SelectObject(&pen2);
pDC->MoveTo(45,125);
    pDC->LineTo(165,125);
WriteWord(pDC,"A",170,45);
WriteWord(pDC,"0",25,110);
WriteWord(pDC,"500",165,100);
    WriteWord(pDC,"250",90,50);
    WriteWord(pDC,"125",43,63);
    WriteWord(pDC,"375",138,63);
    pDC->SelectObject(pOldBrush);
br.DeleteObject();
}
在主界面上表头对应的编辑框对应的消息Onchange函数如下:这个函数就是画输入的对话框画那个表的指针
void CMy212TestPlatView::OnChangeInI() 
{ UpdateData(TRUE);
CWnd *cpWnd=GetDesktopWindow();
    CDC *pDC=cpWnd->GetWindowDC();
double x,y;
y=195-30*sin(m_InI*PI/500);//计算指针终点的座标,方法是有圆心座标(105,125)根 据指针的长度(我定的是30)和斜率计算终点的座标,起点的是圆心座标。表的量程是500,我的方法是看输入的数据占整个量程的多少,然后让它乘以180度,算正弦值。这样的话,两点间距一个方程,斜率一个方程,从而得出终点的座标的值(x,y)
    if (m_InI>250) x=105+pow((30*30-pow((y-125),2)),1/2);
else x=105-pow((40*40-pow((y-195),2)),1/2);
       
CBrush br,*pOldBrush;
br.CreateSolidBrush(RGB(0,0,0));
    pOldBrush=pDC->SelectObject(&br);
CPen pen1,*pOldPen;
pen1.CreatePen(PS_SOLID,5,RGB(255,255,255));
    pOldPen=pDC->SelectObject(&pen1);
pDC->MoveTo(105,125)//光标移向圆心
      pDC->LineTo(int(x),int(y));
    pDC->SelectObject(pOldBrush);
br.DeleteObject();
}
现在的问题是:
1.程序运行后,表头都画出来了,我在那个编辑框里面,输入值后,发现画的指针并不是从圆心(105,125)开始画线的,也就是横座标是对的,纵座标不对,变的靠屏幕的上方了,但是我设置的就是从圆心座标开始的啊!
2.我还想在编辑框对应的Onchange消息的映射函数中,能够每次输入一个不同的值,让指针重新定位一次,但是我发现是不是首先把原来的指针擦除再画新的指针位置,还是怎么办?要不然就会可能每次改变一个输入值,就画出一个指针,原来的还存在,这样就乱套了,不知道该如何处理!

希望大虾能帮帮忙!
多谢了!!!!!
怎么没有大虾回复啊!
盼!!
在你的OnChangeInI()里的那个dc是
CWnd *cpWnd=GetDesktopWindow();
CDC *pDC=cpWnd->GetWindowDC();
是桌面。
而在OnDraw()里的dc是客户窗口的dc,绝对坐标是不一样的。
在void CMy212TestPlatView::OnChangeInI()里的dc改为
CDC *pDC=CWnd::GetDC();
关于指针实事更新的问题该如何解决?也就是第二个问题!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘