通過控件ID獲取控件變量(無論是哪種變量)是不可能實現的。
控件變量和控件窗口(包括指針、句柄、ID)之間,是“弱”關聯關系,沒有真正的實現整合,它們之間的關聯,是通過DoDataExchange實現的,具體過程是這樣:
對話框界面的初始化和界面變化,都會調用UpdateData函數,而這個函數之中,會調用DoDataExchange,從每個對話框的成員函數DoDataExchange中,我們可以看到,在這裏才實現了控件和變量的關聯,類似形式如下:
DDX_Control(pDX,?IDC_BUTTON2,?m_bn2);DDX_Radio(pDX,?IDC_RADIO1,?m_radio);
這個關聯是通過壹系列API函數DDX_實現的,那麽這裏做了什麽呢?可以在MFC源代碼中看壹看具體實現:
void?AFXAPI?DDX_Text(CDataExchange*?pDX,?int?nIDC,?LPTSTR?value,?int?nMaxLen){
ASSERT(nMaxLen?!=?0);
HWND?hWndCtrl?=?pDX->PrepareEditCtrl(nIDC);
if?(pDX->m_bSaveAndValidate)
{
int?nLen?=?::GetWindowTextLength(hWndCtrl);
int?nRetrieved?=?::GetWindowText(hWndCtrl,?value,?nMaxLen);
if?(nLen?>?nRetrieved)
TRACE1("Text?in?control?ID?%d?is?too?long.?Call?DDV_MaxChars()!\n",?nIDC);
}
else
{
AfxSetWindowText(hWndCtrl,?value);
}
}
從這裏可以看到,變量和控件窗口直接,沒有直接關聯關系,完全是通過壹個函數進行的賦值和取值操作,因此,無法通過控件ID或者指針獲取其變量。