在进行学习windows编程的时候,要使用大量的API和消息对控件进行操作,虽然很烦乱,但是对于学习和研究还是很有用处的。
虽然以前学了一点的MFC,但是对于MFC的使用其实是一知半解,也没有入门。
现在重新使用C++的方法进行SDK的封装学习,对于自己是一个很好的兴趣点。
之前,一直没有好好学下C++,感觉好像用不到。因为在MFC中,放一个按钮,双击一下,一个函数自动生成了。
我感觉这样的方法对我的学习没有好处。
还是从基础的SDK进行学习吧,将学到的C++知识用起来。
今天封装了几个很常的控件类:
TButton
TEdit
TListBox
TCombox;
将这些常用控件按照MFC的格式全部封装,在写程序时方便多了。不用老是查找MSDN说明,省了不少事。
问题出现了。我在TForm窗口中有很多的控件成员类
这么多的控件成员,我要在函数中进行初始化,例:
窗口退出时,还要进行一个消毁内存的操作,
要写这么多的代码,我感觉自己好业余啊。我很担心,要是中途出错了。我的OnUnInitalize函数没有执行,omg,什么破程序啊。发现这个问题,我感觉好郁闷啊。异常也知道如何处理,我感觉能捕获的异常,我没有必要捕获了,我要捕获的是那种不能捕获的异常,比如buff溢出之类,内存越界之类的事情。现在弄得异常处理都不想去学了。 百无聊懒,在看书的过程中发现<c++标准库>中有一个好东西, auto_ptr,只是神助也,有了这个东西,我不可以不用多写一堆的代码删除new出来的指针了。将原来的TButton* chkTest;这样的定义改成auto_ptr<TButton> cmdTest类型,在类消毁的时候,这个指针对应的东西也会消毁掉吧?修改后的初始化函数,
问题又来了,本打算auto_ptr<TButton>cmdTest (new TButton(_hwnd,IDCANCEL));直接定义我的按钮指针,事于愿反,发现只要离开这个函数,我的cmdTest指针也消毁掉了。这也太不智能了。只好弄个临时变量转存一下。至少,有了这一招,我不用去delete我的成员对象了。实例化函数,还要改进,还没有想到好的办法,总觉得写这么一大堆的代码,太业余了。。。。郁闷,刚刚接触auto_ptr,还不知道如何用。郁闷中。。。
。。。。原来是书没有看完,就上马了。这下知道如何定义一个auto_ptr后进行赋值了。
例:auto_ptr(TButton)ptrButtonOk;
ptrButtonOk = auto_ptr(TButton)(new TButton(_hwnd,IDC_BUTTON1));//这样就可以正确赋值。不用临时转存了。
好东西,写在这里备忘,好好掌握,临活运用。C++STL还有很多的好东西等着我呢。