2012-05-07 68 views

回答

8

的CEdit從CWnd派生,所以它有一個叫做GetWindowText成員函數,你可以打電話讓在CEdit的文本,然後再轉換爲數字型,intdouble - 這取決於你所期望的用戶輸入:

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 
16

除了已經提到的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); 

要做到這一點 - 從控件中的變量。

EDIT(獎金):

在重新閱讀我的回答,我注意到的UpdateData(...)需要一個布爾變量 - 糾正。所以我有一個喜歡可讀性的人的想法。因爲我總是糊塗了其呼叫做哪個方向,你可以引入一個枚舉,使其更具可讀性,像這樣(也許在stdafx.h中或一些中心標頭):

enum UpdateDataDirection 
{ 
    FromVariablesToControls = FALSE, 
    FromControlsToVariables = TRUE 
} 

,你就只需要編寫:

UpdateData(FromVariablesToControls); 

UpdateData(FromControlsToVariables); 
1

如果你要經常需要這種功能,說在多個對話,那麼你不妨繼承自己的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。您可以將其擴展爲具有可自定義的下限和上限和小數位設置。

+0

我會使用DDV進行驗證工作 - 但是您可以將指針傳遞給此控件以突出驗證錯誤 – CppChris