看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Anonymoux (猜猜偶素隨 ? ^*^)》之銘言: : 標題: Re: [問題] mfc不知如何下手 : 時間: Thu Apr 7 22:38:15 2011 : : ※ 引述《purpose (purpose)》之銘言: : : ※ 引述《steven70101 (老人)》之銘言: : : : 最近剛入公司,要學習MFC的用法 : : : c++跟win32 api都是略懂(程式越學越不敢說懂...) : : 以 Edit Control 為例,當在對話方塊拉好一個 Edit 控件,然後在上面按右鍵, : : 選擇『加入變數』。 : : 最右邊 (VC 2008 為例) 會有個「類別」,如果選擇 Value,且「變數型別」 : : 為 CString,則表示將這個 Edit 控件跟一個 CString 物件綁定。 : : 每當執行 UpdateData() 後,螢幕畫面上的字就會跟 CString 物件的值同步。 : : 如果『加入變數』時,選擇「類別 = Control」,這時候「變數型別」就是一個關鍵, : 看到這邊我一直很想問關於 UpdateData : : 用他來GOOGLE第一頁應該就會有 這篇http://www.flounder.com/updatedata.htm : : 他在討論說 應該要避免用 UpdateData? 但不是很了解意思 : : 我自己的經驗是在控制項很多時會產生畫面頓頓的副作用 : : 在某些時候還會導致出現連續驗證錯誤資料的警告對話框 : : 所以對於這個函數到底要不要使用呢? : : 從寫的角度來看是很方便沒錯 : : 但後續似乎會導致更多問題? : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 112.105.83.236 : 推 purpose:這作者約瑟夫也實在強者,一個函數就能觀察出這麼多論點 04/07 23:28 : → purpose:比你是要「修改」資料的對話方塊,一開始跳出來會顯示既有 04/07 23:29 : → purpose:的資料,假設當姓名修改成「馬英九」時,你做了即時檢查 04/07 23:30 : → purpose:回應「非本名」然後把 name 變數改成空字串,再做UpdateDa 04/07 23:30 : → purpose:ta(FALSE) 使姓名欄位清空。然後使用者不爽改,按了取消 04/07 23:31 : → purpose:這時候的語意應該是name變數值維持原樣,但實際上卻已經被 04/07 23:31 : → purpose:UpdateData(FALSE) 把 name 字串錯誤的改成 "" 了 04/07 23:32 回應給purpose的推文... UpdateData根本不是這樣子用的~~ 需要自行呼叫UpdateData的場合, 絕對不是利用DoModal(), 然後帶有OK/Cancel Button,只等待使用者輸入資料的對話視窗 通常需要自行呼叫UpdataData()的視窗只有兩種 一種是主視窗, 另外一種是Modeless的對話盒 如果是主視窗的話, 需要執行動作的button根本可能不是OK/Cancel了... (甚至已經沒有OK, 取而代之的可能是另外一個Execute的button) 這個Joseph, 我個人認為是走火入魔, 本末倒置了... 再更深的去了解MFC的機制, 甚至是看一下原始碼, 了解一下DDE, 你會更清楚的知道, 為什麼會包裝成UpdateData這個方法, 然後更知道他的好用之處 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.76.33
purpose:他應該是想表達MSDN上UpdateData函數的說明,只有告訴你很 04/08 00:31
purpose:簡單的一些東西,卻沒有告訴你到底怎樣才叫正確使用。 04/08 00:31
purpose:就一個沒撞過牆的人來說,光看MSDN是很有可能出現這些錯誤 04/08 00:32
purpose:使用的例子的。 04/08 00:32
WPC001:MFC本來就不是隨便看一下MSDN函數簡介就來用的類別庫 04/10 22:04
WPC001:事實上每一套類別庫, 都是需要花時間下去磨才能熟悉的 04/10 22:04