V programu mám dvě okna, hlavní okno obsahující formulář (model editunits.cpp) a okno prohlížeče (Map Viewer - mapviewer.cpp). Jsou to samostatné moduly které mají každý svůj dlgproc. Když kliknu na mapu, posílám zprávu do okna mapviewer abych zavolal funkci pro přepočet souřadnic (rotace součadnic). Výslednou hodnotu potřebuju dostat zpět do původního okna editunits abych mohl pokračovat ve zpracování.
mapviewer.cpp
LRESULT CALLBACK MapWndProc(HWND window, UINT msg, WPARAM wParam, LPARAM lParam)
{
LRESULT ret = 0;
int i;
switch (msg)
{
...
case MAP_RotateCoords:
RotateCoords(window, wParam, lParam);
break;
default:
ret = DefWindowProc(window, msg, wParam, lParam);
}
return ret;
}
editunits.cpp:
void Units_HandleMapClick(HWND dialog, int x, int y)
{
...
SendMessage(dialog, MAP_RotateCoords, x, y);
// Sem potřebuju dát výsledek z fuknce RotateCoords..
SetDlgItemFloat(dialog, IDC_U_X, x + 0.5);
SetDlgItemFloat(dialog, IDC_U_Y, y + 0.5);
Units_Save(dialog);
SendMessage(mv, MAP_HighlightPoint, x, y);
SendMessage(mv, MAP_Reset, 0, 0);
}
funkce v mapviewer.cpp:
void RotateCoords(HWND window, int x, int y)
{
if (x < 0 || x > SHRT_MAX ||
y < 0 || y > SHRT_MAX)
return;
int rx, ry;
unsigned int urx, ury; // (unsigned)
int half = data.scen->map.x / 2;
if (setts.view.rotation_0)
rotate(half, (int)iter->x, (int)iter->y, rx, ry);
else
if (setts.view.rotation_315)
{
unrotate(data.scen->map.x, (int)iter->x, (int)iter->y, urx, ury);
rx=urx;
ry=ury;
}
else
if (setts.view.rotation_45)
{ // no rotate
rx = (int)iter->x * setts.zoom * 2;
ry = (data.scen->map.y - (int)iter->y * setts.zoom)*2;
}
}
rx a ry jsou rotované souřadnice a chci je poslat z okna mapviewer do hlavního okna (editunits module).
Jak to udělat?
editunits.cpp dlgproc http://paste.ofcode.org/Jxzpyp9wEpiEyp5mJZHMtE