c - 通过从顶部选择弹出窗口使其可移动
问题描述
我正在使用 C 中的 win32 api 使用以下窗口样式为我的游戏创建一个“无边界”窗口:
WS_POPUP | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_THICKFRAME
当我试图移动它时,它仍然静止。由于我添加了样式WS_THICKFRAME
,因此我可以调整它的大小并且可以稍微“移动”它,但我想知道是否有另一种样式/方式可以通过像普通窗口一样从顶部选择它来使窗口(弹出窗口)移动。
解决方案
该系统允许您根据鼠标输入自定义窗口行为。它正在向窗口的窗口过程发送WM_NCHITTEST消息,允许客户端代码根据需要进行响应。
HTCAPTION
从消息处理程序返回WM_NCHITTEST
请求系统响应就像单击窗口标题一样,从而允许移动它。
为了保留正常功能,客户端通常会将WM_NCHITTEST
消息转发到DefWindowProc
,并HTCAPTION
在默认处理返回时返回HTCLIENT
:
case WM_NCHITTEST:
{
LRESULT position = DefWindowProc(hWnd, Msg, wParam, lParam);
return position == HTCLIENT ? HTCAPTION : position;
}
推荐阅读
- javascript - 尝试升级旧的hammer.js (v1.0.5) 脚本。在 iOS 上垂直滚动时遇到问题
- python - 如何在 tensorflow.keras 中实现 AttentionDecoder?
- python - 获取一个数据框列相对于另一个数据框列值的值
- c# - asp.net core web api读取BLOB
- c++ - 弹出窗口在从标题项的右上角开始的矩形中显示垂直标题文本
- android - 无法从 xml 文件使用主活动文件中的进度值。它显示未解决的引用
- node.js - 创建一个用于测试的 sqlite 数据库
- c++ - 在 C++ 中读取文本文件并将数据存储在二维数组中
- arm - gdb 核心转储:信息共享显示什么
- numpy - 转换矩阵上的 Numpy Linalg