談VC++結(jié)合FLASH開發(fā)精美程序界面
做過界面開發(fā)的人想必都清楚如果要用VC++來開發(fā)漂亮的程序界面其難度真是苦不堪言, 當(dāng)然VC++可以作出漂亮的界面但要投入大量的人力和時(shí)間其代碼量可以用海量來形容。BUG自然也就不計(jì)其數(shù)。本文主要介紹如何采用VC++結(jié)合FLASH在短時(shí)間內(nèi)以及很少的人力投入的情況開發(fā)出精美漂亮的軟件界面。在本例中VC++主要進(jìn)行相關(guān)數(shù)據(jù)邏輯及業(yè)務(wù)處理,F(xiàn)LASH則進(jìn)行相關(guān)的界面表現(xiàn)。FLASH和VC++之間采用XML流通信。VC++的XML解析庫為開源的TinyXml解析庫。 本實(shí)例的開發(fā)環(huán)境為visual studio 2003 + FLASH8.0。其效果圖如下:
下面將進(jìn)行詳細(xì)介紹:
1、首先建一個(gè)基于MFC的對話框應(yīng)用程序。
2、在對話框中插入名為Shockwave Flash Object的ActiveX控件.
3、為該FLASH控件添加相應(yīng)的變量即FSCommand消息處理函數(shù).
4、在OnInitDialog()函數(shù)添加如下代碼將相關(guān)數(shù)據(jù)傳給FLASH界面
// TODO: 在此添加額外的初始化代碼2
//加載flash界面3
char szBuf[256];4
string szXml;5

6
CString szFlashPath(m_FlashCtrl.GetModulePath());7
szFlashPath += "演示界面.swf";8

9
m_FlashCtrl.LoadMovie(0, szFlashPath);10
MoveWindow(0, 0, 490, 345);11
m_FlashCtrl.MoveWindow(0, 0, 490, 345);12

13
//設(shè)置標(biāo)題欄14
TiXmlElement xRoot("win_app");15
sprintf(szBuf, "%u", 0xf0000006);16
xRoot.SetAttribute("style", szBuf);17
xRoot.SetAttribute("event", 13);18

19
TiXmlElement xItem("item");20
xItem.SetAttribute("title", "我的測試程序");21
xRoot.InsertEndChild(xItem);22
szXml << xRoot;23
m_FlashCtrl.SetVariable("_root.g_Protocol.win_data", szXml.c_str());24

25
//設(shè)置組合框的數(shù)據(jù)26
xRoot.Clear();27
szXml.clear();28
xRoot.SetAttribute("event", 76);29

30
TiXmlElement xQuery("query");31
xQuery.SetAttribute("sel_item", 1);32
//xRoot.InsertEndChild(xQuery);33

34
xItem.RemoveAttribute("title");35
xItem.SetAttribute("info", "武林外傳");36
xQuery.InsertEndChild(xItem);37

38
xItem.SetAttribute("info", "西游記");39
xQuery.InsertEndChild(xItem);40

41
xItem.SetAttribute("info", "三國演義");42
xQuery.InsertEndChild(xItem);43

44
xItem.SetAttribute("info", "紅樓夢");45
xQuery.InsertEndChild(xItem);46

47
xItem.SetAttribute("info", "魔法英雄");48
xQuery.InsertEndChild(xItem);49
xRoot.InsertEndChild(xQuery);50

51
szXml << xRoot;52
m_FlashCtrl.SetVariable("_root.g_Protocol.win_data", szXml.c_str());53

54
//設(shè)置列表框數(shù)據(jù)55
xRoot.Clear();56
xQuery.Clear();57
szXml.clear();58
xRoot.SetAttribute("event", 77);59
xQuery.SetAttribute("sel_item", 1);60
61
xItem.SetAttribute("info", "漢皇重色思傾國");62
xQuery.InsertEndChild(xItem);63

64
xItem.SetAttribute("info", "御宇多年求不得");65
xQuery.InsertEndChild(xItem);66

67
xItem.SetAttribute("info", "楊家有女初長成");68
xQuery.InsertEndChild(xItem);69

70
xItem.SetAttribute("info", "養(yǎng)在深閨人未識(shí)");71
xQuery.InsertEndChild(xItem);72

73
xItem.SetAttribute("info", "天生麗質(zhì)難自棄");74
xQuery.InsertEndChild(xItem);75

76
xRoot.InsertEndChild(xQuery);77

78
szXml << xRoot;79
m_FlashCtrl.SetVariable("_root.g_Protocol.win_data", szXml.c_str());
void CUIShowDlg::OnFsCommand(LPCTSTR command, LPCTSTR args)2


{3
try4

{5
int nEvent = 0;6
TiXmlDocument xmlData;7
xmlData.Parse(command);8
if (xmlData.Error())9

{10
throw (__LINE__);11
}12

13
TiXmlElement *pRoot = xmlData.FirstChildElement();14
if (NULL == pRoot)15

{16
throw (__LINE__);17
}18
pRoot->Attribute("event", &nEvent);19

20
switch(nEvent)21

{22
case 0xff000000: //移動(dòng)窗口消息23
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);24
break;25
case 0xff000001: //關(guān)閉窗口26
EndDialog(0);27
break;28
case 0xff000003: //最小化窗口29
ShowWindow(SW_MINIMIZE);30
break;31
default:32
break;33
}34
}35
catch (
)36

{37
TRACE("\r\n收到無效的命令 : %s", command); 38
}39
}40

/Files/beifangying/UIShow.rar
posted on 2008-08-28 14:00 司強(qiáng) 閱讀(9685) 評論(34) 編輯 收藏 引用

