【问题标题】:Is there anything like GetDlgItemInt but for a Window that has been created? Win32 Api除了已创建的 Window 之外,是否有类似 GetDlgItemInt 的东西? Win32 接口
【发布时间】:2011-05-29 20:01:22
【问题描述】:

使用 C++ Win32 API,我创建了一个窗口 ( CreateWindow() ) 而不是对话框。是否有任何类似于“GetDlgItemInt”或“SetDlgItemInt”的命令用于在 Win 32 API 的编辑窗口中获取和设置数据?否则,我将不得不制作一个对话框或编写一堆代码来将 INT 转换为字符串,然后再返回。

这个想法是用户通过在我创建的窗口中的两个编辑对话框中键入来指定窗口的宽度和高度。有一些很好的简单教程,基本上可以通过对话框告诉我如何做到这一点,但我想知道是否有类似的功能可以使用而不依赖于对话框?

我希望有这样的东西......

xVal = 1280; yVal = 720; hwndResoX = CreateWindow("编辑",xVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL); hwndResoY = CreateWindow("编辑",yVal, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,80,20,40,20, _hwnd, NULL, NULL, NULL);

但是你可以想象,我不能在 CreateWindow() 中使用 xVal 或 yVal,因为我收到一个编译错误,指出我无法从 INT 转换为 CHAR*

【问题讨论】:

  • 我真的不明白你的问题。您从讨论 GetDlgItemInt 开始,然后显示仅包含对 CreateWindow 的调用的代码?在任何情况下,只要窗口 hwnd 有一个具有指定 ID 的子窗口,GetDlgItemInt API 将适用于任何窗口 hwnd。

标签: string int winapi editbox


【解决方案1】:

最简单的方法:

// Create the window. Note that for edits, the caption is not the same as its contents,
// so we leave that empty here:
hwndResoX = CreateWindow("edit","", WS_CHILD|WS_VISIBLE|WS_BORDER|ES_NUMBER,20,20,40,20, _hwnd, NULL, NULL, NULL);

// Now create a string to use to set as the content:
char content[32];
sprintf(content, "%d", xVal); // Recommend using StringCchPrintf if there's any chance that the buffer size might be too small
SetWindowText(hwndResoX, content);

另请参阅this MSDN page 使用编辑控件。

要取回数据,请使用 GetWindowText 获取字符串,然后使用您想要的任何字符串到整数解析函数(例如 strtol、atoi、sscanf 等)对其进行解析

虽然您必须手动在 int 和 string 之间进行转换,但代码并不多,只是多出几行,因此比转换为使用对话框要少得多。

话虽如此,如果您在此处使用适当的对话框,您将获得一些额外的好处:特别是用户可以自动从字段切换到字段,您必须做额外的工作才能在非对话框中启用。

【讨论】:

    【解决方案2】:

    您可以使用GetDlgItemInt,只需在CreateWindow中为HMENU参数指定一个int ID。

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多