Browse Source

修复成员未初始化的bug

张洋 1 month ago
parent
commit
17d9ae3231
1 changed files with 12 additions and 1 deletions
  1. 12 1
      DuiLib/Core/UIManager.cpp

+ 12 - 1
DuiLib/Core/UIManager.cpp

@@ -305,7 +305,18 @@ namespace DuiLib
 		m_bDragMode(false),
 		m_hDragBitmap(NULL),
 		m_pDPI(NULL),
-		m_iHoverTime(400UL)
+		m_iHoverTime(400UL),
+		// [FIX] m_bNoActivate 原本未初始化:Debug 堆新块填充 0xCD -> 读到 true;
+		// Release 下则是随机垃圾值,属偶发性隐患。
+		// 后果:本文件中 3 处 "if (!m_bNoActivate) ::SetFocus(m_hWndPaint);"
+		// (WM_LBUTTONDOWN 1738 / CPaintManagerUI::SetFocus 2442 / SetFocusNeeded 2475) 全部被跳过,
+		// 系统焦点无法回到主窗口 -> 原生 EDIT 子窗 CEditWnd 收不到 WM_KILLFOCUS ->
+		// 其唯一的销毁途径 PostMessage(WM_CLOSE) 永不触发 -> 光标常闪、点空白不丢焦点。
+		// XML 侧仅在显式书写 noactivate 属性时才赋值(UIDlgBuilder.cpp),故此处必须先给确定初值。
+		m_bNoActivate(false),
+		// 以下两个成员同样是漏网之鱼(全库无赋值点),一并清零以防后患。
+		m_bIsPainting(false),
+		m_pLastToolTip(NULL)
 	{
 		if (m_SharedResInfo.m_DefaultFontInfo.sFontName.IsEmpty())
 		{