プログラムの実装手順

このプログラムでは,マウスを押すことによりその点の座標を取り込み,マウスを移動することに順次新しい座標を取り込み,前の座標と線で結ぶことにより数字を描く。

ClassViewのプロジェクト名DlgからOnInitDialog()を選ぶ。

ダイアログが生成されると、最初に、initDialogが実行される。ここで、描画領域の設定、および、描画領域の位置情報をRelRectに、取得する。

CWnd* myPICT=GetDlgItem(IDC_PICTURE);
pDC = new CClientDC(myPICT);
 
WINDOWPLACEMENT winplace;
myPICT-$ >$GetWindowPlacement(&winplace );
RelRect=winplace.rcNormalPosition;
 
drawLine=FALSE;
myPen=new CPen;
myPen-$ >$CreatePen(PS_SOLID,3,RGB(0,0,0));

ClassViewのプロジェクト名DlgからOnLButtonDown()を選ぶ。マウスの位置は、RelRectで補正する。マウスの左ボタンが押されたら,描画が可能なようにdrawLine = TRUEにする。また,マウスの位置をpvPTに記録する。

void CFreeWritingDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
drawLine = TRUE;
pvPT.x =point.x - RelRect.left;
pvPT.y = point.y - RelRect.top;
CDialog::OnLButtonDown(nFlags, point);
}

ClassViewのプロジェクト名DlgからOnMouseMove()を選ぶ。

マウス移動に伴い、呼び出される。Penを選択し、前の点から現在のマウスの位置まで線を表示する。マウスの位置は、RelRectで補正する。

void CPaintDlg::OnMouseMove(UINT nFlags, CPoint point)
{
pDC-$ >$SelectObject(myPen);
pDC-$ >$MoveTo(pvPT);
if(drawLine){
point.x -= RelRect.left;
point.y -= RelRect.top;
pDC-$ >$LineTo(point);
}
pvPT = point;
CDialog::OnMouseMove(nFlags, point);
}

ClassViewのプロジェクト名DlgからOnLButtonUp()を選ぶ。

これで、線の表示を終了する。

void CPaintDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
drawLine=FALSE;
CDialog::OnLButtonUp(nFlags, point);
}

ClassViewのプロジェクト名DlgからOnPen()を選ぶ。

描画用の黒いペンと消去用の白いペンを切り替えて使う。

void CPaintDlg::OnPen()
{
delete myPen;//前のペンを削除し、太さ3の黒いペンを作成する
myPen = new CPen;
myPen-$ >$CreatePen(PS_SOLID,3,RGB(0,0,0));
}

ClassViewのプロジェクト名DlgからOnErase()を選ぶ。

前のペンを削除し、太さ5の白いペンを作成します。

void CPaintDlg::OnErase()
{
delete myPen;
myPen=new CPen;
myPen-$ >$CreatePen(PS_SOLID,5,RGB(255,255,255));
}