ShowWindow()重置UI状态?

时间:2019-06-28 17:02:58

标签: winapi controls windows-shell

我有一个带有控件的普通窗口。其中一些是所有者吸引的。我发现创建控件时需要初始化状态。

SendMessage(m_hWnd, WM_UPDATEUISTATE, MAKEDWORDHL(0, UIS_INITIALIZE), 0);
SendMessage(m_hWnd, WM_UPDATEUISTATE, MAKEDWORDHL(UISF_HIDEFOCUS, UIS_SET), 0);

我在UIS_INITIALIZE的高位单词中使用0的原因是,这就是Raymond通过Who sends the initial WM_UPDATEUISTATE message?

所拥有的

我通过以下方法管理控件子类中的状态:

case WM_KILLFOCUS:
  SendMessage(hwnd, WM_UPDATEUISTATE, MAKEDWORDHL(UISF_HIDEFOCUS, UIS_SET), 0);
  break;

case WM_SETFOCUS:
  SendMessage(hwnd, WM_UPDATEUISTATE, MAKEDWORDHL(UISF_HIDEFOCUS, UIS_CLEAR), 0);
  break;

使用WM_CHANGEUISTATE的效果不佳,因此被WM_UPDATEUISTATE困住了

WM_DRAWITEM期间,我检查状态,如果没有隐藏焦点,则检查DrawFocusRect()

现在是问题。当我隐藏窗口的控件然后再次显示它们时,所有状态均为0,因此所有控件最终在它们周围都有一个焦点矩形。我可以重设WM_SHOWWINDOW上的所有内容,但似乎有点笨拙。

当使用普通窗口而不是对话框(而不使用IsDialogMsg())时,是否存在适当的方法来处理状态。特别是ShowWindow()会改变状态吗?

0 个答案:

没有答案