#include "afxwin.h"
#include "afxext.h"
#include "resource.h"
UINT tool[]={ID_DISPLAY_LINE,ID_DISPLAY_RECTANGLE,ID_DISPLAY_CIRCLE};
UINT stat[]={0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS};
class mydialog:public CDialog
{
public:
UINT x1,x2,y1,y2;
mydialog():CDialog(IDD_DIALOG1)
{
x1=0;
x2=0;
y1=0;
y2=0;
}
//protected:
//private:
void DoDataExchange(CDataExchange *e)
{
DDX_Text(e,IDC_EDIT1,x1);
DDX_Text(e,IDC_EDIT2,y1);
DDX_Text(e,IDC_EDIT3,x2);
DDX_Text(e,IDC_EDIT4,y2);
}
void OnCancel()
{
x1=-1;
y1=-1;
x2=-1;
y2=-1;
EndDialog(1);
}
};
int fcolor,width=1;
char filler;class mydialog1:public CDialog
{
public:
//protected:
//private:
int i,j;
mydialog1():CDialog(IDD_DIALOG2)
{
i=0;
j=0;
}
void DoDataExchange(CDataExchange *e)
{
DDX_Radio(e,IDC_RADIO1,i);
DDX_Check(e,IDC_CHECK1,j);


}
void OnOk()
{
int k;
CButton *b;
b=(CButton*)GetDlgItem(IDC_CHECK1);
j=b->GetCheck();
k=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3); if (k==IDC_RADIO1) {
fcolor=1;
}
else if (k==IDC_RADIO2) {
fcolor=2;
}
else if (k==IDC_RADIO3) {
fcolor=3;
}
EndDialog(1);
}
void OnCancel()
{
EndDialog(1);
}
};class myframe:public CFrameWnd
{
public:
//protected:
//private:
CToolBar t;
CStatusBar s;
mydialog *dl;
char shape;

myframe()
{
Create(0,"DIALOG DEMO SHOW:",WS_OVERLAPPEDWINDOW,(CRect)0,0,MAKEINTRESOURCE(IDR_MENU1));
shape='s';
}

BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this,WS_VISIBLE|WS_CHILD|CBRS_TOP|CBRS_FLYBY);
t.LoadBitmap(IDR_TOOLBAR1);
t.SetButtons(tool,3);
s.Create(this);
s.SetIndicators(stat,3);
return true;
}
void line()
{
shape='l';
Invalidate();
}
void rectangle()
{
dl=new mydialog;
dl->DoModal();
shape='r';
Invalidate();
}
void circle()
{
shape='c';
Invalidate();

}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(0,0,0));
d.SelectObject(p);
CBrush *b;
b=new CBrush;

if (fcolor==1) {
if (filler=='h') 
b->CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
else 
b->CreateSolidBrush(RGB(255,0,0));

}
if (fcolor==2) {
if (filler=='h') 
b->CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0));

else
b->CreateSolidBrush(RGB(0,255,0));

}
if (fcolor==3) {
if (filler=='h') 
b->CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,255));

else
b->CreateSolidBrush(RGB(0,0,255));
}
d.SelectObject(b);
if (shape=='r') {
d.Rectangle(dl->x1,dl->y1,dl->x2,dl->y2);
}
else if (shape=='c') {
d.Ellipse(20,100,200,300);
}
else if (shape=='l') {
d.MoveTo(10,100);
d.LineTo(100,300);
}
}
void exit()
{
DestroyWindow();

}
void fill()
{
mydialog1 *q;
q=new mydialog1;
q->DoModal();

if (q->j==1) {
filler='h';
}
else {
filler='s';
}

} DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_WM_PAINT()
ON_COMMAND(ID_DISPLAY_LINE,line)
ON_COMMAND(ID_DISPLAY_RECTANGLE,rectangle)
ON_COMMAND(ID_DISPLAY_CIRCLE,circle)
ON_COMMAND(ID_DISPLAY_EXIT,exit)
ON_COMMAND(ID_SELECT_FILLTYPE,fill)
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public:
int InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(3);
m_pMainWnd=my;
return 1;
}
//protected:
//private:
};
mywin aa;