目的:在对话框控件中绘制扇形区域!
设置全局变量ang1,ang2并初始化,在OnPaint()中调用绘图函数draw(),在OnTimer()中添加:
pWnd->InvalidateRect(m_ClientRect,true);
pWnd->UpdateWindow();
其中
pWnd=GetDlgItem(IDC_STATIC); //获取对话框控件窗口指针
pWnd->GetClientRect(&m_ClientRect);
pDC=pWnd->GetDC();//初始化CDC变量,以便在控件窗口内绘图
绘图函数如下:
DRAW()
{
……//其他绘图
……
CPen sonar2Pen( PS_SOLID, 1, RGB( 0, 255, 0 ) );
CBrush sonar2brush(RGB(0,255,0));
CBrush *oldbrush;
oldbrush=pDC->SelectObject(&sonar2brush);
pDC->SelectObject( &sonar2Pen );
r1=r/2;
//绘制扇形区域
x1=int(x+r1*cos(ang1));
y1=int(y-r1*sin(ang1));
x2=int(x+r1*cos(ang2));
y2=int(y-r1*sin(ang2));
pDC->.Pie(x-r1,y-r1,x+r1,y+r1,x1,y1,x2,y2); //输出距离信息
strDigits.Format( "%d", r1 );
x3=int(x+(r1+20)*cos((ang1+ang2)/2));
y3=int(y-(r1+20)*sin((ang1+ang2)/2));
pDC->TextOut( x3, y3, strDigits );
CPen sonar3Pen( PS_SOLID, 1, RGB( 0, 0, 255) );
CBrush sonar3brush(RGB(0,0,255));
p_DC->SelectObject(&sonar3brush);
p_DC->SelectObject( &sonar3Pen );
r1+=5;
ang1-=22.5/180*PI;
ang2-=22.5/180*PI;
//绘制扇形区域
x1=int(x+r1*cos(ang1));
y1=int(y-r1*sin(ang1));
x2=int(x+r1*cos(ang2));
y2=int(y-r1*sin(ang2));
pDC->Pie(x-r1,y-r1,x+r1,y+r1,x1,y1,x2,y2);
//输出距离信息
strDigits.Format( "%d", ang1 );
x3=int(x+(r1+20)*cos((ang1+ang2)/2));
y3=int(y-(r1+20)*sin((ang1+ang2)/2));
pDC->TextOut( x3, y3, strDigits );
……
……
pDC->SelectObject(oldbrush);
pDC->SelectObject(oldpen);
}现在的问题是ang1和ang2根本就没有变化,应该是每次调用DRAW()就会响应增加的!
但当OnTimer()为
InvalidateRect(m_Rect,true);
UpdateWindow();
m_Rect为控件的屏幕坐标
这样ang1和ang2就会相应变化!
实在不知道什么原因,望高手指教!
设置全局变量ang1,ang2并初始化,在OnPaint()中调用绘图函数draw(),在OnTimer()中添加:
pWnd->InvalidateRect(m_ClientRect,true);
pWnd->UpdateWindow();
其中
pWnd=GetDlgItem(IDC_STATIC); //获取对话框控件窗口指针
pWnd->GetClientRect(&m_ClientRect);
pDC=pWnd->GetDC();//初始化CDC变量,以便在控件窗口内绘图
绘图函数如下:
DRAW()
{
……//其他绘图
……
CPen sonar2Pen( PS_SOLID, 1, RGB( 0, 255, 0 ) );
CBrush sonar2brush(RGB(0,255,0));
CBrush *oldbrush;
oldbrush=pDC->SelectObject(&sonar2brush);
pDC->SelectObject( &sonar2Pen );
r1=r/2;
//绘制扇形区域
x1=int(x+r1*cos(ang1));
y1=int(y-r1*sin(ang1));
x2=int(x+r1*cos(ang2));
y2=int(y-r1*sin(ang2));
pDC->.Pie(x-r1,y-r1,x+r1,y+r1,x1,y1,x2,y2); //输出距离信息
strDigits.Format( "%d", r1 );
x3=int(x+(r1+20)*cos((ang1+ang2)/2));
y3=int(y-(r1+20)*sin((ang1+ang2)/2));
pDC->TextOut( x3, y3, strDigits );
CPen sonar3Pen( PS_SOLID, 1, RGB( 0, 0, 255) );
CBrush sonar3brush(RGB(0,0,255));
p_DC->SelectObject(&sonar3brush);
p_DC->SelectObject( &sonar3Pen );
r1+=5;
ang1-=22.5/180*PI;
ang2-=22.5/180*PI;
//绘制扇形区域
x1=int(x+r1*cos(ang1));
y1=int(y-r1*sin(ang1));
x2=int(x+r1*cos(ang2));
y2=int(y-r1*sin(ang2));
pDC->Pie(x-r1,y-r1,x+r1,y+r1,x1,y1,x2,y2);
//输出距离信息
strDigits.Format( "%d", ang1 );
x3=int(x+(r1+20)*cos((ang1+ang2)/2));
y3=int(y-(r1+20)*sin((ang1+ang2)/2));
pDC->TextOut( x3, y3, strDigits );
……
……
pDC->SelectObject(oldbrush);
pDC->SelectObject(oldpen);
}现在的问题是ang1和ang2根本就没有变化,应该是每次调用DRAW()就会响应增加的!
但当OnTimer()为
InvalidateRect(m_Rect,true);
UpdateWindow();
m_Rect为控件的屏幕坐标
这样ang1和ang2就会相应变化!
实在不知道什么原因,望高手指教!
pWnd->InvalidateRect(m_ClientRect,true);
pWnd->UpdateWindow();
根本就没起作用!难道不能用pWnd来调用。重载CStatic类能说详细点吗?