macOS上的wxWidgets暗模式

时间:2019-11-18 17:31:25

标签: c++ macos wxwidgets

根据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,因此希望在此发表!

我错过了一些检测颜色变化的方法吗?

1 个答案:

答案 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对话框。 无论如何,我都不会在此处理程序中显示消息框,所以这不是问题,但试图显示一条消息用于调试/测试。