D
ups - vergessen
LRESULT CALLBACK C_mygrid::ChildProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
C_mygrid *Sc = (C_mygrid*) GetWindowLong(hWnd, GWL_USERDATA);
int ScItemX, ScItemY, ScStep;
T_KACHEL K ;
PAINTSTRUCT ps;
HDC hDC, hMemDC;
BITMAP bm;
RECT rect;
HBRUSH Brush;
float MapCX, MapCY;
int CiRad;
switch (message) /* handle the messages */
{
case WM_LBUTTONDOWN:
GetWindowRect(hWnd, &rect);
// relative Koordinate der Mouse
MapCX = ((float)(LOWORD(lParam)/ 50.0) * Sc->fZoom) + (Sc->TickX);
MapCY = ((float)(HIWORD(lParam)/ 50.0) * Sc->fZoom) + (Sc->TickY);
FillKachel (Sc->Felddaten,Sc->FileHeader, MapCX, MapCY,
Sc->ScPos, 10, Sc->ActTool); //Füllen der Map
Sc->MXPos = LOWORD(lParam);
Sc->MYPos = HIWORD(lParam);
InvalidateRect(hWnd, NULL, FALSE);
break;
case WM_PAINT:
/* Todo: Mapdaten darstellen */
ScStep =(int)(Sc->fZoom * (float)50);
hDC = GetDC(hWnd);
for (ScItemX= 0; ScItemX < Sc->FileHeader.XKCount; ScItemX += 1)
{
for (ScItemY = 0; ScItemY < Sc->FileHeader.YKCount; ScItemY += 1)
{
// Daten aus dem großen Feldarray ziehen
memcpy(&K, Sc->Felddaten[ScItemY * Sc->FileHeader.XKCount +
ScItemX], sizeof (T_KACHEL));
// hBitmap erstellen
Sc->BitMap = CreateBitMap(hWnd, &K, &Sc->FileHeader);
// Koordinaten berechnen
rect.left = (int) (Sc->fZoom * 50 * (ScItemX- Sc->TickX));
rect.top = (int) (Sc->fZoom * 50 * (ScItemY- Sc->TickY));
rect.right = (int) (Sc->fZoom * 50); // missbraucht als breite
rect.bottom = (int)(Sc->fZoom * 50); // missbraucht als länge
// Bitmap darstellen
GetObject ( Sc->BitMap, sizeof(BITMAP), &bm);
hMemDC = CreateCompatibleDC( hDC );
SelectObject (hMemDC, Sc->BitMap);
SetStretchBltMode (hDC, STRETCH_DELETESCANS);
StretchBlt(hDC, rect.left, rect.top, rect.right, rect.bottom,
hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
DeleteObject ( Sc->BitMap );
DeleteDC( hMemDC );
}
}
ReleaseDC ( hWnd, hDC );
break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hWnd, message, wParam, lParam);
}
free (K);
return 0;
}
FillKachel ist eine Fuktion von mir, die die Werte in den Felddaten ändert.