1、修改視窗樣式SetWindowLong(myWindowHandle, GWL_STYLE, WS_POPUP);
2、在客戶區自己創建了一個標題欄,標題欄的背景圖ondrag事件里面執行以下代碼實作視窗移動
ReleaseCapture();
SendMessage(myWindowHandle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
SendMessage(myWindowHandle, WM_LBUTTONUP, 0, 0);
3、自己寫了一個dll,用SubWndProc方法攔截WndProc方法,WM_NCHITTEST事件里面執行一下代碼
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
RECT rcClient;
::GetWindowRect(hWnd, &rcClient);
if (pt.x >= rcClient.right - 10 && pt.y >= rcClient.bottom - 10)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
return HTBOTTOMRIGHT;
}
else if (pt.x <= rcClient.left + 10 && pt.y >= rcClient.bottom - 10)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
return HTBOTTOMLEFT;
}
else if (pt.x <= rcClient.left + 10 && pt.y <= rcClient.top + 10)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
return HTTOPLEFT;
}
else if (pt.x >= rcClient.right - 10 && pt.y <= rcClient.top + 10)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
return HTTOPRIGHT;
}
else if (pt.x >= rcClient.right - 5)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
return HTRIGHT;
}
else if (pt.x <= rcClient.left + 5)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
return HTLEFT;
}
else if (pt.y <= rcClient.top + 5)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
return HTTOP;
}
else if (pt.y >= rcClient.bottom - 5)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
return HTBOTTOM;
}
else
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
return HTCLIENT;
}
現在遇到的問題是,只要先點擊自制標題欄移動了視窗
1、縮放就不起作用了,縮放時滑鼠樣式變成縮放樣式,但是,滑鼠拖動后,整個視窗在移動,而不是縮放。
2、最小化以后,滑鼠點擊任務欄的的視窗,視窗粘在滑鼠上跟隨滑鼠移動,必須點擊一下左鍵后,才不跟隨滑鼠移動。
3、SendMessage(myWindowHandle, WM_NCLBUTTONDOWN, HTCAPTION, 0);這行報錯:An abnormal situation has occurred: the PlayerLoop internal function has been called recursively. Please contact Customer Support with a sample project so that we can reproduce the problem and troubleshoot it.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/51921.html
標籤:Unity3D
上一篇:關于用 transform.Rotate 實作滑鼠旋轉方塊時的問題
下一篇:unity 3D中VRTK包里有組件但是無法用Add component搜索到 如何將這個插件添加到左手柄上?大學生跪求!
