我正在使用DialogBoxIndirect()在内存中创建一个模态对话框。我正在添加到对话框的控件之一具有EDIT类,因此用户可以在对话框中键入信息。关闭对话框后,如何确定用户键入EDIT字段的内容?我没有编辑字段或对话框本身的HWND,我只有id。我知道的唯一方法是GetWindowText(),但这需要一个HWND。
代码段:
//-----------------------
// Define Edit Input
//-----------------------
lpw = lpwAlign(lpw); // Align DLGITEMTEMPLATE on DWORD boundary
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 10; lpdit->y = 10;
lpdit->cx = 150; lpdit->cy = 25;
lpdit->id = ID_TEXT2; // Text input
lpdit->dwExtendedStyle = WS_EX_CLIENTEDGE;
lpdit->style = WS_CHILD | WS_VISIBLE;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0081; // Edit class
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, lpszMessage, -1, lpwsz, 50);
lpw += nchar;
*lpw++ = 0; // No creation data
//-----------------------
// Define an OK button.
//-----------------------
lpw = lpwAlign(lpw); // Align DLGITEMTEMPLATE on DWORD boundary
lpdit = (LPDLGITEMTEMPLATE)lpw;
lpdit->x = 10; lpdit->y = 40;
lpdit->cx = 35; lpdit->cy = 13;
lpdit->id = IDOK; // OK button identifier
lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
lpw = (LPWORD)(lpdit + 1);
*lpw++ = 0xFFFF;
*lpw++ = 0x0080; // Button class
lpwsz = (LPWSTR)lpw;
nchar = MultiByteToWideChar(CP_ACP, 0, "OK", -1, lpwsz, 50);
lpw += nchar;
*lpw++ = 0; // No creation data
GlobalUnlock(hgbl);
ret = DialogBoxIndirect(hinst, (LPDLGTEMPLATE)hgbl, GetFocus(), (DLGPROC)GenericDlgProc);
// How do I get the text here, that the user entered into control id ID_TEXT2?
答案 0 :(得分:2)
您可以使用GetDlgItemText()
使用其ID从编辑控件中获取文本;基本上它的作用是在一个有用的函数调用中GetDlgItem()
后跟GetWindowText()
。
然而,当你的DialogBoxIndirect()
调用返回时,为时已太晚了 - 对话框已经消失,控件也随之消失。一旦它被销毁,你就无法读取控件的值。
解决这个问题的常用方法是在WM_DESTROY
中处理DialogProc
,并在那里保存控件值(或者,如果你有一个OK和一个Cancel按钮,你可以在相反,WM_COMMAND
的{{1}}处理程序。