作者james732 (好人超)
看板C_and_CPP
標題[問題] MFC視窗元件重覆使用
時間Thu Jun 28 22:49:33 2012
開發平台(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:安裝也只要加入 WndResizer.cpp .h 跟 UxTheme.lib 就好 06/28 23:47
我好像沒看過這個耶,大感謝!
推 EdisonX:它使用的概念好特別,應是先抓所有子控制位置再做resizer吧 06/28 23:49
→ EdisonX:推一個. 06/28 23:49
簡單到讓我好感動...(可是下班時間不想動腦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