首页 > DUI > DUI-flash相关代码
2014十一月19

DUI-flash相关代码

wndless实现flash的demo:http://www.codeproject.com/Articles/33516/ATL-Windowless-ActiveX-Media-Container

内存流加载flash解决方案:http://stackoverflow.com/questions

从资源中加载

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
	typedef struct _FLASH_STREAM_HEADER
		{
			DWORD m_dwSignature;
			DWORD m_dwDataSize;
		} FLASH_STREAM_HEADER, *PFLASH_STREAM_HEADER;
 
		wchar_t* pszUrl = L"d:\\1.swf";
		DWORD dwSize = DM::GetFileSizeW(pszUrl);
		if (dwSize)
		{
			DWORD dwRead = 0;
			byte *pBuf = new byte[dwSize];
			DM::GetFileBufW(pszUrl,(void**)&pBuf, dwSize,dwRead);
 
 
			IStream *spStream;
			HRESULT hResult = ::CreateStreamOnHGlobal(NULL, TRUE, &spStream);
			FLASH_STREAM_HEADER fsh = {0x55665566, dwRead};
			ULARGE_INTEGER uli = {sizeof (fsh) + dwRead};
			hResult = spStream->SetSize(uli);
			hResult = spStream->Write(&fsh, sizeof (fsh), NULL);
			hResult = spStream->Write(reinterpret_cast<void*>(pBuf), dwRead, NULL);
			uli.QuadPart = 0;
			hResult = spStream->Seek(*reinterpret_cast<PLARGE_INTEGER>(&uli), STREAM_SEEK_SET, NULL);
			m_axContainer->InitControl(spStream);
			delete[]pBuf;
			pBuf = NULL;
 
		}

从内存中加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
		typedef struct _FLASH_STREAM_HEADER
		{
			DWORD m_dwSignature;
			DWORD m_dwDataSize;
		} FLASH_STREAM_HEADER, *PFLASH_STREAM_HEADER;
 
		IStream *pStream = NULL;
		HRSRC hRes = FindResourceW(NULL,(LPCTSTR)IDR_SWF1,L"SWF");
		if (hRes)
		{
			DWORD dwResourceDataSize = SizeofResource(NULL,hRes);
			HGLOBAL hResourceLoaded = ::LoadResource(NULL, hRes);
			IStream *spStream;
			HRESULT hResult = ::CreateStreamOnHGlobal(NULL, TRUE, &spStream);
			FLASH_STREAM_HEADER fsh = {0x55665566, dwResourceDataSize};
			ULARGE_INTEGER uli = {sizeof (fsh) + dwResourceDataSize};
			hResult = spStream->SetSize(uli);
			hResult = spStream->Write(&fsh, sizeof (fsh), NULL);
			hResult = spStream->Write(reinterpret_cast<void*>(hResourceLoaded), dwResourceDataSize, NULL);
			uli.QuadPart = 0;
			hResult = spStream->Seek(*reinterpret_cast<PLARGE_INTEGER>(&uli), STREAM_SEEK_SET, NULL);
 
			m_axContainer->InitControl(spStream);
		}

