我以为一个类 如果里面有指针需要分配内存 要用指针实例化
//***************************************************************
//对象实例化
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();
//********************************************************
//***************************************************************
//对象实例化
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();
//********************************************************
解决方案 »
- 如何改变CRichEditCtrl控件的滚动条时,另一个CRichEditCtrl控件也跟着滚动
- 关于检测控件是否注册的问题?急
- 谢谢aaasng() 帮忙解决一个排列组合的算法问题,请进来回复一下,我好给你加分。
- 怎样做uedit那样的编辑器,左边16进制,右边ASCII?
- 关于CRecordset类
- 请问如何才能改变CRichEditCtrl控件中的文字的行间距?
- 99最新发布"网络神偷 2.5 版" - 可以穿过防火墙和入侵局域网的好工具!
- 关于ADO的问题。。。
- 请问如何将UCS2编码转换成含GB汉字格式或ASC码,源代码,或网址!!!
- 新的程序员大本营有DXSDK8.0吗?
- GetMessage(&lpMsg,NULL,0,0)与GetMessage(&lpMsg,hWnd,0,0)有何区别??
- 子对话框调用了ShowWindow(SW_SHOW)却不能显示,求良方,谢谢!
mywin a;-〉调用构造函数实例化mywin *a;-〉申明一个指向mywin类对象的指针
a=new mywin; -〉将指针指向一个new 的 mywin 类型的对象
这两种都是可以的
你不会把mywin *a;
a=new mywin;
a->InitInstance();
放到*.cpp直接去编译吧,要放到函数中去
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;
}
*********************************************************
好象不行
就是手写的mfc 的程序
四个类
#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;
***************************
全部程序如上
a=new mywin;
a->InitInstance();
这段代码放在什么位置的?
如果放在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;
***************************
改成这个程序后没错误,但程序一闪而过
mywin *a;
a=new mywin;
////////////->InitInstance();去掉这一行试试。
m_pMainWnd=&my;
把地址记下来了