[英]how to get numeric value from edit control
除了已經提到的GetWindowText方法之外,您還可以通過DDX將其綁定到整數/無符號整數/雙/浮點值。 試試這個:
void CYourAwesomeDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_NUMBER, m_iNumber);
}
而m_iNumber是您的CYourAwesomeDialog類的成員。
你必須打電話
UpdateData(TRUE);
為了將控件中的值寫入變量。 呼叫
UpdateData(FALSE);
反過來做 - 從控件中的變量。
編輯(獎金):
在重新閱讀我的答案后,我注意到UpdateData(...)需要一個BOOL變量 - 已更正。 所以我對那些喜歡可讀性的人有了一個想法。 因為我總是混淆哪個調用指向哪個方向,所以你可以引入一個enum來使它更具可讀性(就像在stdafx.h或某個中心頭文件中):
enum UpdateDataDirection
{
FromVariablesToControls = FALSE,
FromControlsToVariables = TRUE
}
你只需要寫:
UpdateData(FromVariablesToControls);
要么
UpdateData(FromControlsToVariables);
CEdit派生自CWnd,因此它有一個名為GetWindowText
的成員函數,您可以調用它來獲取CEdit中的文本,然后將其轉換為數字類型, int
或double
- 具體取決於您希望用戶輸入的內容:
CString text;
editControl.GetWindowText(text);
//here text should contain the numeric value
//all you need to do is to convert it into int/double/whatever
如果您需要定期需要該功能,比如多個對話框,那么您也可以將自己的CEdit派生類子類化,以進行獲取,設置和驗證工作。
class CFloatEdit : public CEdit
{
public:
CFloatEdit();
void SetValue(double v) {
// format v into a string and pass to SetWindowText
}
double GetValue() {
// validate and then return atoi of GetWindowText
}
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
// only allow digits, period and backspace
}
};
這樣的事情,確保消息映射將所有其他消息傳遞給父CEdit。 您可以將其擴展為具有可自定義的下限和上限以及小數位設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.