void CdeflateDlg::OnPaint()
{
CPaintDC dc1(this);
CRect m_Canvas;
CWnd* p_Canvas = GetDlgItem(IDC_STATIC);
CClientDC dc (p_Canvas);
p_Canvas->RedrawWindow();
double x, y;
double x1, y1;
x = y = x1 = y1 = 0;
p_Canvas->GetWindowRect(&m_Canvas);
ScreenToClient(&m_Canvas);
m_Canvas.DeflateRect(2,2,1,1);
CPen NewPen(PS_SOLID, 1, RGB(0,0,255));
dc.SelectObject(&NewPen);
//dc.IntersectClipRect(&m_Canvas);
x1 = 10;
y1 = 2 * sin(x1 / 5 - M_PI / 6)*10 + 50;
for (x = 10 ; x < 150; x = x + 0.1)
{
y = 2 * sin(x / 5 - M_PI / 6)*10 + 50;
dc.MoveTo(x1, y1 );
dc.LineTo(x, y);
x1 = x;
y1 = y;
}
}
CClientDC
CWnd* p_Canvas=GetDlgItem(IDC_STATIC);
p_Canvas->GetWindowRect(&m_Canvas);
ScreenToClient(&m_Canvas);
m_Canvas.DeflateRect(2,2,1,1);
с переделыванием координат (совсем чуть чуть)
дальше определяю контекст устройства
и рисую синусойду
CClientDC dc (this);
CPen NewPen(PS_DOT, 1, RGB(0,0,255));
dc.SelectObject(&NewPen);
dc.IntersectClipRect(&m_Canvas);
for (x=0;x<1000;x=x+0.1)
{
dc.MoveTo(x1,y1);
y=2*sin(x/3-pi/6)*10;
y=y+50;
dc.LineTo(x,y);
x1=x;
y1=y;
}
Синусойду он рисует как положено в(Picture) тока координаты он считает относительно окна, а не области для рисование. Т.е. когда перетащиш на другое место объект Picture то на экран ничего не выводится.
Цитата:
Originally posted by nirv
Skipped
Skipped
Попробуйте вместо
CClientDC dc (this);
написать
CClientDC dc (p_Canvas);
По идее должно помочь, если остальное все правильно.
СПАСИБО ЗА ПОМОЩЬ!!!!