根据3.1.3(https://raw.githubusercontent.com/wxWidgets/wxWidgets/v3.1.3/docs/changes.txt)的发行说明,已将黑暗模式支持添加到了Mojave +的wxWidgets中。
对于wxSysColourChanged的文档,它仍然指出这仅适用于Windows,但我认为对macOS的暗模式支持也应该包括此内容吗?暗模式只是Windows UWP应用程序的新增功能,而不是Win32(有关论坛上的讨论,请参见dark mode on Windows 10)。
无论如何,我都无法触发事件,尽管切换到暗模式确实可以正确更新GUI元素。 wxlistctrl和wxbutton无需我手动执行颜色更改。 我试图捕获系统颜色变化事件,以便可以正确地将我自己的“所有者绘制的”自定义GUI元素正确地重新绘制为暗/亮。
我将构造函数中的Bind连接到我的事件,但是没有任何效果:
Bind(wxEVT_SYS_COLOUR_CHANGED, &myFrame::OnSystemColourChanged, this);
void myFrame::OnSystemColourChanged(wxSysColourChangedEvent &event)
{
wxSystemAppearance s = wxSystemSettings::GetAppearance();
wxString dark = s.IsDark() ? "it's dark" : "it's light";
wxString m("System colour changed - ");
m += dark;
::wxMessageBox(m);
event.Skip();
}
我已经在论坛(here)上对此进行了公开查询,他们推荐了邮件列表,但我注意到wxWidgets的问题已在此处得到快速解决,尤其是VZ,因此希望在此发表!
我错过了一些检测颜色变化的方法吗?
答案 0 :(得分:0)
好的,我设法弄到了代码。我通过添加wxApp级别的HandleEvent覆盖函数对其进行了调试,以查看应用程序正在处理哪些事件(是的,所有事件都在这里进行):
PutItem
wxSysColourChanged事件确实正在通过此事件。
我设法通过不同的方式使主机架的处理程序命中。代替
void myApp::HandleEvent(wxEvtHandler *handler, wxEventFunction func, wxEvent& event) const
{
wxApp::HandleEvent(handler, func, event);
}
我改用这个:
Bind(wxEVT_SYS_COLOUR_CHANGED, &myFrame::OnSystemColourChanged, this);
我不知道为什么&myFrame :: OnSystemColourChanged无法识别。 另外,我无法在事件处理程序中显示任何消息框。 :: wxMessageBox和wxMessageDialog没有显示。 cout输出确实显示,但没有弹出GUI对话框。 无论如何,我都不会在此处理程序中显示消息框,所以这不是问题,但试图显示一条消息用于调试/测试。