Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CClientDC

12K
27 октября 2005 года
nirv
5 / / 23.10.2005
Ответьте пожалуйста на вопрос! Я в общем недавно начал программить и тут естественно возникла одна сложность. Мне нада было нарисовать синусойду в диалоговом окне в объекте Picture. В общем я определил этот объект
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 то на экран ничего не выводится.
831
27 октября 2005 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by nirv
Skipped



Попробуйте вместо
CClientDC dc (this);
написать
CClientDC dc (p_Canvas);
По идее должно помочь, если остальное все правильно.

398
27 октября 2005 года
Alexandoros
630 / / 21.10.2005
Код:
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;
    }
}

Это с диалогового приложения.
12K
27 октября 2005 года
nirv
5 / / 23.10.2005
СПАСИБО ЗА ПОМОЩЬ!!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог