using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace dia
{
public partial class Form1 : Form
{
Shape s;
DllImpClass1 d;
bool pos_chk = false; //最初のクリックでtrue
int pos_x = 1;
int pos_y = 1;
protected void frm_click(object sender, EventArgs e)
{
if (!pos_chk)
{
//g.DrawLine(Pens.Black, Cursor.Position.X, Cursor.Position.Y, Cursor.Position.X, Cursor.Position.Y);
//g.DrawLine(Pens.Black, Cursor.Position.X, Cursor.Position.Y, Cursor.Position.X,Cursor.Position.Y);
pos_x = PointToClient(Cursor.Position).X;
pos_y = PointToClient(Cursor.Position).Y;
pos_chk = true;
Graphics g = CreateGraphics();
MouseMove += new MouseEventHandler((object MouseSender, MouseEventArgs MouseArgs) => {
if (pos_chk)
{
g.Clear(Color.White);
g.DrawLine(Pens.Black, pos_x, pos_y, PointToClient(Cursor.Position).X, PointToClient(Cursor.Position).Y);
}
});
}
else
{
pos_chk = false;
}
}
/*
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (pos_chk)
{
Graphics g = CreateGraphics();
g.DrawLine(Pens.Black, pos_x, pos_y, Cursor.Position.X, Cursor.Position.Y);
}
}
*/
public Form1()
{
InitializeComponent();
button1.Click += new EventHandler((object sender, EventArgs e) => {
s = new Shape();
s.Location = new Point(1, 1);
s.Size = new System.Drawing.Size(200, 200);
//s.Visible = true;
Controls.Add(s);
s.DoubleClick += new EventHandler(shape_click);
});
d = new DllImpClass1(); // DllImpClass1のコンストラクタでGetDCを呼んでいる。
//d.Location = new Point(1, 1);
//d.Size = new System.Drawing.Size(200, 200);
//Controls.Add(d);
Click += new EventHandler(frm_click);
}
/*
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
d._fill();
}
*/
private void shape_click(object sender, EventArgs e)
{
inp i = new inp();
i.ShowDialog();
//MessageBox.Show(i.val);
s.Text = i.val;
//i.Dispose();
//このdisposeを入れるとクリックしたシェイプじゃないのに文字列が入ったりする。
//ボタンを押すたびにインスタンスができている。
//formの中のsはひとつしかないのに、複数あるシャイプはどうなっているのだろう。
//とはいえ、s.text にいれた場合それぞれのインスタンスにはいるので、
//同名の変数で管理しているといえしっかりそれぞれのインスタンスは管理されているのだろうけど。
//なんかクリックしたシャイプ以外に値が入ることがある。
//同名のインスタンスが複数ある場合の処理を調べないとダメだな。
this.Refresh();
}
/*
WndProcがメッセージを受け取る。WN_PAINTは0x000Fだった。
これでWN_PAINTメッセージを受け取ったら_fillを実行しているはずだが。。。
描画のたびに書き換わってないっぽい。
*/
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0x000F)//WN_PAINT
{
//d._fill();
}
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}