Re: [問題] mfc不知如何下手
看板C_and_CPP (C/C++)作者WPC001 (突然覺得自己是孤獨的...)時間13年前 (2011/04/08 00:20)推噓1(1推 0噓 5→)留言6則, 2人參與討論串5/5 (看更多)
※ 引述《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
推
04/08 00:31, , 1F
04/08 00:31, 1F
→
04/08 00:31, , 2F
04/08 00:31, 2F
→
04/08 00:32, , 3F
04/08 00:32, 3F
→
04/08 00:32, , 4F
04/08 00:32, 4F
→
04/10 22:04, , 5F
04/10 22:04, 5F
→
04/10 22:04, , 6F
04/10 22:04, 6F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章