我正在创建一个用于捕获屏幕或屏幕一部分的应用程序,为此,我需要选择要捕获的屏幕部分。

这个想法是创建一个全屏半透明窗口并在其上绘制内容,以便用户可以看到他在做什么。我有一个可行的实现,其中将选定区域作为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中使用)?

最佳答案

您需要使用SetTransparent()wxDC仍然不支持使用Alpha透明度(wxGraphicsContext可以,但此处无济于事)。

关于c++ - 用wxWidgets绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32661360/

10-08 21:32