//***************************************************************
//对象实例化
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
};
mywin a;
//********************************************************
以上没有问题
以下却不行???????????????????
//***************************************************************
//指针实例化
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
};
mywin *a;
a=new mywin;
a->InitInstance();
//********************************************************
22 个解决方案
#1
我顶,高手这个问题困惑我好久了,分不够再加
#2
关注
#3
不知道你要问的是什么?
mywin a;-〉调用构造函数实例化
mywin *a;-〉申明一个指向mywin类对象的指针
a=new mywin; -〉将指针指向一个new 的 mywin 类型的对象
这两种都是可以的
你不会把
mywin *a;
a=new mywin;
a->InitInstance();
放到*.cpp直接去编译吧,要放到函数中去
mywin a;-〉调用构造函数实例化
mywin *a;-〉申明一个指向mywin类对象的指针
a=new mywin; -〉将指针指向一个new 的 mywin 类型的对象
这两种都是可以的
你不会把
mywin *a;
a=new mywin;
a->InitInstance();
放到*.cpp直接去编译吧,要放到函数中去
#4
*****************************************
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
***********************************************************
这个我可以改成
************************************************************
BOOL InitInstance()
{
myframe my;
//my=new myframe;
my.ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=&my;
return TRUE;
}
*********************************************************
好象不行
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
***********************************************************
这个我可以改成
************************************************************
BOOL InitInstance()
{
myframe my;
//my=new myframe;
my.ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=&my;
return TRUE;
}
*********************************************************
好象不行
#5
楼主想的还真仔细
#6
楼上说的很清楚了啊。估计他就是没放到函数中直接new了
#7
你第一个认为正确的程序好像没有写完阿,mywin a;然后呢?你写了什么??
#8
是的
就是手写的mfc 的程序
四个类
就是手写的mfc 的程序
四个类
#9
#include <afxwin.h>
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
};
mywin a;
***************************
全部程序如上
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
};
mywin a;
***************************
全部程序如上
#10
虽然我不会,不过想要那么一分
#11
我在一楼是写错了,不过在五楼改了一下,因为我在敲一些书的代码,运行没问提,我想改一下,就不行。
#12
mywin *a;
a=new mywin;
a->InitInstance();
这段代码放在什么位置的?
如果放在mywin a;的位置做的替换的话肯定不行三
这和类里面有指针什么的完全没有关系。
a=new mywin;
a->InitInstance();
这段代码放在什么位置的?
如果放在mywin a;的位置做的替换的话肯定不行三
这和类里面有指针什么的完全没有关系。
#13
#include <afxwin.h>
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe my;//**************
//my=new myframe;//**********************
my.ShowWindow(SW_SHOWMAXIMIZED);//******************
m_pMainWnd=&my;//**********************
return TRUE;
}
};
mywin a;
***************************
改成这个程序后没错误,但程序一闪而过
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe my;//**************
//my=new myframe;//**********************
my.ShowWindow(SW_SHOWMAXIMIZED);//******************
m_pMainWnd=&my;//**********************
return TRUE;
}
};
mywin a;
***************************
改成这个程序后没错误,但程序一闪而过
#14
该贴的分数加到100分
#15
用指针实例化,还是对象实例化,和类的内部实现没关系
指针实例化后要delete
指针实例化后要delete
#16
程序一闪而过是因为你的InitInstance()定义了局部的myframe my,一旦退出函数my就析构了。
你所说的不行是什么不行?编译?运行?出什么样子的错?
mywin *a;
a=new mywin;
////////////->InitInstance();去掉这一行试试。
你所说的不行是什么不行?编译?运行?出什么样子的错?
mywin *a;
a=new mywin;
////////////->InitInstance();去掉这一行试试。
#17
我也顶,高手给详细讲讲好么?我也困惑多年了!
#18
退出函数my就析构了 是的 但是
m_pMainWnd=&my;
把地址记下来了
m_pMainWnd=&my;
把地址记下来了
#19
我顶我顶高手请举例说明
#20
用变量方式时,my是局部变量,在InitInstance()结束后就销毁了,所保存的m_pMainWnd也成了无效指针...用new时,窗口不会被销毁,如是而已!
#21
感谢大家的指教
#22
来晚了
#1
我顶,高手这个问题困惑我好久了,分不够再加
#2
关注
#3
不知道你要问的是什么?
mywin a;-〉调用构造函数实例化
mywin *a;-〉申明一个指向mywin类对象的指针
a=new mywin; -〉将指针指向一个new 的 mywin 类型的对象
这两种都是可以的
你不会把
mywin *a;
a=new mywin;
a->InitInstance();
放到*.cpp直接去编译吧,要放到函数中去
mywin a;-〉调用构造函数实例化
mywin *a;-〉申明一个指向mywin类对象的指针
a=new mywin; -〉将指针指向一个new 的 mywin 类型的对象
这两种都是可以的
你不会把
mywin *a;
a=new mywin;
a->InitInstance();
放到*.cpp直接去编译吧,要放到函数中去
#4
*****************************************
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
***********************************************************
这个我可以改成
************************************************************
BOOL InitInstance()
{
myframe my;
//my=new myframe;
my.ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=&my;
return TRUE;
}
*********************************************************
好象不行
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
***********************************************************
这个我可以改成
************************************************************
BOOL InitInstance()
{
myframe my;
//my=new myframe;
my.ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=&my;
return TRUE;
}
*********************************************************
好象不行
#5
楼主想的还真仔细
#6
楼上说的很清楚了啊。估计他就是没放到函数中直接new了
#7
你第一个认为正确的程序好像没有写完阿,mywin a;然后呢?你写了什么??
#8
是的
就是手写的mfc 的程序
四个类
就是手写的mfc 的程序
四个类
#9
#include <afxwin.h>
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
};
mywin a;
***************************
全部程序如上
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;
return TRUE;
}
};
mywin a;
***************************
全部程序如上
#10
虽然我不会,不过想要那么一分
#11
我在一楼是写错了,不过在五楼改了一下,因为我在敲一些书的代码,运行没问提,我想改一下,就不行。
#12
mywin *a;
a=new mywin;
a->InitInstance();
这段代码放在什么位置的?
如果放在mywin a;的位置做的替换的话肯定不行三
这和类里面有指针什么的完全没有关系。
a=new mywin;
a->InitInstance();
这段代码放在什么位置的?
如果放在mywin a;的位置做的替换的话肯定不行三
这和类里面有指针什么的完全没有关系。
#13
#include <afxwin.h>
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe my;//**************
//my=new myframe;//**********************
my.ShowWindow(SW_SHOWMAXIMIZED);//******************
m_pMainWnd=&my;//**********************
return TRUE;
}
};
mywin a;
***************************
改成这个程序后没错误,但程序一闪而过
#include <afxext.h>
#include "resource.h"
UINT tool[]=
{
ID_SHAPES_RECTANGLE,
ID_SHAPES_CIRCLE,
ID_SHAPES_LINE
};
UINT stat[]=
{
0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
};
class myframe:public CFrameWnd
{
public:
CToolBar t;
CStatusBar s;
char shape;
int width;
char tag;
myframe()
{
Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
MAKEINTRESOURCE(IDR_MENU1));
shape='s';
width=1;
tag='t';
}
BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
{
t.Create(this);
s.Create(this);
t.LoadBitmap(IDB_BITMAP1);
t.SetButtons(tool,4);
s.SetIndicators(stat,3);
return TRUE;
}
void rect()
{
shape='r';
Invalidate();
}
void circ()
{
shape='c';
Invalidate();
}
void line()
{
shape='l';
Invalidate();
}
void thin()
{
width=2;
}
void thick()
{
width=5;
}
void solid()
{
tag='s';
}
void pattern()
{
tag='h';
}
void OnPaint()
{
CPaintDC d(this);
CPen *p;
p=new CPen;
p->CreatePen(PS_SOLID,width,RGB(255,0,0));
d.SelectObject(p);
CBitmap *k;
k=new CBitmap;
k->LoadBitmap (IDB_BITMAP2);
CBrush *b;
b=new CBrush;
if(tag=='h')
b->CreatePatternBrush(k);
else if(tag=='s')
b->CreateSolidBrush (RGB(0,0,255));
if(shape=='r')
{
d.Rectangle(0,0,200,200);
}
else if(shape=='c')
{
d.Ellipse (100,120,200,220);
}
else if(shape=='l')
{
d.MoveTo (100,100);
d.LineTo (200,400);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(ID_SHAPES_CIRCLE,circ)
ON_COMMAND(ID_SHAPES_LINE,line)
ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
ON_WM_PAINT()
END_MESSAGE_MAP()
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe my;//**************
//my=new myframe;//**********************
my.ShowWindow(SW_SHOWMAXIMIZED);//******************
m_pMainWnd=&my;//**********************
return TRUE;
}
};
mywin a;
***************************
改成这个程序后没错误,但程序一闪而过
#14
该贴的分数加到100分
#15
用指针实例化,还是对象实例化,和类的内部实现没关系
指针实例化后要delete
指针实例化后要delete
#16
程序一闪而过是因为你的InitInstance()定义了局部的myframe my,一旦退出函数my就析构了。
你所说的不行是什么不行?编译?运行?出什么样子的错?
mywin *a;
a=new mywin;
////////////->InitInstance();去掉这一行试试。
你所说的不行是什么不行?编译?运行?出什么样子的错?
mywin *a;
a=new mywin;
////////////->InitInstance();去掉这一行试试。
#17
我也顶,高手给详细讲讲好么?我也困惑多年了!
#18
退出函数my就析构了 是的 但是
m_pMainWnd=&my;
把地址记下来了
m_pMainWnd=&my;
把地址记下来了
#19
我顶我顶高手请举例说明
#20
用变量方式时,my是局部变量,在InitInstance()结束后就销毁了,所保存的m_pMainWnd也成了无效指针...用new时,窗口不会被销毁,如是而已!
#21
感谢大家的指教
#22
来晚了