转下ShockwaveFlash用法:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
ShockwaveFlash控件详解()—属性()
属性:
1.AlignMode (读写)
语法:AlignMode As Long
说明:对齐方式,与 SAlign 属性联动。当控件的 长宽比例与影片不一致且 WMode 不为 ExactFit 时,影片(没有被放大的)在控件中显示的位置可用该属性调整。 该属性值由标志位组成。如图,将该属性值(二进制)中相 应的位标记为 1 就设置了相应的对齐方向。属性值与相应的对齐方式。后面括号里是二进制数。
1:左对齐(0001)
2:右对齐(0010)
4:顶对齐(0100)
8:底对齐(1000)
也可以组合各种对齐方式,同时将两个或以上的位标记为 1,也就是将这四个基本值组合相加。比如同时左对齐 和顶对齐,属性值则设为 5(0101)。
例子 : 设置影片为右对齐:
movie.AlignMode = 2
2.SAlign (读写)
语法:SAlign As String
说明:对齐模式(与 AlignMode 联动)。当 AlignMode
代表各对齐模式的位被置“1”时,SAlign 值也相应被设为
“L”(Left)、“T”(Top)、“R”(Right)、“B”(Bottom)各 字符的组合。‘L’、‘T’、‘R’、‘B’的先后顺序不变。
例子:设置影片为左对齐和顶对齐:
movie.SAlign = “LT”
3.BackgroundColor(读写)
语法:BackgroundColor As Long
说明:影片的背景色(与 BGColor 联动)。以(红 × 65536 +绿× 256 +)计算颜色值。红绿蓝颜色取值范围(0-255)。默认的影片背景色为 -1 。如果影片 设置了底色或有图片当作背景,那么看不出来该属性值的改变会有什么影响。
例子:将影片背景色设为蓝色 :
movie.BackgroundColor = 255
4.BGColor (读写)
语法:BGColor As String
说明:影片的背景色(与 BackgroundColor 联动)。与 BackgroundColor 不同的是,BGColor 是一个六位的十六进制数,每两位分别代表红绿蓝颜色值。如:FFEEAA 表示 红色值为 FF、绿色值为 EE 、蓝色值为 AA 。
例子:将影片背景色设为红色:
movie.BGColor = “FF0000”
5.Base (读写)
语法:Base As String
说明:指定用于解决影片中所有相对路径的声明的基地址。当影片与其需要的其他文件不在同一目录中的时候该属性特别有用。如不特别指定,Base 的值默认为 “.”,也就 是当前影片所在的路径。
例子 :
movie.Base = “Http://www.domain.com/pathname1/pathname2”
6.Movie (读写)
语法:Movie As String
说明:要播放的影片路径(URL)。设置该属性为 一个 SWF 文件的 URL 将载入文件并播放它。若影片是在本地硬盘上,要写成从盘符开始的绝对路径;若影片是在某网站上,也要写全 URL 地址。
例子 :
movie.Movie = “http://www.domain.com/path1/path2/filename.swf”
或
movie.Movie = “c:\temp\test.swf7.DeviceFont (读写)
语法:DeviceFont As Boolean
说明 : 决定是否使用影片内嵌的字体, 默认值为 False。将该属性值设为 True 则强制播放器不使用影片中的内嵌的字体而使用本地系统字体。
例子:
movie.DeviceFont = True
8.EmbedMovie (读写)
语法:EmbedMovie As Boolean
说明:影片是否被存贮到控件所在的容器中。当你已载入一个影片后将该属性设为 True,播放影片时就不必再去读 SWF 文件了。这使得在 PowerPoint 简报或 VB 程序 里使用 Flash 影片更容易。但将该属性设为 True 后,控件的 Movie 属性就不再接受新的值了。要想播放另一个影片(给 Movie 属性赋新值),必须先将 EmbedMovie 属性设为 False 。
例子 :
movie.EmbedMovie = True
9.FrameNum (读写)
语法:FrameNum As Long
说明:影片当前帧的编号 (0 开始计数)。设置 该属性值将使影片停在由 FrameNum 指定的帧处。
例子 : 显示当前帧数:
MsgBox ” 当前显示的是第 ” & movie.FrameNum & ” 帧。”
使影片显示第 10:
Bomovie.FrameNum = 9
10.TotalFrames(只读)
语法:TotalFrames As Long
说明:返回影片中总帧数。该参数要到影片载入完成才有效(ReadyState=4)。
例子 :
If movie.ReadyState = 4 Then MsgBox ” 本影片共有 ” & movie.TotalFrames & ” 帧。”
11.Loop (读写)
语法:Loop As Boolean
说明:是否循环播放。设为 True 是循环播放,设为 False 则只播放一次。
例子 :
movie.Loop = True
12.Menu (读写)
语法:Menu As Boolean
说明:是否显示菜单。设为 True 显示所有菜单,设为 False 菜单被屏蔽,但仍有一项“About Macromedia Flash Player…”。如果你实在不喜欢这个菜单,应该在程序中通过拦截鼠标消息的方法来达到目的。与在独立的 Flash 播放器中不同的是,在控件的右键菜单里点
“About…”的话,就会打开浏览器到 Macromedia 的网站上去 看 About 。
例子 :
movie.Menu = False
13.Playing (只读)
语法:Playing As Boolean
说明:当前播放状态。如果影片正在播放,该属性 值为 True ,否则为 False 。
例子 :
If movie.Playing = False Then MsgBox ” 影片已停止播放!14.Quality (读写)
语法:Quality As Long
说明:画面质量(与 Quality2 联动)。Quality 可以取:
0 ——相当于 Quality2 取 “Low”
1 ——相当于 Quality2 取 “High”
2 ——相当于 Quality2 取 “AutoLow”
3 ——相当于 Quality2 取 “AutoHigh”
例子 :
movie.Quality = 1
15.Quality2(读写)
语法:Quality As String
说明:画面质量(与 Quality 联动)。Quality2 可以取:
Low:偏重于播放速度而不管显示效果,而且不启用
消锯齿功能 。
High:偏重于画面而不管播放速度,并且总是启用消锯齿功能。如果影片中不包含动画就平滑处理位图;如果有动画,那么位图就不被平滑处理。(这里的动画应该是把一张图片做平移或旋转)
AutoLow:先着重于播放速度,但只要有可能就改善显示效果。一开始播放时先禁用消锯齿功能。如果播放器检测到处理器能承受得了,就启用消锯齿功能 。
AutoHigh:一开始是播放速度和显示效果并重,但如有必要就牺牲画质确保速度。开始播放时就启用消锯齿功能。但如果实际的帧速率比设计时指定的速率慢了,就禁用消锯齿功能来提高播放速度。
例子 :
movie.Quality2 = “High”
16.ReadyState(只读)
语法:ReadyState As Long
说明:影片的当前状态。ReadyState 可以取:
0 ——正在载入
1 ——未初始化
2 ——已载入
3 ——正在交互
4 ——完成 例子 :
If movie.ReadyState = 4 Then MsgBox ” 影片载入完成!17.Scale (读写)
语法:scale As String
说明:缩放模式(与 ScaleMode 联动)。Scale 可以 取:
ShowAll ——在控件内显示全部影片区域,保持影片 长宽比例不变,影片的大小决定于控件长或宽中较小的一 边 。
NoBorder ——在控件内显示部分影片区域,保持影片 长宽比例不变,影片的大小决定于控件长或宽中较大的一 边 。
ExactFit ——在控件内显示全部影片区域,将影片的长 宽比例强制等于控件的长宽比例。
例子 :
MsgBox ” 当前的缩放模式是:& movie.Scale
18.ScaleMode(读写)
语法:ScaleMode As Long
说明:缩放模式(与 Scale 联动)。ScaleMode 可以取:
0 ——相当于 Scale 取 “ShowAll”
1 ——相当于 Scale 取 “NoBorder”
2 ——相当于 Scale 取 “ExactFit”
例子:使影片的缩放模式改成“ExactFit ”:
movie.ScaleMode = 2
19.Stacking (读写)
语法:Stacking As String
说明:用于 HTML,将 Flash Player 当成 HTML 中 的一种“行为”使用时,该属性决定 Flash 影片相对于与其参照的 HTML 内容如何显示。(有关“行为”请参阅样式表 的资料)。Stacking 可以取:
none ——“行为”不显示。
replaceall ——“行为”的显示取代全部其他元素的内容,包括背景 。
content ——“行为”的显示只取代其他元素的内 容。
background ——“行为”的显示只取代其他元素的背景 。
below ——“行为”在所有其他元素内容的下面显示。
belowflow ——“行为”以反向 Z 顺序显示在其他元素 的子对象之上,但在该元素主要内容之上。
aboveflow ——“行为”以正向 Z 顺序显示在其他元素 的子对象之下,但在该元素主要内容之上。
above ——“行为”显示在所有其他元素的内容之上。
top ——“行为”的显示置于整个页面内容之上。
例子 :
movie.Stacking = “below”
20.WMode (读写)
语法:WMode As String
说明:控件的窗口模式。WMode 可以取: Window —— WMode 属性的默认值,按 Flash 播放器
典型的方式工作,即在控件的矩形窗口中播放影片,这样一 般都能提供最快的动画效果。
Opaque ——使影片不透明。 Transparent ——创建一个透明的影片。如果影片中有
透明的片段,放到这里时,就可以看到控件下面的背景。但 使用此属性值,动画的播放速度可能会慢一些。
例子 :
movie.WMode = “Transparent”
ShockwaveFlash控件详解()—方法与事件()
方法:
下面中的方法不返回值:
1.Back
语法:Back()
说明 : 影片后退一帧 , 并且停止播放 。 例子 :
movie.Back
2.Forward
语法:Forward()
说明 : 影片前进一帧, 并且停止播放。
例子 :
movie.Forward
3.GotoFrame
语法:GotoFrame(FrameNum As Long)
说明:将影片跳转到由 FrameNum 指定的帧,并且停止播放。如果所指定的帧还未载入,播放器前进到最后的可用帧并停下,在调用过程中会产生无法预料的后果。最好使用 PercentLoaded 方法来确定是否已载入足够的影片来执行本方法。参数 FrameNum 是从 0 开始的,这和 Flash 中的 Goto 动作不一样,它是从 1 开始的。
例子:跳转到影片的第 20:
movie.GotoFrame 20
4.LoadMovie
语法:LoadMovie(layer As Long, url As String)
说明:将由 url 指定的影片载入到由 layer 指定的层上。
例子:将 movie.swf 载入至 0:
movie.LoadMovie 0, “movie.swf5.Pan
语法:Pan(x As Long, y As Long, mode As Long)
说明:将一个放大过的影片平移由 x 和 y 指定的距离。 x 和 y 均为相对值。即控件相对于影片来说平移的距离(你可以想象控件是一个窗户,影片是我们从窗户里看到的放 在外面的布景, 我们看到窗户相对于布景平移了一些距离,那是外面的布景在动,而窗户是不动的)。用 mode 参数 来指定 x 和 y 的值是像素还是窗口的百分比,当 mode=0 时坐标系以像素为单位;mode=1 时坐标系就以窗口的百分 比来计算。平移并不能超出影片的边框,也就是说,往一个方向平移最多到达影片的边缘与控件对齐的程度。
例子:控件相对于影片向左向上各平移 5 个像素(当 然控件不会动 ,是影片向右向下平移了 ):
6.Play
语法:Play()
说明:开始播放影片。
例子:
movie.Play
7.Rewind
语法:Rewind()
说明:倒带。返回到影片的第一帧。
例子:
movie.Rewind
8.SetVariable
语法:SetVariable(name As String, value As String)
说明:将由 name 指定的 Flash 变量值设为 value。
例子:
movie.SetVariable/Form:UserName”, “John Smith”
—————————————————————————
事件:
1.FSCommand
语法:ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
说明:在flash中调用fscommand()触发的事件
参数:
command :代表命令标识
args :代表参数
例子:
Select Case command ‘这里可以用 if
‘但command多了之后就不好 if 用了
‘我是做个示范
Case “command1”
If args =123” Then
…
Else
…
End If
Case …
End Select
2.FlashCall
语法:ShockwaveFlash1_FlashCall(ByVal request As String)
说明:可能很少人知道这个事件的用处,其实这个跟 FSCommand 事件是差不多的。与 FSCommand 不同的是,这个事件可以有返回值(下面会谈到)
参数是一个XML格式的字符串,格式是
“%s“,去查查帮助就知道了。
处理request:标准VB没有处理XML的库,你可以自己找支持XML的插件来用。下面就是按照个人需要处理request了。
返回值:
事件处理函数是没有返回值的,但是flash player提供了一个方法:ShockwaveFlash1.SetReturnValue() 专门传递返回值,格式是%s(也可以是别的AS结构,具体看帮助)。
例子:我在这给出tinyxml的例子:
Private Sub ShockwaveFlash1_FlashCall(ByVal request As String)
Dim request_xml As New TiXmlDocument
Dim request_name As String
request_xml.Parse request
request_name = request_xml.RootElement().Attribute(“name”)
…自己去处理吧
End Sub
3.OnProgress
语法:ShockwaveFlash1_OnProgress(ByVal percentDone As Long)
说明:估计是flash在加载过程中进度改变触发的吧?
percentDone 则应该是个百分数~
反正我还没逮住这个事件一次..= =!
4.OnReadyStateChange
语法:ShockwaveFlash1_OnReadyStateChange(newState As Long)
说明:顾名思义,就是 ReadyState 改变时触发的事件,具体请看上面关于 ReadyState 属性的说明


