作者tinlans ( )
看板C_and_CPP
標題Re: [問題] 想設計簡單GUI的小問題
時間Sat Apr 24 14:50:49 2010
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 剛剛憑空想了一下該怎麼寫一個 簡單的GUI API給其他人用
: 因為程式的flow是 Update -> Draw -> Update-> Draw
: 使用者頂多在initial的那個block 寫GUI的排放方式註冊一些callback
: 但是....
: Update裡面 可能使用者被迫寫 MyGUI.Update()
: 幫她做一些滑鼠是否有點擊之類的偵測相對的GUI改變顏色
: 和一些更新
: 但是在Draw
: 以我之前使用別人寫的簡單GUI的經驗
: 我似乎沒有在Draw函式裡手動呼叫 MyGUI.Draw()....
: 我該怎麼偷偷的幫他在Draw裡面去呼叫我的MyGUI.Draw呢
: 一般該怎麼做到
: 謝謝!!
Template Method。
class Update {
public:
void foo()
{
userDefiend1();
userDefined2();
...
MyGUI.Update();
}
protected:
virtual void userDefined1();
virtual void userDefined2();
...
};
然後你的 API 就寫成只接受 (Update *) 這種 type 的參數,
這樣就能強制你的 user 繼承 Update 來自訂一些東西。
高興的話你也能一個自訂項目就寫一個 class。
想搞到更複雜的話也就只有 Command Pattern 了,
這樣它每註冊一個動作的時候,
你就可以幫它偷偷 push 一個 Update 的動作在後面,
最後 invoke 下去的時候就會是你想要的順序。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
http://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.109.191
推 QQ29:t大 可是我MyGUI.Draw該在哪裡偷寫阿? 04/26 01:07
→ QQ29:其實我是要用XNA 架構 他會呼叫update和draw...我想我只能 04/26 01:08
→ QQ29:讓使用者 手動呼叫MyGUI.Draw了耶?? 04/26 01:08