private void panel_back_Paint(object sender, PaintEventArgs e) { BufferedPanel bp = (BufferedPanel)sender; Rectangle board_rect1; if (panel_board.Width < panel_board.Height) { board_rect1 = new Rectangle((int)(panel_board.Location.X + m_board_start_x), (int)(panel_board.Location.Y + m_board_start_y), panel_board.Width, panel_board.Width); } else { board_rect1 = new Rectangle((int)(panel_board.Location.X + m_board_start_x), (int)(panel_board.Location.Y + m_board_start_y), panel_board.Height, panel_board.Height); } Rectangle board_rect2 = new Rectangle(bp.Location, new Size(bp.Width, bp.Height)); Region rgn = new Region(board_rect2); rgn.Xor(board_rect1); e.Graphics.Clip = rgn; e.Graphics.DrawImage(m_back_bitmap, 0, 0, bp.Width, bp.Height); }
private void Form1_Load(object sender, EventArgs e) { m_back_bitmap = new System.Drawing.Bitmap(@"pic\japanese-chess-bg.jpg"); m_panel1_bitmap = new System.Drawing.Bitmap(@"pic\japanese-chess-b02.jpg"); // 駒の画像取得 komaPicArray = new Bitmap[BoardInfo.KOMA_NUM]; for (int i = 0; i < komaPicArray.Length; i++) { komaPicArray[i] = new System.Drawing.Bitmap(@"pic\koma\60x64\sgl" + (i + 1).ToString("D2") + ".png"); } // 盤面背景のセット panel_back = new BufferedPanel(false); panel_back.Width = 800; panel_back.Height = 640; panel_back.Location = new Point(0, 0); panel_back.Paint += panel_back_Paint; panel_back.BackgroundImageLayout = ImageLayout.Zoom; panel_back.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; this.Controls.Add(panel_back); // 盤面のセット panel_board = new BufferedPanel(false); panel_board.Width = 480; panel_board.Height = 480; panel_board.Location = new Point(110, 60); panel_board.BackColor = Color.Transparent; panel_board.Paint += panel_board_Paint; panel_board.Resize += panel_Resize; panel_board.BackgroundImageLayout = ImageLayout.Zoom; panel_board.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; // 盤面背景の子として登録 panel_back.Controls.Add(panel_board); // 盤面のセット panel1 = new BufferedPanel(true); panel1.Width = 480; panel1.Height = 480; panel1.Location = new Point(0, 0); panel1.BackColor = Color.Transparent; panel1.Paint += panel1_Paint; panel1.MouseDown += panel1_MouseDown; panel1.MouseMove += panel1_MouseMove; panel1.MouseUp += panel1_MouseUp; panel1.Resize += panel_Resize; panel1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; // 盤面背景の子として登録 panel_board.Controls.Add(panel1); m_board_width = panel1.Width - (panel1.Width * border_rate); m_board_height = panel1.Height - (panel1.Height * border_rate); // 画像とフォントのスケーリング resizeObject(panel1); }
void resizeScreen(BufferedPanel bp) { if (bp.Width < bp.Height) { m_board_start_x = 0; m_board_start_y = (bp.Height - bp.Width) / 2; } else { m_board_start_x = (bp.Width - bp.Height) / 2; m_board_start_y = 0; } }
private void panel_board_Paint(object sender, PaintEventArgs e) { BufferedPanel bp = (BufferedPanel)sender; if (bp.Width < bp.Height) { e.Graphics.DrawImage(m_panel1_bitmap, m_board_start_x, m_board_start_y, bp.Width, bp.Width); } else { e.Graphics.DrawImage(m_panel1_bitmap, m_board_start_x, m_board_start_y, bp.Height, bp.Height); } }
// 盤面のリサイズ処理 void panel_Resize(object sender, EventArgs e) { BufferedPanel pl = (BufferedPanel)sender; if (pl == panel1) { // 石やフォントのスケーリング処理 resizeObject(pl); } else if (pl == panel_board) { // 盤面のスケーリング resizeScreen(pl); } }
void resizeObject(BufferedPanel panel) { //label5.Text = "x=" + panel.Width + "y=" + panel.Height; float board_x, board_y; // 縦横の小さい方に合わせる if (panel.Width < panel.Height) { // margin考慮 board_x = panel.Width - (panel.Width * border_rate); board_y = panel.Height - (panel.Width * border_rate); m_scale = board_x / (m_board_width + 16); m_mass_size = board_x / BoardInfo.BOARD_SIZE; m_fix_x = (float)30.5 * m_scale; m_fix_y = (board_y - board_x) / 2 + ((float)30.5 * m_scale); } else { board_x = panel.Width - (panel.Height * border_rate); board_y = panel.Height - (panel.Height * border_rate); m_scale = board_y / (m_board_height + 16); m_mass_size = board_y / BoardInfo.BOARD_SIZE; m_fix_x = (board_x - board_y) / 2 + ((float)30.5 * m_scale); m_fix_y = (float)30.5 * m_scale; } if (m_scale != 0) { // 各描画インスタンスの座標をスケーリング stone_size_x = (m_board_width / BoardInfo.BOARD_SIZE) * m_scale; stone_size_y = (m_board_height / BoardInfo.BOARD_SIZE) * m_scale; last_move_fix_x = (21 * m_scale) + m_fix_x; last_move_fix_y = (21 * m_scale) + m_fix_y; canmove_x = (19 * m_scale) + m_fix_x; canmove_y = (21 * m_scale) + m_fix_y; font_scale_x = (2 * m_scale) + m_fix_x; font_scale_y = (14 * m_scale) + m_fix_y; // フォントスケーリング m_ft = new Font("MS UI Gothic", 9 * m_scale); m_ft2 = new Font("MS UI Gothic", 8 * m_scale); m_ft3 = new Font("Arial", 18 * m_scale, FontStyle.Bold | FontStyle.Italic); m_ft4 = new Font("Arial", 15 * m_scale, FontStyle.Bold | FontStyle.Italic); } }