簡體   English   中英

使用DialogBoxIndirect時,如何關閉對話框時用戶輸入的文本?

[英]When using DialogBoxIndirect, how do I get text the user entered when the dialog closes?

我正在使用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?

您可以使用GetDlgItemText()使用其ID從編輯控件中獲取文本。 基本上,這是通過一個有用的函數調用來完成一個GetDlgItem()和一個GetWindowText()

但是,當DialogBoxIndirect()調用返回時,已經太晚了-對話框不見了,控件也隨之消失了。 控件的值一旦銷毀就無法讀取。

解決此問題的常用方法是在DialogProc處理WM_DESTROY ,並將控制值保存在那里(或者,如果您具有OK和Cancel按鈕,則可以在WM_COMMAND處理程序中為IDOK進行此處理)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM