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

Ваш аккаунт

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

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

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

PlayMetaFile

390
27 апреля 2006 года
lexus
143 / / 13.04.2004
static HMETAFILE mfile=0;
static HDC mfdc;
if (!mfile){
mfdc=CreateCompatibleDC(dc.m_hDC);
mfdc=CreateMetaFile(NULL);
LineTo(mfdc,100,100);
mfile=CloseMetaFile(mfdc);
}
PlayMetaFile(mfdc,mfile);
А на экране ничего не отображается,хотя, по идее, должна отображаться линия
406
27 апреля 2006 года
vitaly2003s
481 / / 27.07.2004
Попробуй так:
Код:
HMETAFILE mfile=0;
    HDC mfdc,hdc;
    hdc=CreateCompatibleDC(dc.m_hDC);
    HBITMAP hbm = CreateCompatibleBitmap(dc.m_hDC,100,100);
    SelectObject(hdc,hbm);

    mfdc=CreateMetaFile(NULL);
    MoveToEx(mfdc,0,0,0);
    LineTo(mfdc,100,100);
    mfile=CloseMetaFile(mfdc);

    PlayMetaFile(hdc,mfile);

      DeleteObject(hbm);
      DeleteDC(hdc);

      BitBlt(dc.m_hDC,0,0,100,100,hdc,0,0,SRCCOPY);


Хотя зачем временный контекст можно и напрямую:

 
Код:
HMETAFILE mfile=0;
    HDC mfdc=CreateMetaFile(NULL);
    MoveToEx(mfdc,0,0,0);
    LineTo(mfdc,100,100);
    mfile=CloseMetaFile(mfdc);

    PlayMetaFile(dc.m_hDC,mfile);
390
04 мая 2006 года
lexus
143 / / 13.04.2004
Мне надо рисовать линию, как в Paint'е.Т.е. пользователь тянет мышку, и прорисовывается линия. А старый рисунок должен оставаться неизменным. Я стал старый перерисовывать через метафайл, а линию рисовать отдельно. Но мигание так и осталось
Пробовал и BitBlt, но и там мигание.Подскажите, пожалуйста. Курсач горит!
1.8K
04 мая 2006 года
SeregaLBN
62 / / 03.10.2003
Цитата:
Originally posted by lexus
Мне надо рисовать линию, как в Paint'е.Т.е. пользователь тянет мышку, и прорисовывается линия.


Могу предложит чуть по-другому, но результат почти тот же.

 
Код:
SetROP2(hDC, R2_NOT);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xOld, yOld);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xNew, yNew);

Т.е. рисуешь каждый раз на оригинальном контексте. Причём линия формируется инвертированием цветов под ней...
390
04 мая 2006 года
lexus
143 / / 13.04.2004
Цитата:
Originally posted by SeregaLBN
Могу предложит чуть по-другому, но результат почти тот же.
 
Код:
SetROP2(hDC, R2_NOT);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xOld, yOld);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xNew, yNew);

Т.е. рисуешь каждый раз на оригинальном контексте. Причём линия формируется инвертированием цветов под ней...



int tmprop=dc->SetROP2(R2_NOT);
dc->MoveTo(begin->x,begin->y);
dc->LineTo(x,y);
dc->SetROP2(tmprop);
dc->MoveTo(begin->x,begin->y);
dc->LineTo(XLine,YLine);
x=XLine;
y=YLine;
Все равно перерисовка осталась. Эти функции вызываются в OnPainte, уже после того как все остальное прорисовано.

324
05 мая 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by lexus
int tmprop=dc->SetROP2(R2_NOT);
dc->MoveTo(begin->x,begin->y);
dc->LineTo(x,y);
dc->SetROP2(tmprop);
dc->MoveTo(begin->x,begin->y);
dc->LineTo(XLine,YLine);
x=XLine;
y=YLine;
Все равно перерисовка осталась. Эти функции вызываются в OnPainte, уже после того как все остальное прорисовано.



Ты наверное перерисовываешь фон, но в данном случае тебе этого делать не надо

390
05 мая 2006 года
lexus
143 / / 13.04.2004
Цитата:
Originally posted by AndreySar
Ты наверное перерисовываешь фон, но в данном случае тебе этого делать не надо


Всем спасибо.Со всем разобрался

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог