VC++深入详解:在窗口中显示按钮
2008-11-24 19:38:19 来源:WEB开发网从例3-22所示代码可知,CMainFrame类的OnCreate函数首先调用基类CFrameWnd的OnCreate函数,创建一个窗口,然后创建工具条(m_wndToolBar)和状态栏(m_ wndStatusBar)对象。我们可以在该函数的最后完成按钮的创建工作,即在return语句之前添加例3-23所示代码中加灰显示的代码。
例3-23
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
……
CButton btn;
btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100),this, 123);
return 0;
}
其中,将该按钮的名称设置为“按钮”,其位置由CRect(0,0,100,100)这一矩形确定,ID号为123。前面已经讲过,按钮控件不仅具有按钮风格类型,还具有窗口风格类型,因此,在按钮的Create函数中指定该按钮具有WS_CHILD窗口风格类型,同时还具有BS_DEFPUSHBUTTON按钮风格类型,即下按按钮风格。
另外,我们知道每个对象都有一个this指针,代表对象本身。为了使按钮控件的父窗口就是框架窗口,这里可以直接将代表CMainFrame对象的this指针作为参数传递给按钮的Create函数。
编译并运行Test程序,但发现按钮并没有显示出来。问题的原因有两个:一是这里定义的btn对象是个局部对象,当执行到OnCreate函数的右大括号(})时,该对象的生命周期就结束了,就会发生析构。前面已经讲过,如果一个窗口与一个C++窗口类对象相关联,当这个C++对象生命周期结束时,该对象在析构时通常会把与之相关联的窗口资源进行回收。这就是说,当执行到例3-22所示的OnCreate函数的右大括号时,刚刚创建的btn窗口就被与之相关的C++对象销毁了。因此,不能将这个按钮对象定义为一个局部对象。解决方法是:将其定义为CMainFrame类的一个成员变量,可以将其访问权限定义为private类型以实现信息隐藏。
更多精彩
赞助商链接