顶层父类的创建

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yzcwansui/article/details/80618087

顶层父类的创建

###当代软件架构的设计

  • 尽量使用单重继承的方式进行系统设计
  • 尽量保持系统中只存在单一的继承树
  • 尽量使用组合关系代替继承关系
    ###c++问题
  • C++允许存在多个继承树
  • 编译器差异使得代码的编译结果不同(eg:new申请内存失败,在有的编译器返回NULL,有的编译器抛出一个异常)
    ###创建顶层父类的意义
  • 遵循经典设计准则,所有的数据结构都继承自顶层父类
  • 定义动态内存申请行为,提高代码移植性
    ###顶层父类(抽象类的定义)
Class Object{
public:
	void* operator new(unsigned  int size)throw();
	void* operator delete( void* p)
	void* operator new[](unsigned int size)throw();
	void operator delete[](void* p);
	virtual ~Object()=0;
}
展开阅读全文

顶层表单下表单运行时创建的子表单编译后无法显示

02-03

我用顶层表单作主窗口,通知菜单进入一个表单,在该表单中建立一个timer控件、UnWait、Waitform,Unwait属性控制是否要计时,即设置timer控件的Enabled值,当UnWait为假且处理时间长时,触发timer建立一个子表单,子表单放在waitform里,用来提示正在处理的字样,处理完毕后关闭该提示表单,在调试时可以很好的显示,但编译后却无法显示,如何解决?还有不知哪位大神有好的该问题的其它解决之道。以下是该timer的触发过程:rnrnIF Thisform.UnWait = .T. rn This.Enabled = .F.rn IF TYPE("Thisform.waitform") = "O"rn Thisform.Waitform.releasern Thisform.waitform = .F.rn ENDIF rnELSErn IF TYPE("Thisform.waitform") != "O"rn cDataPath = SYS(16)rn cDataPath = SUBSTR(cDataPath,AT(":",cDataPath)-1,RAT("\",cDataPath,2)-AT(":",cDataPath)+2)rn rn Thisform.Waitform = CREATEOBJECT("Form")rn WITH Thisform.Waitformrn .AutoCenter = .T.rn .AlwaysOnTop = .T.rn .Width = 200rn .Height = 60rn .TitleBar = 0rn .MaxButton =.F.rn .MinButton = .F.rn .MDIForm = .T.rn .Closable = .F.rn .WindowState = 0rn .AddObject("Label1","Label")rn .AddObject("Image1","Image")rn WITH Thisform.Waitform.Label1rn .Caption = '玩命处理中...'rn .Top=8rn .Left=4rn .Height=20rn .Width = 100rn .fontsize = 12rn .Visible = .T.rn ENDWITH rn WITH Thisform.Waitform.Image1rn .Top=36rn .Left=50rn .Height=20rn .Width = 100rn .picture = cDataPath+"Graphics\进度条.GIF"rn .Visible = .T.rn ENDWITH rn .Refresh rn ENDWITH rn ENDIF rn Thisform.Waitform.show()rn INKEY(0.1)rnENDIF rn 论坛

如何创建一个多顶层文档MTI的MDI程序

12-05

MTI程序实际上是一个多Frame的SDI程序,创建这样一个程序很简单,直接用代码生成,然后自己管理新生成的Frame,并且在Mainframe关闭时,动态改变theApp.m_pMainWnd 指针指向的框架就可以使程序在所有顶层框架关闭后才退出,而不再区分主顶层框架和子顶层框架.rnrn一个没有主框架的SDI多顶层MTI我的具体的做法是rnrn在CWinApp 中加一个CPtrList,在新生成Frame时把它加入到这个List,在关闭CMainFrame时检测是不是关闭的theApp.m_pMainWnd ,如果是就用队列中的框架替换这个指针,不是就把它移出队列.rnrn可这样的做法在MDI程序中不行了,我发现所有的消息都只发给theApp.m_pMainWnd ,而不是当前子框架的父框架.rnrn我是这样创建一个MDI的MTI程序的,rnrn在派生的WinApp中加入属性:rn CMultiDocTemplate *m_pMultiDocTemplate;rn CPtrList m_pFrameList;rnrn在创建新窗口时:rnrn rnrnCMainFrame *pMainFrame2 = new CMainFrame;rn if ((!pMainFrame2 )||(!pMainFrame2->LoadFrame(IDR_MAINFRAME)))rn rn delete pMainFrame2;rn elsern theApp.m_pMainWnd = pMainFrame2; //在这里改变了主框架的指针,不然无法在新框架中创建子框架rn CDocument* pDoc = theApp.m_pMultiDocTemplate->CreateNewDocument();rn CFrameWnd* pChildFrame = theApp.m_pMultiDocTemplate->CreateNewFrame(pDoc,pMainFrame2);rnrn theApp.m_pMultiDocTemplate->InitialUpdateFrame(pChildFrame,pDoc);rnrn CView* pView =(CView*) pChildFrame->GetActiveView();rn theApp.m_pFrameList.AddTail(pMainFrame2);rnrn rnrn在CMainframe的WM_CLOSE事件中判断,rnrn CMainFrame* pMainFrame = (CMainFrame*)theApp.m_pMainWnd;rnrn if((pMainFrame != NULL )&& (pMainFrame->GetActiveFrame() != GetActiveFrame()))rn rn for (int i = 0;iGetSafeHwnd()))) continue;rn if (pFrame->GetActiveFrame()!= GetActiveFrame())rnrn theApp.m_pMainWnd = pFrame;rn TRACE(_T("改变主框架指针!"));rn break;rn rnrn rn rnrn POSITION pos = theApp.m_pFrameList.Find(this);rn if(pos != NULL)rn theApp.m_pFrameList.RemoveAt(pos);rn rnrnrn这样子的做法的确可以创建一个新窗口了,但关键在于我得在创建新框架时就把它作为theApp.m_pMainWnd并且在CMainFrame的WM_ACTIVE事件处理中加入rntheApp.m_pMainWnd = this;rnrnrn好象一个MDI框架把所有的消息都是转给了theApp.m_pMainWnd,其它的框架收不到消息.rnrn特别是这句好象没有用:rn CFrameWnd* pChildFrame = theApp.m_pMultiDocTemplate->CreateNewFrame(pDoc,pMainFrame2);rnrn在这里我指定了新生成的ChildFrame的父框架,可是View却只在theApp.m_pMainWnd中创建,总不能一直不停的在激活框架时改变程序的主框架指针吧?rnrn正确的方法应该是什么呢?rnrnPASS:另IE9的子窗口可以拉出成为一个新框架,这是怎么实现的呢?还有另的框架的子窗口可以拉入到另一个框架中,我真是没有搞明白.rn 论坛

没有更多推荐了,返回首页