c++ - macOS 上的 wxWidgets 暗模式
问题描述
根据 3.1.3 ( https://raw.githubusercontent.com/wxWidgets/wxWidgets/v3.1.3/docs/changes.txt ) 的发行说明,暗模式支持已添加到 wxWidgets for Mojave+。
对于 wxSysColourChanged 的文档,它仍然声明这仅适用于 Windows,但我认为对 macOS 的暗模式支持也应该包括这个?暗模式只是 Windows UWP 应用程序的最新添加,而不是 Win32(有关论坛上的讨论,请参阅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();
}
我已在论坛(此处)上将其作为查询打开,他们推荐了邮件列表,但我注意到 wxWidgets 问题在这里很快得到解决,特别是 VZ,所以希望如此!
我错过了一些检测颜色变化的方法吗?
解决方案
好的,我设法让代码命中。我通过添加一个 wxApp 级别的 HandleEvent 覆盖函数来调试它,以查看应用程序正在处理哪些事件(是的,所有事件都经过这里):
void myApp::HandleEvent(wxEvtHandler *handler, wxEventFunction func, wxEvent& event) const
{
wxApp::HandleEvent(handler, func, event);
}
wxSysColourChanged 事件确实是通过这个。
我设法通过不同的连接方式让我的主框架的处理程序受到影响。代替
Bind(wxEVT_SYS_COLOUR_CHANGED, &myFrame::OnSystemColourChanged, this);
我改用这个:
Bind(wxEVT_SYS_COLOUR_CHANGED, wxSysColourChangedEventHandler(myFrame::OnSystemColourChanged), this);
我不知道为什么无法识别 &myFrame::OnSystemColourChanged。此外,我无法在我的事件处理程序中显示任何消息框。::wxMessageBox 和 wxMessageDialog 没有显示。cout 输出确实显示了,但没有弹出 GUI 对话框。无论如何,我都不会在这个处理程序中显示消息框,所以这不是问题,而是试图显示一条消息以用于调试/测试目的。
推荐阅读
- java - 对 unix 文件进行阻塞写操作
- ionic4 - 离子如何获得选择的价值
- dask - 查看 dask worker 的日志
- javascript - 将 yaml 字符串转换为 JSON 对象
- python - 如何使用python通过选择某些部分将文本文件读入csv
- sql-server - 如果我使用 SSMS 远程进入主服务器,我可以卸载本地 sql server 2014 吗?
- if-statement - 具有 3 个条件的 SharePoint 计算列
- php - 将变量名设置为 php 中另一个变量的结果
- ssl - 从弱客户端提取公钥
- javascript - 如何使只有数字 0-9 可以在 JavaScript 的提示窗口中输入?