MrT*_*Tux 5 c++ mfc accessibility high-contrast cmfcmenubutton
在我正在CMFCMenuButton使用MSVC 2013 的C++ MFC项目中.
当我切换高对比度模式时,按钮没有正确重新绘制(为了比较,显示正常按钮):

调用Invalidate()或ShowWindow(SW_HIDE);ShowWindow(SW_SHOW);似乎没有效果 - 即使最小化对话框也不会导致正确的重绘.如何强制按钮重新绘制更新的系统颜色?
更新:切换对比度模式后强制颜色只会使按钮文本可见,但按钮本身(边框)不可见.
m_ctrlOkButton.SetFaceColor(::GetSysColor(COLOR_BTNFACE));
m_ctrlOkButton.SetTextColor(::GetSysColor(COLOR_BTNTEXT));
Run Code Online (Sandbox Code Playgroud)
我花了一段时间,但我能够解决这个问题。我从该类继承CMFCMenuButton,以便可以处理一些事件:
获取按钮右侧的颜色:
处理WM_SYSCOLORCHANGE事件并调用GetGlobalData()->UpdateSysColors();(确保它之前传播到我们的父级,例如,通过__super::OnSysColorChange();)
正确获取边框和背景:
处理WM_THEMECHANGED事件并调用CMFCVisualManager::GetInstance()->DestroyInstance();以关闭所有打开的主题数据句柄。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |