c++ - 用 wxWidgets 绘图

标签 c++ wxpython 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 中,如果你更舒服)?

最佳答案

您需要使用 SetTransparent() , wxDC 无论如何都不支持使用 alpha 透明度(wxGraphicsContext 支持,但在这里无济于事)。

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

相关文章:

带有宏的类中的 C++ 自动 shared_ptr 类型

c++ - 如何将文本文件的未知内容读入二维数组

python - wxPython 应用程序在执行期间卡住

python - 使用 wxPython 强制经典 Windows 主题

c++ - 为什么 wxDC::GetTextExtent() 对于 wxWidgets 中的高 DPI 显示返回相同的值?

c++ - 基于索引相等性跳过 vector 迭代

python - 在 wx.TaskBarIcon 派生类中绑定(bind)事件处理程序

c++ - wxWidgets:绘制子项

python - 是否可以从 wxPython 中的 GridSizeEvent 获取新的列大小?

c++ - MySQL 连接器 C++ 64 位从 Visual Studio 2012 中的源构建