窗口类,窗口类对象与窗口
来源:互联网 发布:阿里云资源短信包 编辑:程序博客网 时间:2024/04/27 16:53
窗口创建时都会产生WM_CREATE消息,CMainFrame提供一个OnCreate函数,该函数是用来响应这条窗口创建消息的。在OnCreate函数return语句签添加如下代码
CButton btn;
btn.Create("按键",WS_CHILD|BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123);
我们发现按钮并没有显示出来。原因一:btn是一个局部变量,当执行到OnCreate函数的右大括号时,该对象的生命周期就结束了,就会发生析构。如果一个窗口与一个C++窗口类对象相关联,当这个C++对象生命周期结束时,该对象在析构时通常会把与之相关联的窗口资源进行回收。所以可以为CMainFrame类添加一个CButton类型的成员变量:m_btn。原因二:一个窗口成功创建之后,应该将这个窗口显示出来。运行Test2程序,运行结果如下:
之所以该按钮显示在工具栏上是因为工具栏位于主框架类的客户区。如果我们在CTest2View类中实现类似的操作,既然窗口创建时都会产生一个WM_CREATE消息,需要添加让CTest2View响应WM_CREATE消息,实现代码:
int CTest2View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_btn.Create("按键",WS_CHILD|BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
return 0;
}
则结果为:
有趣的是若想让按钮的父窗口为CMainFrame类窗口,可以调用GetParent函数来获得视类的父窗口对象的指针,并将该指针传递给按钮的Create函数,实现代码:
int CTest2View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_btn.Create("按键",WS_CHILD|BS_DEFPUSHBUTTON,CRect(0,0,100,100),GetParent(),123);
m_btn.ShowWindow(SW_SHOWNORMAL);
return 0;
}
按钮的位置又和在CMainFrame中创建按钮的位置一样,可见按钮的位置与其父窗口有关,而不是与创建它的代码所在的类有关。
- 窗口类、窗口类对象与窗口
- 窗口类,窗口类对象与窗口
- 窗口类和窗口对象
- 窗口类、窗口类对象与窗口三者之间关系
- 窗口类、窗口类对象与窗口 三者之间关系
- 窗口类、窗口类对象与窗口 三者之间关系
- 窗口类、窗口类对象与窗口 三者之间关系
- 窗口风格 与 窗口类风格
- 窗口类指针与窗口句柄
- 窗口类
- 窗口类
- 窗口类
- C++对象与窗口对象
- 窗口风格/ 窗口类风格
- 窗口与窗口类对象不是一回事,MFC 消息映射机制
- 窗口句柄、窗口类对象以及窗…
- 窗口
- 窗口
- Qt 文件搜索
- linux驱动开发的困局
- NSPredicate的用法
- php子域名共享session
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- 窗口类,窗口类对象与窗口
- Cocos2d-x 在屏幕上渲染菜单并添加消息响应
- boost之date/time学习
- 常用命令
- posix多线程有感--线程高级编程(线程属性pthread_attr_t)
- native server smack 说明 结构
- jquery实现全选、反选以及删除、添加等功能
- 创建文件夹,存储图片,复制文件类
- Qt 进度条实现