1 / 10

使用 DDX 與 DDV 操作控制項的資料

使用 DDX 與 DDV 操作控制項的資料. Reference: Chapter 22, 精通視窗程式設計. 井民全製作. DDX (Do Data Exchange). DDV (Do Data Verification). 甚麼是 DDX 與 DDV. 提供 Dialog 與 放在 Dialog 中物件 交換資料 與 檢查資料 的好用機制. Edit Control (IDC_EDIT1). 我要如何 得到 Edit Control 的資料呢 ?. Dialog. 放在 Dialog 中物件. 如何防止使用者 亂打 ?.

rehan
Download Presentation

使用 DDX 與 DDV 操作控制項的資料

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 使用 DDX 與 DDV 操作控制項的資料 Reference: Chapter 22, 精通視窗程式設計 井民全製作

  2. DDX (Do Data Exchange) DDV (Do Data Verification) 甚麼是DDX與DDV • 提供 Dialog 與 放在Dialog中物件 • 交換資料 與 檢查資料 的好用機制 Edit Control (IDC_EDIT1) 我要如何得到 Edit Control 的資料呢? Dialog 放在Dialog中物件 如何防止使用者亂打?

  3. 我們希望能把 Control 項的資料 與 物件的資料成員分開 以降低複雜度 • 簡單的說就是 • 資料成員改變  Control 改變 • Control 改變 資料成員改變

  4. 相關聯 限制num值在 1~ 20 之間 把 Edit control 的資料與資料成員作關聯 class CDDXDemoDlg : public CDialog{ int num; // 建構子 public: CDDXDemoDlg(…); … }; (IDC_EDIT1) 資料成員 相關聯 void CDDXDemoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); // Call base class version DDX_Text(pDX,IDC_EDIT1,num); DDV_MinMaxInt(pDX,num,1,20); }

  5. 如何藉由num設定資料? 設定初值 void CDDXDemoDlg::OnInitDialog() { num =0; UpdateData(FALSE); } num 的資料  控制項 當按鈕按下時,讀取Control資料 void CDDXDemoDlg::OnBnClickedOk() () { UpdateData(TRUE); } 讀取控制項的資料  num 成功的轉換資料: return nonzero

  6. End

  7. 補充教材: CheckBox 的DDX class CDDXDemoDlg : public CDialog{ int bOK; // 建構子 public: CDDXDemoDlg(…); … }; 注意: int IDC_CHECK1 void CDDXDemoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); // Call base class version DDX_Check(pDX,IDC_CHECK1,this->bOk); }

  8. 補充教材: CheckBox 的DDX 設定初值 void CDDXDemoDlg::OnInitDialog() { bOk=0; UpdateData(FALSE); } bOk 的資料  控制項 當按鈕按下時,讀取Control資料 void CDDXDemoDlg::OnBnClickedOk() () { UpdateData(TRUE); } 讀取控制項的資料  bOk 成功的轉換資料: return nonzero

  9. 當發生錯誤時 DDV_MinMaxInt 失敗時的內定視窗 但是,我希望自己處理這個錯誤, 怎麼辦 ? 多個 Controls 的情況 另外, 當 Dialog 中有多個 control 存在, 我怎麼知道哪個出錯?

  10. 我們自己寫 DDV Function • 根據 MFC source code, 我們知道 UpdateData 會呼叫我們的 DoDataExchange,並執行 呼叫 OnBnClickedOk(){ UpdateData(TRUE); } DDV_MinMaxInt(pDX,num,1,20); // 判斷正確與否的程式 if(!(num1>=1 && num1 <=20)){ MessageBox("數字不對"); pDX->Fail(); // 發出 CUserException }

More Related