做過界面開發的人想必都清楚如果要用VC++來開發漂亮的程序界面其難度真是苦不堪言, 當然VC++可以作出漂亮的界面但要投入大量的人力和時間其代碼量可以用海量來形容。BUG自然也就不計其數。本文主要介紹如何采用VC++結合FLASH在短時間內以及很少的人力投入的情況開發出精美漂亮的軟件界面。在本例中VC++主要進行相關數據邏輯及業務處理,FLASH則進行相關的界面表現。FLASH和VC++之間采用XML流通信。VC++的XML解析庫為開源的TinyXml解析庫。 本實例的開發環境為visual studio 2003 + FLASH8.0。其效果圖如下:

下面將進行詳細介紹:
1、首先建一個基于MFC的對話框應用程序。
2、在對話框中插入名為Shockwave Flash Object的ActiveX控件.
3、為該FLASH控件添加相應的變量即FSCommand消息處理函數.
4、在OnInitDialog()函數添加如下代碼將相關數據傳給FLASH界面
1
// 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
//設置標題欄
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
//設置組合框的數據
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
//設置列表框數據
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", "養在深閨人未識");
71
xQuery.InsertEndChild(xItem);
72
73
xItem.SetAttribute("info", "天生麗質難自棄");
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());
5、在OnFsCommand()中處理FLASH發來的消息.
1
void CUIShowDlg::OnFsCommand(LPCTSTR command, LPCTSTR args)
2

{
3
try
4
{
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: //移動窗口消息
23
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
24
break;
25
case 0xff000001: //關閉窗口
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