DirectDraw实例:显示图片
1
using System;
2
using System.Drawing;
3
using System.Collections;
4
using System.ComponentModel;
5
using System.Windows.Forms;
6
using System.Data;
7
// 添加新的命名空间。
8
using DxVBLib;
9![]()
10
namespace DirectDraw1
11
{
12
/// <summary>
13
/// DirectDraw实例:显示图片。
14
/// </summary>
15
public class Form1 : System.Windows.Forms.Form
16
{
17
private System.Windows.Forms.Panel panel1;
18
/// <summary>
19
/// 必需的设计器变量。
20
/// </summary>
21
private System.ComponentModel.Container components = null;
22![]()
23
public Form1()
24
{
25
//
26
// Windows 窗体设计器支持所必需的
27
//
28
InitializeComponent();
29
//
30
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码。
31
//
32
DirectX = new DirectX7();
33
InitializeDirectX();
34
}
35![]()
36
/// <summary>
37
/// 清理所有正在使用的资源。
38
/// </summary>
39
protected override void Dispose( bool disposing )
40
{
41
if( disposing )
42
{
43
if (components != null)
44
{
45
components.Dispose();
46
}
47
}
48
base.Dispose( disposing );
49
}
50![]()
51
Windows Form Designer generated code
83![]()
84
/// <summary>
85
/// 应用程序的主入口点。
86
/// </summary>
87
[STAThread]
88
static void Main()
89
{
90
Application.Run(new Form1());
91
}
92
private DirectX7 DirectX = null;
93
private DirectDraw7 DirectDraw = null;
94
private DirectDrawSurface7 Surface = null;
95
private DirectDrawSurface7 PrimarySurface = null;
96
private DDSURFACEDESC2 Surface1;
97
private DDSURFACEDESC2 Surface2;
98
private DirectDrawClipper Clipper = null;
99
private Boolean bInit;
100
private void Blt()
101
{
102
// 判断是否初始化成功。
103
if (bInit == false)
104
return;
105![]()
106
DxVBLib.RECT r1 = new DxVBLib.RECT();
107
DxVBLib.RECT r2 = new DxVBLib.RECT();
108![]()
109
// 得到窗口边界大小。
110
DirectX.GetWindowRect(panel1.Handle.ToInt32(), ref r1);
111
// 按照新的边界大小显示图片。
112
r2.Bottom = Surface2.lHeight;
113
r2.Right = Surface2.lWidth;
114
PrimarySurface.Blt(ref r1, Surface, ref r2, CONST_DDBLTFLAGS.DDBLT_WAIT);
115
}
116
private void InitializeDirectX()
117
{
118
// 初始化各个变量。
119
DirectDraw = DirectX.DirectDrawCreate("");
120
DirectDraw.SetCooperativeLevel(this.Handle.ToInt32(), CONST_DDSCLFLAGS.DDSCL_NORMAL);
121![]()
122
Surface1.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS;
123
Surface1.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE;
124
PrimarySurface = DirectDraw.CreateSurface(ref Surface1);
125![]()
126
Surface2.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS;
127
Surface2.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN;
128![]()
129
try
130
{
131
Surface = DirectDraw.CreateSurfaceFromFile("sample.bmp", ref Surface2); //background.bmp
132
}
133
catch(System.Runtime.InteropServices.COMException e)
134
{
135
// 没有找到文件。
136
if ( (uint)e.ErrorCode == 0x800A0035)
137
{
138
MessageBox.Show("没有找到文件'sample.bmp'.\n该文件必须和程序放在一个目录下面。", "图片没有找到");
139
}
140
else
141
{
142
MessageBox.Show("异常: " + e.ToString(), "异常信息");
143
}
144
Application.Exit();
145
Application.DoEvents();
146
}
147
Clipper = DirectDraw.CreateClipper(0);
148
Clipper.SetHWnd(panel1.Handle.ToInt32());
149
PrimarySurface.SetClipper(Clipper);
150
// 初始化完成。
151
bInit = true;
152
Blt();
153
}
154![]()
155
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
156
{
157
DirectDraw.RestoreAllSurfaces();
158
Blt();
159
}
160![]()
161
private void Form1_Resize(object sender, System.EventArgs e)
162
{
163
panel1.Width = this.ClientSize.Width;
164
panel1.Height = this.ClientSize.Height;
165
Blt();
166
}
167
}
168
}
169![]()
using System;2
using System.Drawing;3
using System.Collections;4
using System.ComponentModel;5
using System.Windows.Forms;6
using System.Data;7
// 添加新的命名空间。8
using DxVBLib;9

