Эх сурвалжийг харах

1、使用PostMessage(hWxWnd, WM_SYSCOMMAND, SC_MAXIMIZE, NULL);让窗口附加时最大化,那么在移动时就不会产生微信阴影窗口。
2、DetachWxWnd时,不要使用GetParent()判断微信是否没有父窗口,因为父窗口可能存在,但GetParent可能会返回NULL

Jeff 6 жил өмнө
parent
commit
ea3c657985

+ 19 - 8
source/hook/WeChats/CWxObject.cpp

@@ -273,14 +273,17 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 			}
 
 			// 注意:MoveWindow/SetWindowPos使用的是父窗口的坐标,如果父窗口为NULL,则使用的是屏幕坐标;
-			//::MoveWindow(hWxWnd, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), true);
-			::SetWindowPos(hWxWnd, NULL, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), WM_WINDOWPOSCHANGING|SWP_SHOWWINDOW | SWP_HIDEWINDOW);
-
+			::MoveWindow(hWxWnd, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), true);
+			//::SetWindowPos(hWxWnd, NULL, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), WM_WINDOWPOSCHANGING|SWP_SHOWWINDOW | SWP_HIDEWINDOW);
+			if (!bLoginWnd)
+				::PostMessage(hWxWnd, WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
 		}
 		else
 		{//最大化显示并固定;
 			// 注意:MoveWindow/SetWindowPos使用的是父窗口的坐标,如果父窗口为NULL,则使用的是屏幕坐标;
 			::MoveWindow(hWxWnd, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), true);
+			if (!bLoginWnd)
+				::PostMessage(hWxWnd, WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
 			//::SetWindowPos(hWxWnd, NULL, rcDisplay.left, rcDisplay.top, rcDisplay.Width(), rcDisplay.Height(), WM_MOVE| WM_SIZE| WM_WINDOWPOSCHANGING| WM_NCCALCSIZE | SWP_SHOWWINDOW);
 		}
 		
@@ -296,13 +299,21 @@ BOOL CWxObject::Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd )
 
 BOOL CWxObject::DetachWxWnd()
 {
-	if (m_hWxMainWnd)
-		::SetParent(m_hWxMainWnd, NULL);
+	if (m_bAttached)
+	{
+		//if (m_hWxMainWnd && GetParent(m_hWxMainWnd))
+		if (m_hWxMainWnd ) // 使用GetParent可能返回NULL
+			::SetParent(m_hWxMainWnd, NULL);
+
+		if (m_hWxLoginWnd )
+			::SetParent(m_hWxLoginWnd, NULL);
 
-	if (m_hWxLoginWnd)
-		::SetParent(m_hWxLoginWnd, NULL);
+		m_bAttached = FALSE;
+#ifdef _DEBUG
+		WriteTextLog(_T("DetachWxWnd"));
+#endif
+	}
 
-	m_bAttached = FALSE;
 	return 0;
 }
 

+ 2 - 7
source/hook/WeChats/WeChatsDlg.cpp

@@ -223,16 +223,11 @@ BOOL CWeChatsDlg::PreTranslateMessage(MSG* pMsg)
 
 		if (pMsg->message == WM_NCMOUSEMOVE)
 		{// 非客户区鼠标移动;
-			if (m_bMouseDown)
+			if (m_bMouseDown && m_wxObj.m_hWxMainWnd)
 			{
-				Invalidate();
-				::UpdateWindow(m_wxObj.m_hWxMainWnd);
-				::ShowWindow(m_wxObj.m_hWxMainWnd, SW_SHOW);
-				WriteTextLog(_T("移动时刷新窗口"));
+				//::PostMessage(m_wxObj.m_hWxMainWnd,WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
 			}
 		}
-
-		//WriteTextLog(_T("窗口:%p, 消息:%d, LP:%d, WP:%d, 时间:%d"), pMsg->hwnd, pMsg->message, pMsg->lParam, pMsg->wParam, pMsg->time);
 	}
 	
 	return CDialog::PreTranslateMessage(pMsg);