谈VC++结合FLASH开发精美程序界面

妖狐艹你老母 2022-08-24 01:54 229阅读 0赞

做过界面开发的人想必都清楚如果要用VC++来开发漂亮的程序界面其难度真是苦不堪言, 当然VC++可以作出漂亮的界面但要投入大量的人力和时间其代码量可以用海量来形容。BUG自然也就不计其数。本文主要介绍如何采用VC++结合FLASH在短时间内以及很少的人力投入的情况开发出精美漂亮的软件界面。在本例中VC++主要进行相关数据逻辑及业务处理,FLASH则进行相关的界面表现。FLASH和VC++之间采用XML流通信。VC++的XML解析库为开源的TinyXml解析库。 本实例的开发环境为visual studio 2003 + FLASH8.0。其效果图如下:
show.jpg

下面将进行详细介绍:
1、首先建一个基于MFC的对话框应用程序。
2、在对话框中插入名为Shockwave Flash Object的ActiveX控件.
3、为该FLASH控件添加相应的变量即FSCommand消息处理函数.
4、在OnInitDialog()函数添加如下代码将相关数据传给FLASH界面

1 None.gif // TODO: 在此添加额外的初始化代码
2 None.gif // 加载flash界面
3 None.gif char szBuf[ 256 ];
4 None.gif string szXml;
5 None.gif
6 None.gif CString szFlashPath(m_FlashCtrl.GetModulePath());
7 None.gif szFlashPath += “ 演示界面.swf “ ;
8 None.gif
9 None.gif m_FlashCtrl.LoadMovie( 0 , szFlashPath);
10 None.gif MoveWindow( 0 , 0 , 490 , 345 );
11 None.gif m_FlashCtrl.MoveWindow( 0 , 0 , 490 , 345 );
12 None.gif
13 None.gif // 设置标题栏
14 None.gif TiXmlElement xRoot( “ win_app “ );
15 None.gif sprintf(szBuf, “ %u “ , 0xf0000006 );
16 None.gif xRoot.SetAttribute( “ style “ , szBuf);
17 None.gif xRoot.SetAttribute( “ event “ , 13 );
18 None.gif
19 None.gif TiXmlElement xItem( “ item “ );
20 None.gif xItem.SetAttribute( “ title “ , “ 我的测试程序 “ );
21 None.gif xRoot.InsertEndChild(xItem);
22 None.gif szXml << xRoot;
23 None.gif m_FlashCtrl.SetVariable( “ _root.g_Protocol.win_data “ , szXml.c_str());
24 None.gif
25 None.gif // 设置组合框的数据
26 None.gif xRoot.Clear();
27 None.gif szXml.clear();
28 None.gif xRoot.SetAttribute( “ event “ , 76 );
29 None.gif
30 None.gif TiXmlElement xQuery( “ query “ );
31 None.gif xQuery.SetAttribute( “ sel_item “ , 1 );
32 None.gif // xRoot.InsertEndChild(xQuery);
33 None.gif
34 None.gif xItem.RemoveAttribute( “ title “ );
35 None.gif xItem.SetAttribute( “ info “ , “ 武林外传 “ );
36 None.gif xQuery.InsertEndChild(xItem);
37 None.gif
38 None.gif xItem.SetAttribute( “ info “ , “ 西游记 “ );
39 None.gif xQuery.InsertEndChild(xItem);
40 None.gif
41 None.gif xItem.SetAttribute( “ info “ , “ 三国演义 “ );
42 None.gif xQuery.InsertEndChild(xItem);
43 None.gif
44 None.gif xItem.SetAttribute( “ info “ , “ 红楼梦 “ );
45 None.gif xQuery.InsertEndChild(xItem);
46 None.gif
47 None.gif xItem.SetAttribute( “ info “ , “ 魔法英雄 “ );
48 None.gif xQuery.InsertEndChild(xItem);
49 None.gif xRoot.InsertEndChild(xQuery);
50 None.gif
51 None.gif szXml << xRoot;
52 None.gif m_FlashCtrl.SetVariable( “ _root.g_Protocol.win_data “ , szXml.c_str());
53 None.gif
54 None.gif // 设置列表框数据
55 None.gif xRoot.Clear();
56 None.gif xQuery.Clear();
57 None.gif szXml.clear();
58 None.gif xRoot.SetAttribute( “ event “ , 77 );
59 None.gif xQuery.SetAttribute( “ sel_item “ , 1 );
60 None.gif
61 None.gif xItem.SetAttribute( “ info “ , “ 汉皇重色思倾国 “ );
62 None.gif xQuery.InsertEndChild(xItem);
63 None.gif
64 None.gif xItem.SetAttribute( “ info “ , “ 御宇多年求不得 “ );
65 None.gif xQuery.InsertEndChild(xItem);
66 None.gif
67 None.gif xItem.SetAttribute( “ info “ , “ 杨家有女初长成 “ );
68 None.gif xQuery.InsertEndChild(xItem);
69 None.gif
70 None.gif xItem.SetAttribute( “ info “ , “ 养在深闺人未识 “ );
71 None.gif xQuery.InsertEndChild(xItem);
72 None.gif
73 None.gif xItem.SetAttribute( “ info “ , “ 天生丽质难自弃 “ );
74 None.gif xQuery.InsertEndChild(xItem);
75 None.gif
76 None.gif xRoot.InsertEndChild(xQuery);
77 None.gif
78 None.gif szXml << xRoot;
79 None.gif m_FlashCtrl.SetVariable( “ _root.g_Protocol.win_data “ , szXml.c_str());

