Nevite nekdo, jak nakreslit caru pomoci DirectDraw?
Nebo aspon odkaz...
Nebo neco...![]()
Nevite nekdo, jak nakreslit caru pomoci DirectDraw?
Nebo aspon odkaz...
Nebo neco...![]()
Pokud víš, jak mazat obraz, tak akorát zadáš RECT na velikost tvé čáry a případně změníš barvu. A nebo můžeš využít DC...a pomocí GDI nakreslit čáru. - z paměti to nevím, co to je za fce, ale najdeš to v MSDN.Původně odeslal Lando
ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
work: HP Docking Station | HP L2445W
audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555
Dikes, nak uz na to prijdu.
Nejspis pomoci toho GDI
na tehle strance je hezky serial o winapi.
http://www.builder.cz/art/cpp/winapi1.html
hadam, ze okno aplikace mas uz vytvorene, pres winapi se to dela takhle.
HDC hdc = GetDC(hWnd); // ziskani handle onka aplikace - kontext zarizeni
HPEN hPen = CreatePen(PS_SOLID, 4, 0x00FF0000); // vytvoreni stetce (styl, sirka,barva)
SelectObject(hdc, hPen); // vybrani stetce v kontextu zarizeni (okne)
a ted muzes pouzivat funkce.
BOOL MoveToEx(
HDC hdc, // handle kontextu zařízení
int X, // x-souřadnice nového "aktuálního bodu"
int Y, // y-souřadnice
LPPOINT lpPoint // původní "aktuální bod"
); // posune na bod v okne ze ktereho se bude vychazet.
BOOL LineTo(
HDC hdc, // handle kontextu zařízení
int nXEnd, // x-souřadnice koncového bodu
int nYEnd // y-souřadnice koncového bodu
); // vykresleni usecky z bodu urceneho v MoveToEx do noveho bodu
ReleaseDC(hWnd, hdc); // uvolneni kontextu zarizeni, to je nutne aby nepretezovalo zdroje
DeleteObject(hPen); // zruseni pera
Question is: who cares ?
tim rect, myslis co ? RECT je strukturaPůvodně odeslal Anduril
mam pocit, ze neco takoveho
typedef RECT {
int left,right,top,bottom;
}
pouziva se pri kresleni obdelniku, treba tak
RECT rect;
Rectangle(hdc, rect.left, rect.top, rect.right, rect.top);
Question is: who cares ?
... ee - myslel jsem to takto (C++ a DirectDraw) - kód na vykreslení libovolné čáry:Původně odeslal stealth
A nebo třeba takto (C a DirectDraw + GDI):Kód:/* BSurface::FillArea (...) - fill area (x,y,w,h) with color */ void BSurface::FillArea (int x, int y, int w, int h, int color) { DDBLTFX ddBltFx; RECT rDst; //Process rDst.left = x; rDst.top = y; rDst.right = x + w; rDst.bottom = y + h; //Prepare colors ddBltFx.dwSize = sizeof(DDBLTFX); ddBltFx.dwFillColor = color; //Fill surface lpDDSurface->Blt(&rDst, NULL, NULL, DDBLT_WAIT | DDBLT_COLORFILL, &ddBltFx); } /* BSurface::Line (...) - draw line from x1,y1 to x2,y2 with color */ void BSurface::Line (int x1, int y1, int x2, int y2, int color) { double xStep, yStep, dx, dy; int xLength, yLength, xCount, yCount, tempV; //Process //Horizontal line if(y1==y2){ FillArea (x1, y1, x1 + x2, 1, color); } //Vertical line else if(x1==x2){ FillArea (x1, y1, 1, y1 + y2, color); } //Any other line else { xLength = abs(x2 - y1); yLength = abs(y2 - y1); if(xLength==0) FillArea (x1, y1, 1, y1 + y2, color); else if(yLength==0) FillArea (x1, y1, x1 + x2, 1, color); else if(xLength > yLength) { if(x1 > x2) { tempV = x1; x1 = x2; x2 = tempV; tempV = y1; y1 = y2; y2 = tempV; } yStep = (double)(y2 - y1) / (double)(x2 - x1); dy = y1; //Draw it for(xCount = x1; xCount <= x2; xCount++) { FillArea (xCount, (int)dy, 1, 1, color); dy += yStep; } } else { if(y1 > y2) { tempV = x1; x1 = x2; x2 = tempV; tempV = y1; y1 = y2; y2 = tempV; } xStep = (double)(x2 - x1) / (double)(y2 - y1); dx = x1; //Draw it for(yCount = y1; yCount <= y2; yCount++) { FillArea ((int)dx, yCount, 1, 1, color); dx += xStep; } } } }
.. Mělo by to být dobře, doufám.Kód:void DrawLine(LPDIRECTDRAWSURFACE surface, int x1, int y1, int x2, int y2, DWORD color) { HPEN pen; HDC t_dc; surface->lpVtbl->GetDC(surface, &t_dc); if(t_dc == NULL) return; pen = CreatePen(PS_SOLID, 0, color); SelectObject(t_dc, pen); MoveToEx(t_dc, x1, y1, NULL); LineTo(t_dc, x2, y2); surface->lpVtbl->ReleaseDC(surface, t_dc); DeleteObject(pen); }
ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
work: HP Docking Station | HP L2445W
audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555
Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)