文章作者:hgy413
本文地址:http://hgy413.com/1881.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

11 Responses to “DUI-flash相关代码”

  1. #1 minecraft 回复 | 引用 Post:2018-10-04 10:43

    I think the admin of this web page is really working hard
    in support of his site, since here every stuff is quality based stuff.

  2. #2 minecraft 回复 | 引用 Post:2018-10-04 19:17

    Have you ever considered about adding a little bit more
    than just your articles? I mean, what you say is fundamental and everything.
    However imagine if you added some great graphics or video clips to give
    your posts more, “pop”! Your content is excellent but with images and video clips, this blog
    could certainly be one of the very best in its niche.
    Awesome blog!

  3. #3 minecraft 回复 | 引用 Post:2018-10-07 21:43

    Hi my friend! I want to say that this article is awesome, nice written and come with almost all significant infos.
    I would like to peer extra posts like this .

  4. I just like the valuable information you supply in your articles.
    I’ll bookmark your blog and take a look at again right here frequently.
    I am somewhat sure I’ll be told plenty of new stuff proper here!
    Best of luck for the next!

  5. #5 Coconut Oil Benefits 回复 | 引用 Post:2018-10-24 14:01

    I think this is among the so much important info for me.
    And i’m satisfied reading your article. However want to
    commentary on few general things, The site style
    is wonderful, the articles is really nice : D.
    Excellent task, cheers

  6. #6 Benefits of Coconut Oil 回复 | 引用 Post:2018-10-29 04:32

    I think that what you said was actually very logical.
    However, consider this, what if you composed a catchier post title?
    I mean, I don’t wish to tell you how to run your website, but suppose you added a headline that grabbed a person’s attention? I mean blog topic is kinda vanilla.
    You could look at Yahoo’s home page and watch how they create post titles to grab viewers to open the links.
    You might add a related video or a pic or two to get readers excited about what you’ve
    got to say. In my opinion, it might make your blog a little
    livelier.

  7. #7 Quest Bars 回复 | 引用 Post:2018-11-09 03:30

    I feel that is one of the most important
    information for me. And i’m glad reading your article.
    But want to remark on few common things, The web site style is
    perfect, the articles is really excellent : D. Excellent job, cheers

  8. I used to be able to find good information from your articles.

  9. I was wondering if you ever thought of changing the structure of your site?
    Its very well written; I love what youve got to say. But maybe you could a little more in the way of
    content so people could connect with it better. Youve got an awful lot of
    text for only having 1 or two images. Maybe you could space it out
    better?

  10. Informative article, totally what I was looking for.

  11. Hi there just wanted to give you a quick heads up. The words in your article seem to
    be running off the screen in Firefox. I’m not sure if this is a format issue or something to do with browser compatibility but I thought I’d post to let you know.
    The layout look great though! Hope you get the issue solved
    soon. Kudos

发表评论