是否有类似GetDlgItemInt的内容,但是对于已创建的Window? Win32 Api

时间:2010-12-23 07:19:06

标签: string int winapi editbox

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

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

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

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

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

2 个答案:

答案 0 :(得分: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);

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

为了获取数据,使用GetWindowText获取一个字符串,然后使用你想要的任何字符串到int解析函数解析它(例如strtol,atoi,sscanf等)

虽然你必须在int和string之间手动转换,但它不是那么多代码,只是几行,所以比转换使用对话框要麻烦得多。

话虽如此,如果你在这里使用适当的对话框,你会得到一些额外的好处:特别是用户可以自动从一个字段到另一个字段,你必须做额外的工作才能在非对话框中启用。< / p>

答案 1 :(得分:0)

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