/**************************************************/
/*★ GetAsyncKeyState でキーをセンス 前田 稔 ★*/
/**************************************************/
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class MyForm : Form
{
[DllImport("User32.dll")]
static extern short GetAsyncKeyState(int vKey);
IMAGE App;
int xp,yp;
private Timer timer1;
private System.ComponentModel.IContainer components;
// Constructor
public MyForm()
{
// timer1
components = new System.ComponentModel.Container();
timer1 = new System.Windows.Forms.Timer(this.components);
SuspendLayout();
timer1.Interval = 15;
timer1.Tick += new System.EventHandler(this.timer1_Tick);
// MyForm
this.Width = 600;
this.Height = 400;
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
App = new IMAGE(@"c:\data\test\ship.png");
xp = yp = 100;
Paint += new PaintEventHandler(MyHandler);
timer1.Start();
}
// 画像を描画
private void MyHandler(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (App.bmp == null) Application.Exit();
App.View(g, xp, yp);
}
// タイマー割り込み
private void timer1_Tick(object sender, EventArgs e)
{
if (GetAsyncKeyState(0x1B)!=0) Application.Exit();
if (GetAsyncKeyState(0x25)!=0) xp -= 2;
if (GetAsyncKeyState(0x26)!=0) yp -= 2;
if (GetAsyncKeyState(0x27)!=0) xp += 2;
if (GetAsyncKeyState(0x28)!=0) yp += 2;
Invalidate();
}
}
//☆ 画像を描画するクラス
class IMAGE
{
public Bitmap bmp;
// Constructor
public IMAGE(string file)
{
try
{ bmp= new Bitmap(file); }
catch
{ MessageBox.Show("イメージが取得できません", "Error"); }
}
// 描画
public void View(Graphics g, int x, int y)
{
if (bmp!=null) g.DrawImage(bmp,x,y);
}
}
class form01
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|