【问题标题】:Dialog box units to screen coordinates对话框单位到屏幕坐标
【发布时间】:2012-07-03 19:42:05
【问题描述】:

谁能解释我如何将对话框单位转换为屏幕坐标值? 我看到有 MapDialogRect 函数,但是它转换 RECT,我想将 x,y 和 cx,cy 值转换为屏幕坐标值,我真的不明白如何实现这一点。

提前致谢。

【问题讨论】:

  • 为什么不使用 MapDialogRect()?您是否需要有关如何构建 RECT 以使其工作的指导?
  • 你是不是要读取资源中的DIALOGTEMPLATE,然后转换???还是您已经创建了对话框?如果是后者,则所有内容都已在屏幕单位中。
  • @ATT 是的,我需要指导如何将 DLGTEMPLATE 中填写的 x、y、cx、cy 值从对话框单位转换为屏幕坐标。

标签: c++ windows dialog window coordinates


【解决方案1】:

如果您已经有一个窗口句柄,那么只需使用the MapDialogRect function。正如其他人所指出的,MapDialogRect 采用 RECT,因此如果您没有 RECT,您可以创建一个。

RECT rc;
rc.left = x;
rc.top = y;
rc.right = x + cx;
rc.bottom = y + cy;
MapDialogRect(hdlg, &rc);

如果您的问题首先是您没有对话框句柄,那么MapDialogRect 函数的文档会告诉您如何执行计算:确定对话框的平均字符尺寸 (文档调用 baseunitX 和 baseunitY),然后将其代入公式。

请注意,这会计算对话框的客户矩形。您仍然必须添加非客户空间。不清楚你要做什么,所以我不知道添加非客户端空间是否合适。

【讨论】:

  • 当我从 Windows 窗体调用它时,这对我不起作用。 (它返回 FALSE。)
  • Windows 窗体窗口不是窗口管理器对话框。
猜你喜欢
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 2013-12-19
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多