10
namespace DirectDraw111
{12
/// <summary>13
/// DirectDraw实例:显示图片。14
/// </summary>15
public class Form1 : System.Windows.Forms.Form16
{17
private System.Windows.Forms.Panel panel1;18
/// <summary>19
/// 必需的设计器变量。20
/// </summary>21
private System.ComponentModel.Container components = null;22

23
public Form1()24
{25
//26
// Windows 窗体设计器支持所必需的27
//28
InitializeComponent();29
//30
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码。31
//32
DirectX = new DirectX7();33
InitializeDirectX();34
}35

36
/// <summary>37
/// 清理所有正在使用的资源。38
/// </summary>39
protected override void Dispose( bool disposing )40
{41
if( disposing )42
{43
if (components != null)44
{45
components.Dispose();46
}47
}48
base.Dispose( disposing );49
}50

51
Windows Form Designer generated code83

84
/// <summary>85
/// 应用程序的主入口点。86
/// </summary>87
[STAThread]88
static void Main()89
{90
Application.Run(new Form1());91
}92
private DirectX7 DirectX = null;93
private DirectDraw7 DirectDraw = null;94
private DirectDrawSurface7 Surface = null;95
private DirectDrawSurface7 PrimarySurface = null;96
private DDSURFACEDESC2 Surface1;97
private DDSURFACEDESC2 Surface2;98
private DirectDrawClipper Clipper = null;99
private Boolean bInit;100
private void Blt()101
{102
// 判断是否初始化成功。103
if (bInit == false)104
return;105

106
DxVBLib.RECT r1 = new DxVBLib.RECT();107
DxVBLib.RECT r2 = new DxVBLib.RECT();108

109
// 得到窗口边界大小。110
DirectX.GetWindowRect(panel1.Handle.ToInt32(), ref r1);111
// 按照新的边界大小显示图片。112
r2.Bottom = Surface2.lHeight;113
r2.Right = Surface2.lWidth;114
PrimarySurface.Blt(ref r1, Surface, ref r2, CONST_DDBLTFLAGS.DDBLT_WAIT);115
}116
private void InitializeDirectX()117
{118
// 初始化各个变量。119
DirectDraw = DirectX.DirectDrawCreate("");120
DirectDraw.SetCooperativeLevel(this.Handle.ToInt32(), CONST_DDSCLFLAGS.DDSCL_NORMAL);121

122
Surface1.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS;123
Surface1.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE;124
PrimarySurface = DirectDraw.CreateSurface(ref Surface1);125

126
Surface2.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS;127
Surface2.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN;128

129
try130
{131
Surface = DirectDraw.CreateSurfaceFromFile("sample.bmp", ref Surface2); //background.bmp132
}133
catch(System.Runtime.InteropServices.COMException e)134
{135
// 没有找到文件。136
if ( (uint)e.ErrorCode == 0x800A0035)137
{138
MessageBox.Show("没有找到文件'sample.bmp'.\n该文件必须和程序放在一个目录下面。", "图片没有找到");139
}140
else141
{142
MessageBox.Show("异常: " + e.ToString(), "异常信息");143
}144
Application.Exit();145
Application.DoEvents();146
}147
Clipper = DirectDraw.CreateClipper(0);148
Clipper.SetHWnd(panel1.Handle.ToInt32());149
PrimarySurface.SetClipper(Clipper);150
// 初始化完成。151
bInit = true;152
Blt();153
}154

155
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)156
{157
DirectDraw.RestoreAllSurfaces();158
Blt();159
}160

161
private void Form1_Resize(object sender, System.EventArgs e)162
{163
panel1.Width = this.ClientSize.Width;164
panel1.Height = this.ClientSize.Height;165
Blt();166
}167
}168
}169



浙公网安备 33010602011771号