PC版本实现无边框窗口移动和缩放,移动后缩放必然失灵

newmunga 2018-05-17 03:09:57
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.
...全文
1113 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,586

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