c++ - 设置 MINMAXINFO 在 X 上偏移 4 像素,在 Y 上偏移 5 像素

标签 c++ c winapi

我像这样处理 MINMAXINFO:

 case WM_GETMINMAXINFO:
      {
         LPMINMAXINFO p_info = (LPMINMAXINFO)lParam;
         int total_border_width = 2 * GetSystemMetrics( SM_CXFRAME );
         int total_border_height = 2 * GetSystemMetrics( SM_CYFRAME ) + 
            GetSystemMetrics( SM_CYCAPTION ) - GetSystemMetrics( SM_CYBORDER );
         POINT min,max;

         min.x = d->min_w > 0 ? d->min_w + total_border_width : p_info->ptMinTrackSize.x;
         min.y = d->min_h > 0 ? d->min_h + total_border_height : p_info->ptMinTrackSize.y;
         max.x = d->max_w > 0 ? d->max_w + total_border_width : p_info->ptMaxTrackSize.x;
         max.y = d->max_h > 0 ? d->max_h + total_border_height : p_info->ptMaxTrackSize.y;

         p_info->ptMinTrackSize = min;
         p_info->ptMaxTrackSize = max;
        }

       break;

它设置的分辨率在 X 方向上始终比我想要的少 4 个像素,在 Y 方向上比我想要的少 5 个像素。执行 + 4 和 + 5 可以修复它,但这似乎是一个糟糕的主意。我是不是做错了什么?

谢谢

最佳答案

取决于您使用的框架类型。您可能需要单独考虑边框的 3D 元素,例如 SM_CXEDGE。如果它是 3D 客户端框架,则客户端区域可能有一个您未考虑到的边缘。

关于c++ - 设置 MINMAXINFO 在 X 上偏移 4 像素,在 Y 上偏移 5 像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8044305/

相关文章:

c - 查找 C 的 Lotus Notes 安装

c++ - 我需要帮助获得一个按钮来使用 arduino 激活有源蜂鸣器

c++ - 获取扩展 std::out_of_range 错误

c++强制数组声明而不给参数

c - 这是什么日期格式?

c++ - 使用 FILE_ATTRIBUTE_TEMPORARY 和 FILE_FLAG_DELETE_ON_CLOSE

c++ - 切换案例的替代方案?

c++ - 共享一个平台的部分结构,同时将其他平台的部分结构屏蔽掉

c - 如何将字符串存储在链表的节点内?我正在使用 Visual Studio。

windows - 断言当前线程不持有 CRITICAL_SECTION 锁