看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Visual C++ 2010 with MFC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) MFC 問題(Question): 工作上,我們寫了一些MFC Dialog Base的工具程式 這些程式很容易會用到類似的視窗元件,譬如 static edit static 具體來說就是這樣的東西 ┌──┐ 溫度 │ 32 │ 度 └──┘ 當然不一定都是溫度,後面的單位也會改變 一隻工具程式裡,這樣的東西可能會有二三十組 很直覺的,一開始當然都是用MFC方便的精靈拉一拉 但MFC的精靈其實也不是那麼好用,特別在排版上… 到了後來,可能有了動態產生、移除的需求,所以寫了類似這樣的東西 class InfoBox { private: CStatic m_Name; CEdit m_Value; CStatic m_Unit; public: InfoBox(CWnd *parent) { m_Name.Create(...); m_Value.Create(...); m_Unit.Create(...); } void SetValue(CString &value) { m_Value.SetWindowText(value); } } 把外層的Dialog當作Parent Window 我的元件做為Child Window貼上去 雖然是可以運作,但後來需求更複雜了 譬如說,隨著主視窗伸縮,這些元件也要跟著調整大小、位子 所以就要寫一些譬如 SetPosition, SetSize 之類的member function 然後手動的把三個元件搬來搬去、放大縮小 說真的寫起來很頭痛… 覺得這整個InfoBox繼承CWnd好像比較合理 但CWnd裡面的成員又一大堆,不知道怎麼著手… 另外,MFC的元件又很容易跟Resource ID綁在一起 如果要把這東西搬到別的Project去的話 又要擔心這裡動態產生的Resource ID,會不會剛好衝突 還有就是,可以的話我超想把這些工具用.NET改寫 可是想到這些舊的東西要重做,還有底層的Code要怎麼跟.NET溝通 又是另一個頭痛的問題了.... 不知道像這種介面的重覆使用、排版等瑣碎問題 要怎麼處理比較省事呢? 我總覺得排版應該寫個迴圈就讓它們固定間隔排得整整齊齊才對 為什麼要用滑鼠在那邊拉來拉去搞半天呢… 但是MFC的介面想要完全只用程式碼,而不依賴Resource卻又很麻煩 偏偏Resource又遠不如XAML寫起來輕鬆愉快(這個比較有點殘忍XD) 好希望MFC可以有像.NET或Android那樣Layout系統… :( (我知道CodeProject有,但用起來依然瑣碎…) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.92.122
EdisonX:聽你講完我發現原來以前我都在做苦工.. 06/28 23:14
不,應該是我太懶惰了XD .NET或者Android兩個系統聯手把我慣壞了...
purpose:http://tinyurl.com/75qwd74 這套做排版很簡單吧 06/28 23:47
purpose:安裝也只要加入 WndResizer.cpp .h 跟 UxTheme.lib 就好 06/28 23:47
我好像沒看過這個耶,大感謝!
EdisonX:它使用的概念好特別,應是先抓所有子控制位置再做resizer吧 06/28 23:49
EdisonX:推一個. 06/28 23:49
purpose:五分鐘弄好範例:http://ppt.cc/vEYY 06/28 23:57
簡單到讓我好感動...(可是下班時間不想動腦XDD) 真不知道要怎麼表達我的感謝 XDDD
clanguage:當然是早點擺脫MFC阿 快說服你們老闆吧 06/29 22:18
clanguage:用個 QT/GTK+/wxWidgets 吧 06/29 22:18
其實老闆沒差,不過我沒那種神力可以把所有的Tool都改成別的系統啊...XDDD ※ 編輯: james732 來自: 114.32.92.122 (06/29 22:39)
uranusjr:看完才發現我已經被 Qt 的排版系統慣壞了 07/01 16:09