![](/img/trans.png)
[英]How do I force windows NOT to redraw anything in my dialog when the user is resizing my dialog?
[英]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.