介绍一种方法,试试看吧。
在 窗 体 上 建 立 一 个 网 格 控 件, 设 定 网 格 行 不 可 见, 去 掉 固 定 行 和 固 定 列, 用 程 序 实 现 网 格 控 件 与 窗 体 同 样 大 小, 并 随 窗 体 大 小 的 改 变 而 改 变。 然 后 设 计 一 个 花 纹 图 案, 形 成BMP 位 图 文 件( 本 文 程 序 使 用 文 件Pict1.bmp), 或 者 从 其 它 图 象 中 截 取 一 段 图 案, 也 可 以 利 用Windows 系 统 提 供 的 图 案( 如c:\windows\Tiles.bmp), 将 其 调 入Picture 控 件。 设 定 网 格 的 每 个 单 元 与 该 图 案 大 小 相 同, 使 单 元 的 数 量 正 好 覆 盖 整 个 窗 体 背 景, 再 将 所 有 单 元 均 显 示 该 图 案。 通 过 子 程 序Backpict() 实 现 以 上 过 程, 不 论 图 案 大 小、 窗 体 大 小, 程 序 都 能 自 动 调 整 网 格 控 件 大 小 和 网 格 单 元 大 小 及 单 元 数 量。 该 程 序 在Visual Basic 4.0 上 调 试 成 功。 
1. 新 建 窗 体Form1, 属 性 如 下: 
Caption = “ 背 景 花 纹 的 实 现” 
Borderstyle=3( 无 最 大、 最 小 化 按 钮) 
2. 建 网 格 控 件Grid1, 它 的 位 置 和 大 小 将 在 程 序 中 设 置( 与Form1 同 样 大), 属 性 为: 
Enabled = False( 焦 点 不 会 落 在 网 格 控 件Grid1 上) 
Fillstyle=1( 改 变 所 有 单 元Text 特 性) 
Fixedcols=0( 无 固 定 行) 
Fixedrows=0( 无 固 定 列) 
Gridlines = False( 网 格 行 不 可 见), 
Visible = True 
3. 建 立 图 象 控 件Picture1, 程 序 运 行 时 将 背 景 花 纹 基 本 图 案 放 入 其 中, 属 性 为 
Visible = False( 不 可 见) 
Autosize = True( 自 动 调 整 大 小) 
4. 控 件 中 加 入Sheridan 3D Controls, 选 取 其 中 的 三 维 命 令 按 钮SSCommand, 建 立 两 个 按 钮 
SSCommand1.Caption=“ 退 出” 
SSCommand2.Caption=“ 更 换 背 景”( 演 示 不 同 的 背 景 图 案) 
它 们 的 属 性Picture 可 调 用 与 背 景 相 同 或 不 同 的 图 案, 如 果 使 用 普 通 的 命 令 按 钮 控 件Command 也 可, 只 是 命 令 按 钮 无 背 景 图 案。 
5. 建 立 背 景 图 案 形 成 子 程 序: 
Dim pictfile As String '位图文件名
Dim FILEPATH As String ' 文件路径
Sub Backpict(pictfile) 
picture1.ScaleMode = 3
Form1.ScaleMode = 3
picture1.Picture = LoadPicture(pictfile)
'网格控件覆盖整个窗体背景
grid1.Top = -1
grid1.Left = -1
grid1.Width = Width
grid1.Height = Height
grid1.Cols=Int(Form1.ScaleWidth/picture1.ScaleWidth) + 1
grid1.Rows=Int(Form1.ScaleHeight/picture1.ScaleHeight) + 1
'所有单元大小等于基本图案大小
For i = 0 To grid1.Cols - 1
For j = 0 To grid1.Rows - 1
grid1.ColWidth(i) = picture1.ScaleWidth * 15
grid1.RowHeight(j) = picture1.ScaleHeight * 15
Next j
Next I
'选定所有单元
grid1.SelStartCol = 0
grid1.SelStartRow = 0
grid1.SelEndCol = grid1.Cols - 1
grid1.SelEndRow = grid1.Rows - 1
grid1.Picture = Picture1.Picture
End Sub
6. 窗 体 主 程 序 
Private Sub Form_Load()
Private Sub Form_Load()
'得到运行程序路径名,路径名后带反斜杠
IF Right(App.Path, 1) <> "\" Then
filePath = App.Path & "\"
Else
filePath = App.Path
End If
'窗体初始显示由Tiles.bmp基本图案组成的背景
pictfile = "c:\windows\Tiles.bmp"
backpict (pictfile)
End Sub
7. 退出程序命令按钮 
Private Sub SSCommand1_Click()
End
End Sub
8. 演示不同的底纹图案 
Private Sub SSCommand2_Click()
'两种背景图案交替演示
If pictfile = filePath & "Pict1.bmp" Then
pictfile = "c:\windows\Tiles.bmp"
Else
pictfile = filePath & "Pict1.bmp"
End If
Backpict (pictfile)
End Sub

解决方案 »

  1.   

    多谢Jneu(沧海桑田)大虾,分先给出,有问题再请教你。
      

  2.   

    对于普通的窗体来说可以通过自身的PAINT函数PAINTPICTURE将所要平铺的花纹图片一幅幅的画在窗体上。当然要通过窗体的长宽和图片的长宽来得出所要画的次数(多少行,多少列)利用两个循环将图片按一行一行或者一列一列的画在窗体上。
    也可以用API函数来绘制图片。
    至于MDI窗体,由于VB没有提供他的HDC,如何使用,还请高手指教?