看《深入浅出MFC》,对动态创建感觉没理解透。
问应用程序设计会用到动态创建吗?
什么情况下用到动态创建,new CEdit是不是?
问应用程序设计会用到动态创建吗?
什么情况下用到动态创建,new CEdit是不是?
解决方案 »
- 再次提问reg.exe调用参数把REG文件导入到系统中?
- 如何在对话框A弹出的对话框B中获得A的指针?
- 关于MSDN
- 谁能给个在DC上做个特殊橡皮擦的思路或代码
- 请高手解决一个复杂问题!!!
- VB做成的程序打包很简单,但我不知道怎样把VC也做成能放到没有安装VC++也能够打开执行的请赐教!谢谢!
- 为什么单文档多视图切换实现不了?
- 如何向另一个程序发送消息,改变他的BorderStyle
- 怎么看了com的书,还是不知道怎么编com
- php调用web service如何接收消息应答 (急急急,高手请进,不胜感激)
- Aspose.Words 谁用过,到底有没有c++版本的?
- 怎么把下面的这张图的外围轮廓全部链接起来,VC实现
举例:当你在QQ上双击一个好友头像的时候,会创建一个聊天窗口,而设计期是不可能知道你有多少好友、会同时打开多少个聊天窗口.
另外,new CEdit只是新建一个CEdit的实例,这时候还没有把控件创建出来.
CEdit* pEdit=new CEdit();
pEdit.Create(,,,,,);//用MFC创建控件
HWND hWnd=::CreateWindowEx(,,,,);//直接用API创建窗口/控件
sign-----------------------------------------------------------------------
举例:当你在QQ上双击一个好友头像的时候,会创建一个聊天窗口,而设计期是不可能知道你有多少好友、会同时打开多少个聊天窗口.用下面的代码,传入参数,也可以创建60个以下的控件,不是动态创建吧?那动态创建到底意义何在?CEdit* pEdit[60];void (int ecount){
for(int i=0;i<ecount;i++)
{
pEdit[i]=new CEdit();
pEdit.Create(,,,,,);//用MFC创建控件 HWND
hWnd=::CreateWindowEx(,,,,);//直接用API创建窗口/控件
}
}
限制了60大小。但是初始化的数量是ecount的,动态分配的。
这个不是问题,稍改一下就可以了:vector <CEdit*> pCEditvec;
void (int ecount){
for(int i=0;i<ecount;i++)
{
CEdit *tempEdit=new CEdit();
pEdit.Create(,,,,,);//用MFC创建控件 HWND
hWnd=::CreateWindowEx(,,,,);//直接用API创建窗口/控件
pCEditvec.push_back(tempEdit);
}
}如果这是动态创建,那好像没什么特殊之处,不就是C++的一项功能而已?
这个宏,我能理解。我是看侯捷的书中讲到动态创建作为MFC 的 6大关键技术之一 ,然后觉得CEdit *tempEdit=new CEdit();
pEdit.Create(,,,,,);//用MFC创建控件 HWND 好像与 C++中在 堆中 动态分配new 一个 结构 数组 没多大的区别。 为何就成了6大关键技术之一 ?所以我怀疑 动态创建 不是 指 CEdit *tempEdit=new CEdit()这中方式,有此一问。
http://blog.csdn.net/liyi268/article/details/310895
sign-----------------------------------------------------------------------
现在C++有typeid操作符:返回指针或者引用所指对象的实际类型,就是动态识别。不过new应该随c++就有了,动态创建应该不是新技术。侯捷的书中讲到动态创建作为MFC 的 6大关键技术之一,可能是着眼于这一方法在MFC中使用很频繁。