Я создаю приложение для захвата экрана или его части, и для этого мне нужно выбрать часть экрана, которую я хочу захватить.Рисунок с wxWidgets
Идея состоит в том, чтобы создать полноэкранное полупрозрачное окно и нарисовать на нем предмет, чтобы пользователь мог видеть, что он делает. У меня есть рабочая реализация, в которой выбранная область выложена как wxPanel, но я хочу переписать ее, чтобы вручную рисовать все в основной wxPanel вручную.
frame = new wxFrame(NULL, -1, "", wxPoint(0,0), wxSize(0,0), wxSTAY_ON_TOP|wxFRAME_NO_TASKBAR|wxFRAME_SHAPED);
panel = new wxPanel(frame, -1);
SetTopWindow(frame);
panel->Bind(wxEVT_KEY_DOWN, &wxMiniApp::OnKeyDown, this);
panel->Bind(wxEVT_KEY_UP, &wxMiniApp::OnKeyUp, this);
panel->Bind(wxEVT_LEFT_DOWN, &wxMiniApp::OnMouseStart, this);
panel->Bind(wxEVT_LEFT_UP, &wxMiniApp::OnMouseEnd, this);
panel->Bind(wxEVT_MOTION, &wxMiniApp::OnMouseMove, this);
panel->Bind(wxEVT_PAINT, &wxMiniApp::OnPaintPanel, this);
panel->SetFocus();
panel->SetBackgroundColour(wxColor(0,0,0,100));
panel->SetBackgroundStyle(wxBG_STYLE_PAINT);
frame->SetBackgroundColour(wxColor(0,0,0,0));
frame->Show();
frame->ShowFullScreen(true);
Я использую panel
, чтобы захватить события мыши/клавиатуры, и я хочу, чтобы сделать картину там тоже, но я не знаю, как это сделать.
Я хочу иметь полупрозрачный черный фон, а выбранная область должна быть прозрачной белой или даже полностью прозрачной (без черного фона).
Результат каждой попытки состоял в том, что либо он нарисовал сплошной цвет фона, либо я получил знаменитый WinXP lag effect.
Можете ли вы дать мне базовую реализацию OnPaintPanel(wxPaintEvent &event)
с использованием x, y, with, height
выбранной области (может быть, и в wxPython, если вам удобнее)?