5、在OnFsCommand()中处理FLASH发来的消息.
1 None.gif void CUIShowDlg::OnFsCommand(LPCTSTR command, LPCTSTR args)
2 ExpandedBlockStart.gif {
3InBlock.giftry
4ExpandedSubBlockStart.gif{
5InBlock.gifint nEvent =0;
6InBlock.gif TiXmlDocument xmlData;
7InBlock.gif xmlData.Parse(command);
8InBlock.gifif (xmlData.Error())
9ExpandedSubBlockStart.gif{
10InBlock.gifthrow (__LINE__);
11ExpandedSubBlockEnd.gif }
12InBlock.gif
13InBlock.gif TiXmlElement *pRoot = xmlData.FirstChildElement();
14InBlock.gifif (NULL == pRoot)
15ExpandedSubBlockStart.gif{
16InBlock.gifthrow (__LINE__);
17ExpandedSubBlockEnd.gif }
18InBlock.gif pRoot->Attribute(“event”, &nEvent);
19InBlock.gif
20InBlock.gifswitch(nEvent)
21ExpandedSubBlockStart.gif{
22InBlock.gifcase0xff000000: //移动窗口消息
23InBlock.gif SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
24InBlock.gifbreak;
25InBlock.gifcase0xff000001: //关闭窗口
26InBlock.gif EndDialog(0);
27InBlock.gifbreak;
28InBlock.gifcase0xff000003: //最小化窗口
29InBlock.gif ShowWindow(SW_MINIMIZE);
30InBlock.gifbreak;
31InBlock.gifdefault:
32InBlock.gifbreak;
33ExpandedSubBlockEnd.gif }
34ExpandedSubBlockEnd.gif }
35InBlock.gifcatch (dot.gif)
36ExpandedSubBlockStart.gif{
37InBlock.gif TRACE(“/r/n收到无效的命令 : %s”, command);
38ExpandedSubBlockEnd.gif }
39ExpandedBlockEnd.gif}
40 None.gif到此一款精美的软件界面已经开发完成。有兴趣的朋友可以下载我的源代码看看。
/Files/beifangying/UIShow.rar

发表评论

表情:
评论列表 (有 0 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读

    相关 精美js聊天窗口界面代码

    [下载地址][Link 1]一款精美的聊天窗口界面代码,使用JS+CSS+HTML实现的聊天界面,左侧聊天对象平滑切换。这只是个聊天窗口的前端样式,没有对接后端。 ![163

    相关 QT自定义精美换肤界面

    陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数