2015-09-18 2 views
0

Я создаю приложение для захвата экрана или его части, и для этого мне нужно выбрать часть экрана, которую я хочу захватить.Рисунок с 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, если вам удобнее)?

ответ

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^