c++ -::MoveWindow 的问题 - 留下空白

标签 c++ windows winapi user-interface mfc

我非常渴望解决这个非常烦人的问题:( 我试图在父窗口上显示一个子窗口。有时需要调整窗口大小。但出于某种原因,当我使用 MoveWindow 函数时,它会在父窗口的顶部留下空白区域。我想在这里展示一张图片,但我不能张贴图片。

代码示例如下:

HWND hwnd  // Comes from external function. Was defined as WS_CHILD previously
HWND hwndParent     = ::GetParent(hwnd);  
RECT parentRect     = {0,0,0,0};  
RECT childRect      = {0,0,0,0};  
::GetClientRect(hwndParent, &parentRect);  // Suppose it returns {0,0,600,300}  

BOOL ok = ::MoveWindow(hwnd, 0, 0, 600, 300, true);  
::GetClientRect(hwnd, &childRect);  // Will return {0,0,584,297}  

为什么????

我做错了什么?我是否忘记了一些窗口初始化标志?!

最佳答案

与其使用 GetClientRect,不如使用 GetWindowRectMapWindowPoints(NULL,hwndParent,&parentRect,2) 将其调整为父窗口坐标. GetWindowRect 将包含 MoveWindow 需要的非客户区。

编辑:如果您想要一个没有非客户区的窗口,因此窗口矩形和客户矩形的大小相同,您需要修剪 window styles你应用于窗口。避免使用 WS_BORDER、WS_CAPTION、WS_DLGFRAME、WS_OVERLAPPED、WS_SIZEBOX 和 WS_THICKFRAME 样式。

关于c++ -::MoveWindow 的问题 - 留下空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738755/

相关文章:

C++ 链表的合并排序不对前两个索引进行排序

c++ - C++ 中的依赖注入(inject)

c++ - 带有引用参数的函数不能处理从其他函数返回的值

windows - 用于删除早于 X 天的文件的批处理脚本(基于创建日期,而不是修改日期)

c# - "AccessDenied"调用CreateDeviceInputNodeAsync时

c++ - 用于存储 3d 点的高效数据结构

c++ - 如何在 C++ 中的登录/密码窗口上使用回车键?

python - pywin32:获取系统调色板条目

c++ - 查找生成 WM_INPUT 消息的设备的位置信息

windows - 如何通过扫描码(不是虚拟键码)获取键状态?