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

做过界面开发的人想必都清楚如果要用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(00490345);
11    m_FlashCtrl.MoveWindow(00490345);
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发来的消息.
 1void 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

posted on 2008-08-28 14:00 司强 阅读(9639) 评论(34)  编辑 收藏 引用

评论

# re: 谈VC++结合FLASH开发精美程序界面[未登录] 2008-08-28 14:17 代李

不知道这种能否被推广开来。。。。。。。。。。  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 14:38 司强

当然可以, 没有什么不可能的...@代李
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 14:40 二二

好东西,这样界面做的就漂亮了..  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 14:51 司强

谢谢, 这样做界面可以节省不少时间而且不会出现什么断言,异常之类的问题@二二
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 15:46 www.helpsoff.com.cn

如何实现跨平台?  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 17:13 true

非常漂亮,可执行文件的体积有多少?太大的话,就不适合做界面了  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 17:34 浪迹天涯

界面很漂亮,不知Flash部分制作是否麻烦?  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 18:38 Bill Hsu

太强了,
就是速度不太强  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 19:46 RichardHe

国外早就有公司做游戏的UI用FLASH..
http://www.scaleform.com

要钱的!
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面[未登录] 2008-08-28 20:54 司强

主要用于windows平台...@www.helpsoff.com.cn
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 20:55 司强

体积不大,你可以下载源代码看看就知道了...@true
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 21:00 司强

对于界面你根本看不到速度慢...@Bill Hsu
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-28 23:36 地方

说实话,这个界面很恶俗…………  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-29 09:18 txw

天晴数码的游戏《魔域》,《机战》的登录界面都是Flash做的。非常漂亮。用Flash做界面真的很适用于游戏。c++只需处理业务逻辑,剩下的UI全部交给Flash,Flash也只需要写些简单的ActionScript脚本就够了。  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-29 09:19 txw

甚至可以把Flash视频渲染到3D场景里,你可以想象一下边玩游戏,边看奥运是多么舒服的事情。哈哈,扯远了。。。。  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-29 12:40 司强

支持仁兄...@txw
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-29 23:26 大大

教育网的“快门”就这这样搞的  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-08-31 21:37 wx

点击右键出现什么菜单?  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-09-02 02:31

那还不如全部用flash做算了!  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-09-03 10:05 biinwi

界面能能放大缩小吗?  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2008-09-05 16:08 cplayer

如果能把两者关系到转过来还不错

因为我希望执行的是swf.

如果这样,就可以通过其他方式把数据处理放到c/c++程序,比如通过网络.  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2009-02-02 23:15 catasthophe

司强兄这个方法不错,试了下,想问一下程序窗口拖拽是怎么实现的,我试了很多鼠标事件都没成功,MOUSE_MOVE时间移动了但是必须移动着拖动窗口''!,还往赐教  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2009-02-06 00:27 司强

我的文章里有提到,就在这篇文章里。其实就是一条系统消息@catasthophe
  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2009-04-14 17:01 DDGG

非常棒!可以提供Flash源文件.fla看一下吗?  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2009-05-10 17:07 kjb_A_A

不知道对与swf文件有什么要求没有,要是有fla源码就更好了!谢谢!如果方便的话麻烦大哥发到“kjb098@163.com”不胜感激!  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2009-05-10 17:09 kjb_A_A

顺便问一下,要做成不规则界面怎么办?背景不透明呀  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2009-08-26 09:50 unique

为什么我的编译失败啊?
UIShow.obj : error LNK2001: unresolved external symbol "public: __thiscall CUIShowDlg::CUIShowDlg(class CWnd *)" (??0CUIShowDlg@@QAE@PAVCWnd@@@Z)
UIShow.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ShockwaveFlash::~ShockwaveFlash(void)" (??1ShockwaveFlash@@UAE@XZ)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
libcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/UIShow.exe : fatal error LNK1120: 5 unresolved externals  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面[未登录] 2009-08-26 22:49 司强

你的系统安装FLASH插件了没有??  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2010-05-05 11:19 QTM

程序有点问题,主要是对事件捕获上用的是有符号整数
void CUIShowDlg::OnFsCommand(LPCTSTR command, LPCTSTR args)

unsigned int nEvent = 0; 改为了unsigned
同时修改代码:

double dEventTmp = 0;

dEventTmp=atof(pRoot->Attribute("event"));
nEvent=dEventTmp;  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面[未登录] 2010-09-08 14:56

非常的好~~  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2011-03-02 15:35 dddddddd

henhaohaoha  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2011-05-15 10:48 王志海

我现在的窗口移动不能实现!因为不知道FLASH文件怎么处理的,请指点!  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2011-08-15 09:20 陈隆

支持,顶一下  回复  更多评论   

# re: 谈VC++结合FLASH开发精美程序界面 2013-03-19 23:35 lhy__

无法移动窗口请改下代码
case 0xff000000: //移动窗口消息
ReleaseCapture();
SendMessage(WM_SYSCOMMAND,SC_MOVE|HTCAPTION,0);
//SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
break;  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿(6)

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