Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ...вспомнить всё ...GDI... не пойму почему ничего не рисуется... 
:(
    Опции темы
maaks_mouse
  Дата 11.5.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2005

Репутация: нет
Всего: 3



Коллеги(позвольте сказать).... есть очень не скромный вопрос ...решил на досуге повспоминать "молодость"...
и... склероз зараза не лечится - он забывается ...воб щем ЧТО я хочу? --> нарисовать линию! ))

...что я сделал --> в Dlg.h создал : 
Код

...
CDC *mainDC, memDC;
...


птом в C_ckt_graph1Dlg.cpp....

Код

BOOL C_ckt_graph1Dlg::OnInitDialog()
{
                      ........

    mainDC = GetDC();
    memDC.CreateCompatibleDC(mainDC);

    CPen p;
    p.CreatePen(PS_SOLID, 2, RGB(0,0,0) );
    HGDIOBJ oldP = memDC.SelectObject(&p);
    
    memDC.MoveTo(20,20);
    memDC.LineTo(50,50);
    memDC.LineTo(200,70);
    memDC.LineTo(50,90);

    memDC.SelectObject(oldP);
    Invalidate(FALSE);
    
    return TRUE; 
}

void C_ckt_graph1Dlg::OnPaint( ) 
{
    ...........
    
    mainDC->BitBlt(0,0, 500,500, &memDC, 0,0, SRCCOPY );

}




...ии ...НИЧЕГО  smile    ...дебажил вроде как все норм ...подскажите НА ЧТО обратить внимание ...что не так ...что забыл???

Это сообщение отредактировал(а) maaks_mouse - 11.5.2007, 13:11
PM ICQ GTalk Jabber YIM   Вверх
Nastya
Дата 11.5.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



В OnPaint Надо саздвать PaintDC - и рисовать на нем. попробуй.
mainDC - лучше не сохранять так на долго


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
zkv
Дата 11.5.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



maaks_mouse, надо предварительно битмап еще создать нужных размеров и выбрать в контекст
Цитата

mainDC - лучше не сохранять так на долго

его вообще нет смысла членом класса делать
Цитата

В OnPaint Надо саздвать PaintDC - и рисовать на нем.

точно!

Это сообщение отредактировал(а) zkv - 11.5.2007, 14:51
PM MAIL   Вверх
DigitSphinx
Дата 11.5.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



нужен CBitmap !
Код

BOOL C_ckt_graph1Dlg::OnInitDialog()
{
    ........
    mainDC = GetDC();
    memDC.CreateCompatibleDC(mainDC);
    CBitmap MemBtmp;
    MemBtmp.CreateCompatibleBitmap(mainDC, width, height);
    memDC.SelectObject(&MemBtmp);
    ........
}

Цитата

В OnPaint Надо саздвать PaintDC - и рисовать на нем. попробуй.
mainDC - лучше не сохранять так на долго

человек делает через буфер !, ну и правильно делает !!


Это сообщение отредактировал(а) DigitSphinx - 11.5.2007, 18:24


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
maaks_mouse
Дата 11.5.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2005

Репутация: нет
Всего: 3



...блин ...делаю ТАК

Код

                     mainDC = GetDC();
    memDC.CreateCompatibleDC(mainDC);
    bmp.CreateCompatibleBitmap(&memDC, 500,500);
    memDC.SelectObject(&bmp);

    p.CreatePen(PS_SOLID, 2, RGB(255,0,0));
    old = memDC.SelectObject(&p);

    memDC.MoveTo(20,20);
    memDC.LineTo(50,50);
    memDC.LineTo(60,90);
    memDC.LineTo(90,100);

    memDC.SelectObject(&old);

    Invalidate (FALSE);



...все объекты  -  свойства класса ...


И НИФИГАШЕЧКИ smile  smile  smile

Добавлено через 10 минут и 3 секунды
все!! ...я понял!!! ..вот так надо


Код

    mainDC = GetDC();
    memDC.CreateCompatibleDC(mainDC);
    bmp.CreateCompatibleBitmap(mainDC, 500,500);
    memDC.SelectObject(&bmp);

    p.CreatePen(PS_SOLID, 2, RGB(255,0,0));
    old = memDC.SelectObject(&p);

    memDC.MoveTo(20,20);
    memDC.LineTo(50,50);
    memDC.LineTo(60,90);
    memDC.LineTo(90,100);

    memDC.SelectObject(&old);;

PM ICQ GTalk Jabber YIM   Вверх
DigitSphinx
Дата 11.5.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



Код

