Win32 SDK程序中拖动Thin边框窗口来改变窗口大小
2013-09-10 21:36
519 查看
主要需要添加处理WM_NCHITTEST,WM_SETCURSOR和WM_NCLBUTTONDOWN消息
版本1.0(本版本有问题,右下角不响应消息)
版本2.0(修正版本1.0的问题)
版本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边框窗口来改变窗口大小
- Pyqt实现无边框窗口拖动及改变窗口大小
- node-webkit无边框窗口用纯JS实现拖动改变大小
- Qt无边框窗口实现拖动和改变大小(修改)
- Qt 无标题无边框程序的拖动和改变大小
- 改变程序显示模式(获取窗口大小、状态栏大小、标题栏大小、边框大小)
- wpf改变默认的窗口边框大小,去掉边框,并且可以拖动大小
- [Win32]只允许最大化最小化窗口,禁止双击标题栏、拖动窗体、点击复原按钮来改变窗口大小
- Qt 无标题无边框程序的拖动和改变大小
- Qt:无标题栏无边框程序的拖动和改变大小
- 窗口样式:禁止最大化,不能拖动边框以改变窗口大小
- Win32设置窗口不可拖动,不能改变大小方法
- 如何禁止MFC单文档主窗口通过拖动边框来改变大小?
- DUI程序Demo2(注意拖动程序的边框改变程序界面的大小,OnNcHitTest消息中处理)
- Winform无边框窗口拖动及改变窗口大小
- Pyqt实现无边框窗口拖动以及窗口大小改变
- Qt 无标题无边框程序的拖动和改变大小
- node-webkit学习之【无边框窗口用JS实现拖动改变大小等】
- java中 实现无标题无边框的窗体能够用鼠标拖动改变窗口大小
- node-webkit无边框窗口用纯JS实现拖动改变大小