VC++深入详解:在窗口中显示按钮(2)
2008-11-24 19:38:15 来源:WEB开发网运行Test程序,读者会发现按钮的位置与在CMainFrame中创建按钮的位置一样,可见按钮的位置与其父窗口有关,而不是与创建它的代码所在的类有关。
另外,如果想在创建按钮之后立即显示,可以将其窗口风格指定为WS_VISIBLE,这时,就不需要再调用ShowWindow函数了。即此时按钮的创建和显示只需要下面这一条代码即可:
m_btn.Create("按钮",WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, CRect(0,0, 100,100), GetParent(),123);
小技巧:Windows中很多函数名都是一些有意义的单词的组合,并且每个单词的首字母大写。例如,如果想要得到某个类的父窗口,我们可以猜想这个函数名应该是Get再加上ParentWindow这样的。打开MSDN的索引标签页,键入GetParentWindow,发现没有这个函数,但有一个GetParent函数。打开这个函数,发现就是我们所要的函数。在编程时,通过这种方法,可以快速找到所需要的函数。
本例中,我们选择的是BS_DEFPUSHBUTTON按钮风格类型,读者可以试着使用其他类型的风格,例如BS_AUTORADIOBUTTON、BS_CHECKBOX等,看看结果如何。
通过这个CButton对象的创建,希望读者能更好地理解C++窗口类对象和窗口之间的关系。当我们将按钮窗口销毁,它所对应的m_btn这个C++对象并没有销毁,因为它是CTestView类的一个成员变量,它的生命周期与CTestView对象是一致的。只要CTestView对象没有销毁,该按钮对象就一直存在,在程序中仍可以访问这个对象。
另外,我们发现在调用CButton的ShowWindow函数时,也没有传递一个窗口句柄,因为CButton类是CWnd类的子类,因此,它已有一个用于保存窗口句柄的成员变量m_hwnd。这样,CButton的成员函数可以直接使用这个变量,并不需要再传递窗口句柄了。
另一点需要注意的是,按钮的父窗口不同,其显示位置也会有所差异。
最后,我们在写程序时,如果不知道某个函数的名称,可以凭感觉利用单词的组合来拼写,通过这种方法一般都能在MSDN中找到需要的函数。
更多精彩
赞助商链接