::OnInitDialog()
{
............
        CBitmap bmp;
        mainDC = GetDC();
        memDC.CreateCompatibleDC(mainDC);
        bmp.CreateCompatibleBitmap(mainDC, 500,500);
        memDC.SelectObject(&bmp);
        memDC.FillRect(CRect(0, 0, 500, 500), &CBrush(RGB(255, 255, 255)));
        CPen * p = new CPen(PS_SOLID, 5, RGB(255,0,0));
        memDC.SelectObject(p);
...........
}
..........
::OnPaint()
{
...................
        memDC.MoveTo(20,20);
        memDC.LineTo(50,50);
        memDC.LineTo(60,90);
        memDC.LineTo(90,100);
        mainDC->BitBlt(0, 0, 500, 500, &memDC, 0, 0, SRCCOPY);
..............
}

Цитата

все!! ...я понял!!! ..вот так надо

ну и как работает без mainDC->BitBlt(…..); ???????

Это сообщение отредактировал(а) DigitSphinx - 11.5.2007, 21:05


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
zkv
Дата 11.5.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(DigitSphinx @  11.5.2007,  21:02 Найти цитируемый пост)
ну и как работает без mainDC->BitBlt(…..); ???????

 smile можно конечно и обезьяну научить курить, только нафига?
DigitSphinx, вам в МСДН доводилось заглядывать?
Цитата(MSDN)

CWnd::GetDC 
Retrieves a pointer to a common, class, or private device context for the client area depending on the class style specified for the CWnd.

CDC* GetDC( );
Return Value
Identifies the device context for the CWnd client area if successful; otherwise, the return value is NULL. The pointer may be temporary and should not be stored for later use.

Remarks
For common device contexts, GetDC assigns default attributes to the context each time it is retrieved. For class and private contexts, GetDC leaves the previously assigned attributes unchanged. The device context can be used in subsequent graphics device interface (GDI) functions to draw in the client area.

Unless the device context belongs to a window class, the ReleaseDC member function must be called to release the context after painting. Since only five common device contexts are available at any given time, failure to release a device context can prevent other applications from accessing a device context. 

Про это вам и намекала Nastya  smile 
PS
члены класса:
Код

    CDC m_dcMem;
    CBitmap m_bmMem;


в реализации:
Код

BOOL CTestDCDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    //...
    CDC *pdcMain = GetDC(); //можно юзать CClientDC(this)
    m_dcMem.CreateCompatibleDC( pdcMain );
    m_bmMem.CreateCompatibleBitmap( pdcMain, 200, 200 );
    ReleaseDC( pdcMain );//если юзать CClientDC(this), то он сам это сделает
    m_dcMem.SelectObject( m_bmMem );
    m_dcMem.FillSolidRect( 0,0, 200, 200, RGB(255,255,255) );

    CPen p;
    p.CreatePen(PS_SOLID, 2, RGB(255,0,0));
    CPen *old = m_dcMem.SelectObject(&p);
    m_dcMem.MoveTo(20,20);
    m_dcMem.LineTo(50,50);
    m_dcMem.LineTo(60,90);
    m_dcMem.LineTo(90,100);
    m_dcMem.SelectObject( old );
return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTestDCDlg::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    dc.BitBlt(0, 0, 200, 200, &m_dcMem, 0, 0, SRCCOPY);
}


Это сообщение отредактировал(а) zkv - 11.5.2007, 23:51
PM MAIL   Вверх
DigitSphinx
Дата 11.5.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



Когда  я прочитал ваш ответ , я сидел, делал Лабу по прогр.(я не только учусь но еще и студент  smile ) В которой надо таблицы рисовать и т.д. , я взял и вставил в OnInitDialog() строчку ReleaseDC(pDC); и прога перестала чего либо рисовать что меня удивило (после MSDN)  но когда я вместо ReleaseDC(pDC);  вставил pDC->ReleaseAttribDC(); опять заработала !
И я понял что ничего не понял !
Но все равно большое спасибо zkv,
пошел учится …. 



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
zkv
Дата 12.5.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(DigitSphinx @  11.5.2007,  23:49 Найти цитируемый пост)
И я понял что ничего не понял !

да я тоже мало чего понимаю smile
если интересно, то вот дополнительная инфа по фликерному вопросу
PM MAIL   Вверх
maaks_mouse
  Дата 12.5.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2005

Репутация: нет
Всего: 3



zkv ...про BitBlt само собой не забыл  smile 
...а вообще спасибо, zkv, за расталковывание!  smile 
...и вообще всем сэнкс  smile  ...отдельный Насте  smile 
PM ICQ GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.