楓故事 ZXString、StringPool、CMsgbox與CMsgboxLinkWeb範例

StringPool::GetInstance 函式

語法

1
StringPool * StringPool::GetInstance(void);

參數

不帶任何參數。

回傳值

回傳一個StringPool的Instance,若尚未建立則會自動建立一個。

StringPool::GetString 函式

語法

1
2
3
4
5
template<typename T>
ZXString<T> * StringPool::GetString(
ZXString<T> *result,
unsigned int nIdx
);

參數

result[out]

用於存放取得的ZXString的指標。

nIdx

用於查詢的ID。[in]

回傳值

回傳一個ZXString的指標,如果該ID不存在,可能導致程式崩潰。

CMsgbox 與 CMsgboxLinkWeb 類別

程式庫提供兩種MsgBox,一個是CMsgbox,另一個是CMsgboxLinkWeb。使用方法都很簡單,參考下面範例就會了。

範例

很簡單的class使用,顯示一個訊息ID是0x102A的訊息窗。

CMsgbox只有一個OK按鈕,若連結網址不為空的話會顯示連結。

1
2
3
4
5
ZXString<char> sDesc = ""; // 連結文字
ZXString<char> sLink = ""; // 連結網址
ZXString<char> sMsg; // 訊息文字
StringPool::GetInstance()->GetString(&sMsg, 0x102A);
TSingleton<CMsgbox>::CreateInstance()->Init(sMsg, sLink, sDesc);

直接使用C-Style字串也是可以的,編譯器會自動配置class。

1
TSingleton<CMsgbox>::CreateInstance()->Init("Test Text", "http://toby.logdown.com", "Test Link");

寫asm的話參考下面方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
push ebp
mov ebp,esp
sub ebp,40
call TSingleton<CMsgbox>::CreateInstance
mov esi,eax
xor edi,edi
push ecx
mov ecx,esp
mov [ebp-04],esp
push -01
push sDesc
mov [ecx],edi
call ZXString<char>::Assign
push ecx
mov ecx,esp
mov [ebp-08],esp
push -01
push sLink
mov [ecx],edi
call ZXString<char>::Assign
push ecx
mov ecx,esp
mov [ebp-08],esp
push -01
push sMsg
mov [ecx],edi
call ZXString<char>::Assign
mov ecx,esi
call CMsgbox::Init
pop ebp
ret

台灣楓故事DEMO:

CMsgboxLinkWeb則是Yes-No訊息方塊,按Yes會打開連結。

1
2
3
ZXString<char> sLink = ""; // 連結網址
ZXString<char> sMsg = ""; // 訊息文字
TSingleton<CMsgboxLinkWeb>::CreateInstance()->Init(sMsg, sLink);

台灣楓故事DEMO: