#include<afxwin.h>
#include<afxext.h>
#include"resource.h"UINT tool[]={ID_MENUITEM40001,ID_MENUITEM40002,ID_MENUITEM40003};
UINT stat[]={IDS_STRING40007,IDS_STRING40008};
int fcolor,width=1;
char filler;
class mydialog1:public CDialog
{
public:
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 mydialog:public CDialog
{
public:
UINT x1,y1,x2,y2;
mydialog():CDialog(IDD_DIALOG1)
{
x1=0;
y1=0;
x2=0;
y2=0;
}
void DoDataExchange(CDataExchange *e)
{
DDX_Text(e,IDC_EDIT2,x1);
DDX_Text(e,IDC_EDIT3,y1);
DDX_Text(e,IDC_EDIT4,x2);
DDX_Text(e,IDC_EDIT1,y2);
}
void OnCancel()
{
x1=-1;
x2=-1;
y1=-1;
y2=-1;
EndDialog(1);
}
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
mydialog *dl;
char shape;
myframe()
{
Create(0,"Dialog Demo Application",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(IDB_BITMAP1);
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));
}
else if(fcolor==2)
{
if(filler=='h')
b->CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0));
else
b->CreateSolidBrush(RGB(0,255,0));
}
else 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);
}
}
//------------mydialog1()
void fill()
{
mydialog1 *q;
q=new mydialog1;
q->DoModal();
if(q->j==1)
{
filler='h';
}
else
{
filler='s';
}
}
//------------mydialog1()
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_WM_PAINT()----------------四个菜单项
ON_COMMAND(ID_MENUITEM40005,fill)*****点这个菜单的时候有问题
     ON_COMMAND(ID_MENUITEM40001,line)
ON_COMMAND(ID_MENUITEM40002,rectangle)
ON_COMMAND(ID_MENUITEM40003,circle)----------------------
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public:
int InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(3);
m_pMainWnd=my;
return 1;
}
};
mywin a;
错误如下.是个消息框
-------------消息框内容---
Debug Assertion Failed
Program:盘符路径\这个程序的名字.exe
File:dlgdata.cpp
Line:308
下面就是让参考C++的文档
最下面是三个按扭"终止","重试","忽略"
-------------消息框内容---
点了忽略,程序可能运行
点了重试,出现消息框,应用程序错误,然后就是发生错误的内存地址,还有两个按扭,确定是终止程序,取消是调试程序