Я создал окно со следующими флагами для наложения приложения d3d: WS_EX_TOPMOST | WS_EX_COMPOSITED | WS_EX_TRANSPARENT | WS_EX_LAYERED Я применил цветовую маркировку окна для прозрачности, и все сработало хорошо. Однако как только я начал рисовать с помощью GDI, возникла непредвиденная проблема:
По какой-то причине события мыши (особенно движение) не проходят через окно правильно, когда выполняется WM_PAINT, и поэтому кажется, что мышь и клавиатура в этом отношении отстают. FPS в порядке, это какая-то проблема API, я подозреваю, что по какой-то причине сообщения клавиатуры/мыши не обрабатываются должным образом, пока выполняется WM_PAINT, потому что чем медленнее установлен таймер, тем меньше рывков.
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
{
KillTimer(hwnd, ID_TIMER);
PostQuitMessage(0);
break;
}
case WM_CREATE:
{
SetTimer(hwnd, ID_TIMER, 10, NULL);
break;
}
case WM_TIMER:
{
InvalidateRect(hwnd, 0, 1);
break;
}
case WM_PAINT:
{
paint(hwnd);
break;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
и
void paint (HWND hwnd)
{
PAINTSTRUCT Ps;
HDC hdc = BeginPaint(hwnd, &Ps);
SetBkColor(hdc, RGB(0,0,0));
SetBkMode(hdc, TRANSPARENT);
LOGBRUSH log_brush;
log_brush.lbStyle = BS_NULL;
HBRUSH handle_brush = CreateBrushIndirect(&log_brush);
SelectObject(hdc, handle_brush);
..........................................
DeleteObject(font);
DeleteObject(pen);
DeleteObject(handle_brush);
EndPaint(hwnd, &Ps);
}
Спасибо за любую помощь, которую вы можете оказать.