Проблема такая: у меня есть два приложения winapi.Есть только один способ общения.App1 отправляет сообщение в App2.App2 должен получить WM_COPYDATA со структурой, которая имеет координаты двух фигур, а затем должен нарисовать эти фигуры.Сообщение получено.Данные из структуры в порядке.Выполнен код в случае WM_COPYDATA, который должен закрасить окно, но ничего не происходит (окно имеет только сплошной белый фон)
Отправка сообщения выглядит следующим образом:
HWND secondApp = FindWindowEx(NULL, NULL, _T("lab2app2"), NULL );
int error = GetLastError();
if(secondApp != 0) // window found, send message
{
// prepare data
FiguresData figuresData;
// Set Data About Location and dimensions of figures
// TODO
figuresData.square_origin_x = square_origin_x;
figuresData.square_origin_y = square_origin_y;
figuresData.circle_origin_x = circle_origin_x;
figuresData.circle_origin_y = circle_origin_y;
COPYDATASTRUCT data;
data.dwData = FIGURESDATA;
data.cbData = sizeof( figuresData );
data.lpData = &figuresData;
bool value = SendMessage(secondApp, WM_COPYDATA, (WPARAM)(HWND)mainWindow, (LPARAM)(LPVOID)&data);
}
Структура FiguresData проста и имеет только 4ints в нем.
App2 получает сообщения и код для этого:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
RECT clientRectangle;
GetClientRect(hWnd, &clientRectangle);
hdc = BeginPaint(hWnd, &ps);
// nothing really here
EndPaint(hWnd, &ps);
break;
case WM_COPYDATA:
{
PCOPYDATASTRUCT pData;
pData = (PCOPYDATASTRUCT) lParam;
int square_origin_x = ((FiguresData *) ( pData->lpData ))->square_origin_x;
int square_origin_y = ((FiguresData *) ( pData->lpData ))->square_origin_y;
int circle_origin_x = ((FiguresData *) ( pData->lpData ))->circle_origin_x;
int circle_origin_y = ((FiguresData *) ( pData->lpData ))->circle_origin_y;
hdc = BeginPaint(hWnd, &ps);
HPEN oldPen = (HPEN)SelectObject(hdc, pen);
HBRUSH oldBrush = (HBRUSH)SelectObject(hdc, backgroundBrush);
COLORREF oldBackgroundColor = SetBkColor(hdc, backgroundColor);
Rectangle(hdc, square_origin_x, square_origin_y, square_origin_x+ SQUARE_SIDE, square_origin_y + SQUARE_SIDE);
Ellipse(hdc, circle_origin_x, circle_origin_y, circle_origin_x+ SQUARE_SIDE, circle_origin_y + SQUARE_SIDE);
// Put everything back the way we found it
SelectObject(hdc, oldPen);
SetBkColor(hdc, oldBackgroundColor);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
В отладчике я вижу, что дескриптор окна в порядке.Сообщение отправляется, а также принимается App2 и выполняется код в случае WM_COPYDATA, но это не имеет никакого эффекта.Никакие фигуры не нарисованы в окне App2, и я понятия не имею, почему.Любая подсказка?