Win32 SDK程序中拖动Thin边框窗口来改变窗口大小
来源:互联网 发布:linux查看硬盘信息 编辑:程序博客网 时间:2024/05/16 04:08
主要需要添加处理WM_NCHITTEST,WM_SETCURSOR和WM_NCLBUTTONDOWN消息
版本1.0(本版本有问题,右下角不响应消息)
case WM_NCHITTEST: POINT point; point.x = LOWORD(lParam); point.y = HIWORD(lParam); RECT rect; GetWindowRect(hWnd,&rect); if(point.x <= rect.left+5) { return HTLEFT; } else if(point.x >= rect.right-5) { return HTRIGHT; } else if(point.y <= rect.top+5) { return HTTOP; } else if(point.y >= rect.bottom-5) { return HTBOTTOM; } else if(point.x <= rect.left+10 && point.y <= rect.top+10) { return HTTOPLEFT; } else if(point.x >= rect.right-10 && point.y <= rect.top+10) { return HTTOPRIGHT; } else if(point.x <= rect.left+10 && point.y >= rect.bottom-10) { return HTBOTTOMLEFT; } else if(point.x >= rect.right-10 && point.y >= rect.bottom-10) { return HTBOTTOMRIGHT; } return ::DefWindowProc(hWnd, message, wParam, lParam); case WM_SETCURSOR: { UINT nHitTest = LOWORD(lParam); switch(nHitTest) { case HTTOP: case HTBOTTOM: SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS))); break; case HTLEFT: case HTRIGHT: SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE))); break; case HTTOPLEFT: case HTBOTTOMRIGHT: SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE))); break; case HTTOPRIGHT: case HTBOTTOMLEFT: SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW))); break; case HTCAPTION: case HTSYSMENU: case HTMENU: case HTCLIENT: default: SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW))); break; } } return TRUE; case WM_NCLBUTTONDOWN: switch(wParam) { case HTTOP: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, lParam); break; case HTBOTTOM: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, lParam); break; case HTLEFT: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, lParam); break; case HTRIGHT: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, lParam); break; case HTTOPLEFT: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, lParam); break; case HTTOPRIGHT: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, lParam); break; case HTBOTTOMLEFT: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, lParam); break; case HTBOTTOMRIGHT: SendMessage(hWnd, WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, lParam); break; default: break; } return DefWindowProc(hWnd, message, wParam, lParam);
版本2.0(修正版本1.0的问题)
switch (message){case WM_NCHITTEST:POINT point;point.x = LOWORD(lParam);point.y = HIWORD(lParam);RECT rect; GetWindowRect(&rect);if(point.x <= rect.left+5){return HTLEFT;}else if(point.x >= rect.right-5 && point.y < rect.bottom-10){return HTRIGHT;}else if(point.y <= rect.top+5){ return HTTOP;}else if(point.y >= rect.bottom-5&& point.x < rect.right-10){return HTBOTTOM;}else if(point.x <= rect.left+10 && point.y <= rect.top+10){return HTTOPLEFT;}else if(point.x >= rect.right-10 && point.y <= rect.top+10){return HTTOPRIGHT;}else if(point.x <= rect.left+10 && point.y >= rect.bottom-10){return HTBOTTOMLEFT;}else if(point.x >= rect.right-10 && point.y >= rect.bottom-10){return HTBOTTOMRIGHT;}case WM_SETCURSOR:{UINT nHitTest = LOWORD(lParam);switch(nHitTest){case HTTOP:case HTBOTTOM:SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));break;case HTLEFT:case HTRIGHT:SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));break;case HTTOPLEFT:case HTBOTTOMRIGHT:SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));break;case HTTOPRIGHT:case HTBOTTOMLEFT:SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));break;case HTCAPTION:case HTSYSMENU:case HTMENU:case HTCLIENT:default:SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));break;}}return TRUE;
- Win32 SDK程序中拖动Thin边框窗口来改变窗口大小
- Win32 SDK程序中拖动Thin边框窗口来改变窗口大小
- Pyqt实现无边框窗口拖动及改变窗口大小
- Winform无边框窗口拖动及改变窗口大小
- 如何禁止MFC单文档主窗口通过拖动边框来改变大小?
- Qt无边框窗口实现拖动和改变大小(修改)
- [Win32]只允许最大化最小化窗口,禁止双击标题栏、拖动窗体、点击复原按钮来改变窗口大小
- Win32设置窗口不可拖动,不能改变大小方法
- java中 实现无标题无边框的窗体能够用鼠标拖动改变窗口大小
- wpf改变默认的窗口边框大小,去掉边框,并且可以拖动大小
- 窗口样式:禁止最大化,不能拖动边框以改变窗口大小
- 改变程序显示模式(获取窗口大小、状态栏大小、标题栏大小、边框大小)
- node-webkit无边框窗口用纯JS实现拖动改变大小
- 改变分割窗口拖动条的大小
- Qt窗口拖动及改变大小
- Qt窗口拖动及改变大小
- win32应用禁止改变窗口大小方法
- 无边框窗口拖动
- 明晨1点苹果发布会开幕 或许会有新产品
- C# 8个常用的格式字符
- ASIHTTPRequest类库简介和使用说明
- HDU 4712Hamming Distance(随机函数运用)
- 最大子数组和
- Win32 SDK程序中拖动Thin边框窗口来改变窗口大小
- GPUSURF问题解决记录
- ZXing工具类v1.0
- 查看进程内所有线程的CPU使用率
- 发布我的第一个java程序。。用java排序so easy
- 在回首——arm-linux内核编译
- C++数据结构之二叉树
- Monads in Scala Part One: Maybe[Person]
- iOS开发之屏幕旋转