Hello!
Lenne az alabbi problemam: Irtam egy mandelbrot kirajzolo programot,
ami egy ab lakba kirajzol egy mandelbrot halmazt, erre pedig egy
bitmap-ot hasznalok, abba mentem el, hogy csak bitblt k elljen, ha
kiviszi az ablakot a kepernyore, majd pedig visszahuzza a user. Ha
atmeretezem az ablakot, akkor ujr arajzolja. Azt szeretnem, hogy
atmeretezes KOZBEN a mar meglevo bitmapot nyujtsa/kicsinyit se
STRETCHBLT-vel, ha pedig abbahagyjak az atmeretezest, akkor
szamolja/rajzolja csak ujra a kepet.
case WM_PAINT: // REPAINT WINDOW
hdc = BeginPaint(hWnd, &ps);
GetWindowRect(hWnd,&ablakmeret);
xmax = abs(ablakmeret.right-ablakmeret.left);
ymax = abs(ablakmeret.bottom-ablakmeret.top);
if ((atmeretez == 1) && (hdcMem != NULL))
DeleteDC(hdcMem);
if (atmeretez == 1)
hdcMem = CreateCompatibleDC(ps.hdc);
if ((atmeretez == 1) && (hbmMem != NULL))
DeleteObject(hbmMem);
if (atmeretez == 1)
hbmMem = CreateCompatibleBitmap(ps.hdc, xmax, ymax);
hbmOld = SelectObject(hdcMem, hbmMem);
if (atmeretez == 1)
MakeMandelBrot(hdcMem,xmax,ymax);
BitBlt(ps.hdc,0,0,xmax,ymax,hdcMem,0,0,SRCCOPY);
SelectObject(hdcMem, hbmOld);
atmeretez = 0;
EndPaint( hWnd, &ps );
return 0;
Tudom, van egy olyan, hogy WM_RESIZING, azt az uzenetet kapja az
ablak, amikor atmeretezik, de akkor valami miatt nem igazan mukodik a
bitblt... feher lesz az egesz ablak... WM_RES IZE ha jol tudom, akkor
van, amikor atmeretezte mar az ablakot, akkor "atmeretez = 1"
utasitast nyomato k, hogy ujrarajzolja...
Azert Borland C++ 5.5, mert az ingye` van, meg jo, meg minden...
atmeretez=1 eseten rajzolja ujra.... varom az otleteket... ( hasznalj
vc-t,oop- t, linux-ot valaszok kimeljenek:) )
zso
|
>A tényállás a következö:
>Micros~1 VC++ 6.0-ban fejlesztgetek.
>
>A Commporton egy egységröl, szabályos idöközönként olvasok (
>ReadFile(com2,&sbuf,1,&empf,NULL); függvény segítségével.
>
>Jönnek is rendesen az adatok. (ENQ)
>
>Erre egy végtelen cikluson belül válaszolgatok (while(t) )
>(egy ACK-t küldök)
>
>Namost ha nincs benne késleltetés akkor a gép elkezdi nyomni az ACK-t
>mint bolond a lisztet
Szerintem az a baj, hogy te azt hiszed, hogy a ReadFile() csak akkor
ter vissza, ha sikeresen fogadott egy karaktert a soros porton. Pedig
ez nem igy van.
Soros portok eseten a SetCommTimeouts()-szal tudod beallitani a
kuldesi- ill. fogadasi timeoutokat. Ezzel parhuzamosan azonban a
ReadFile() visszateresi erteket es az olvasott (fogadott) bajtok
szamat is figyelni kell a hivas utan, hogy el tudd donteni, hogy most
milyen okbol is kaptad vissza a vezerlest (tenyleg adat jott, timeout
volt, vagy valami hiba lepett fel).
Gabor
|