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);
PlayMetaFile
static HDC mfdc;
if (!mfile){
mfdc=CreateCompatibleDC(dc.m_hDC);
mfdc=CreateMetaFile(NULL);
LineTo(mfdc,100,100);
mfile=CloseMetaFile(mfdc);
}
PlayMetaFile(mfdc,mfile);
А на экране ничего не отображается,хотя, по идее, должна отображаться линия
Код:
Хотя зачем временный контекст можно и напрямую:
Код:
HMETAFILE mfile=0;
HDC mfdc=CreateMetaFile(NULL);
MoveToEx(mfdc,0,0,0);
LineTo(mfdc,100,100);
mfile=CloseMetaFile(mfdc);
PlayMetaFile(dc.m_hDC,mfile);
HDC mfdc=CreateMetaFile(NULL);
MoveToEx(mfdc,0,0,0);
LineTo(mfdc,100,100);
mfile=CloseMetaFile(mfdc);
PlayMetaFile(dc.m_hDC,mfile);
Пробовал и BitBlt, но и там мигание.Подскажите, пожалуйста. Курсач горит!
Цитата:
Originally posted by lexus
Мне надо рисовать линию, как в Paint'е.Т.е. пользователь тянет мышку, и прорисовывается линия.
Мне надо рисовать линию, как в Paint'е.Т.е. пользователь тянет мышку, и прорисовывается линия.
Могу предложит чуть по-другому, но результат почти тот же.
Код:
SetROP2(hDC, R2_NOT);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xOld, yOld);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xNew, yNew);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xOld, yOld);
MoveToEx(hDC, xOrig, yOrig, NULL);
LineTo(hDC, xNew, yNew);
Т.е. рисуешь каждый раз на оригинальном контексте. Причём линия формируется инвертированием цветов под ней...
Цитата:
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);
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, уже после того как все остальное прорисовано.
Цитата:
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, уже после того как все остальное прорисовано.
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, уже после того как все остальное прорисовано.
Ты наверное перерисовываешь фон, но в данном случае тебе этого делать не надо
Цитата:
Originally posted by AndreySar
Ты наверное перерисовываешь фон, но в данном случае тебе этого делать не надо
Ты наверное перерисовываешь фон, но в данном случае тебе этого делать не надо
Всем спасибо.Со всем разобрался