开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 2972|回复: 0

[源码] GDI+扫雷棋盘网格 绘制

[复制链接]

0

精华

0

贡献

13

赞扬

帖子
14
软币
118
在线时间
9 小时
注册时间
2017-1-12
发表于 2017-7-31 21:33:13 | 显示全部楼层 |阅读模式
本帖最后由 dvmudev 于 2017-7-31 21:43 编辑

效果图

QQ截图20170731214331.png

代码

[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MyERP.Code
{
    public static class ShowGrid
    {

        //高度
        public static int BlockHeight = 50;
        //宽度
        public static int BlockWidth = 50;
        //宽度
        public static int BlockOffset = 5;
        //行数
        public static int GridRowCount = 5;
        //列数
        public static int GridColumnCount = 10;
        //边框
        public static int BorderSize = 5;
        //边框颜色
        public static Color BorderColor = Color.Blue;
        //空白颜色
        public static Color EmptyColor = Color.White;
        //通过颜色
        public static Color SucceedColor = Color.Green;
        //石板颜色
        public static Color FailedColor = Color.Red;
        //警告颜色
        public static Color WarningColor = Color.Yellow;
        //背景颜色
        public static Color BackgroundColor = Color.GhostWhite;
        //字体
        public static Font BlockFont = new Font("微软雅黑", 12);
        //颜色
        public static Color BlockColor = Color.Black;
        //横向方向
        public static bool GridColumnFirst = true;
        //画板控件

        public static Control GridBoard { get; set; }
        //Graphics
        private static Graphics GridGraphics { get; set; }

        static int index = 0;
        public static void InitializeGrid(Control gridBoard)
        {
            index = 0;
            GridBoard = gridBoard;
            if (GridBoard == null) return;
            GridGraphics = GridBoard.CreateGraphics();
            GridGraphics.Clear(BackgroundColor);
            for (int i = 0; i < GridColumnCount; i++)
            {
                for (int j = 0; j < GridRowCount; j++)
                {
                    GridBlock gridBlock = new GridBlock();
                    gridBlock.BlockIndex = index;
                    index += 1;
                    gridBlock.BlockResult = ResultType.Empty;
                    gridBlock.BlockText = gridBlock.BlockIndex.ToString();
                    PaintBlock(gridBlock);
                }
            }
        }

        public static void PaintBlock(GridBlock gridBlock)
        {
            if (GridBoard == null) return;
            if (GridGraphics == null) return;
            int x = BlockOffset;
            int y = BlockOffset;
            //根据序号取得当前Index所对应位置
            if (GridColumnFirst)
            {
                x += (gridBlock.BlockIndex % GridColumnCount) * (BlockWidth + BlockOffset);
                y += (gridBlock.BlockIndex / GridColumnCount) * (BlockHeight + BlockOffset);
            }
            else
            {
                x += (gridBlock.BlockIndex / GridRowCount) * (BlockWidth + BlockOffset);
                y += (gridBlock.BlockIndex % GridRowCount) * (BlockHeight + BlockOffset);
            }
            //先画一个大的底块
            GridGraphics.FillRectangle(new SolidBrush(BorderColor), new Rectangle(x, y, BlockWidth, BlockHeight));
            x = x + BorderSize;
            y = y + BorderSize;
            int w = BlockWidth - (BorderSize * 2);
            int h = BlockHeight - (BorderSize * 2);
            //再画块
            switch (gridBlock.BlockResult)
            {
                case ResultType.Empty:
                    GridGraphics.FillRectangle(new SolidBrush(EmptyColor), new Rectangle(x, y, w, h));
                    break;
                case ResultType.Succeed:
                    GridGraphics.FillRectangle(new SolidBrush(SucceedColor), new Rectangle(x, y, w, h));
                    break;
                case ResultType.Warning:
                    GridGraphics.FillRectangle(new SolidBrush(WarningColor), new Rectangle(x, y, w, h));
                    break;
                case ResultType.Failed:
                    GridGraphics.FillRectangle(new SolidBrush(FailedColor), new Rectangle(x, y, w, h));
                    break;
                default:
                    break;
            }
            //写入文字
            GridGraphics.DrawString(gridBlock.BlockText, BlockFont, Brushes.Black, new Rectangle(x, y, w, h));
            // GridBoard.Refresh();
        }

        public static void PaintBlock(int x,int y, Color color, string text)
        {
            GridGraphics.FillRectangle(new SolidBrush(BorderColor), new Rectangle(x, y, BlockWidth, BlockHeight));
            x = x + BorderSize;
            y = y + BorderSize;
            int w = BlockWidth - (BorderSize * 2);
            int h = BlockHeight - (BorderSize * 2);
            GridGraphics.FillRectangle(new SolidBrush(color), new Rectangle(x, y, w, h));
            //写入文字
            GridGraphics.DrawString(text, BlockFont, Brushes.Black, new Rectangle(x, y, w, h));
            // GridBoard.Refresh();
        }
    }

    public class GridBlock
    {
        public int BlockIndex { get; set; }
        public ResultType BlockResult { get; set; }
        public string BlockText { get; set; }
    }

    public enum ResultType
    {
        Succeed = 0,
        Warning = 1,
        Failed = 2,
        Empty = 3
    }

}


转自:http://myerp.oicp.io:88/?p=701
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-5-3 13:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表