Я создаю приложение для захвата экрана или его части, и для этого мне нужно выбрать ту часть экрана, которую я хочу снять.
Идея состоит в том, чтобы создать полноэкранное полупрозрачное окно и нарисовать на нем что-нибудь, чтобы пользователь мог видеть, что он делает. У меня есть рабочая реализация, в которой выделенная область отображается как 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.
Можете ли вы дать мне основную OnPaintPanel(wxPaintEvent &event)
реализация с использованием x, y, with, height
выбранной области (может быть в wxPython тоже, если вам удобнее)?
Вам нужно использовать SetTransparent (), wxDC
в любом случае не поддерживает альфа-прозрачность (wxGraphicsContext
делает, но это не поможет здесь).