Рисование с помощью 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.

Можете ли вы дать мне основную OnPaintPanel(wxPaintEvent &event) реализация с использованием x, y, with, height выбранной области (может быть в wxPython тоже, если вам удобнее)?

0

Решение

Вам нужно использовать SetTransparent (), wxDC в любом случае не поддерживает альфа-прозрачность (wxGraphicsContext делает, но это не поможет здесь).

1

Другие решения


По вопросам рекламы [email protected]