0

使用 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*

4

2 回答 2

0

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

于 2011-04-12T16:40:45.133 回答
0

最简单的方法:

// 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);

另请参阅有关使用编辑控件的MSDN 页面。

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

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

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

于 2011-03-15T22:57:01.450 回答