博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC控件的SubclassDlgItem
阅读量:6188 次
发布时间:2019-06-21

本文共 1210 字,大约阅读时间需要 4 分钟。

MFC控件的SubclassDlgItem

 
要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派生类会调用基类的Create函数创建控件.用Create函数创建控件是一件比较麻烦的工作,程序需要为函数指定一大堆的控件风格以及控件的坐标和ID.特别是控件的坐标,没有经验的程序员很难确切地安排控件的位置和大小,往往需要反复调整.利用MFC的CWnd::SubclassDlgItem提供的动态连接功能,可以避免Create函数的许多麻烦,该函数大大简化了在对话框中创建派生控件的过程.

  大家知道,在用手工方法创建控件时,先要构建一个控件对象,然后再用Create函数在屏幕上创建控件窗口,也就是说,控件的创建工作是由控件对象完成的.动态连接的思路则不同,SubclassDlgItem可以把对话框中已有的控件与某个窗口对象动态连接起来,该窗口对象将接管控件的消息处理,从而使控件具有新的特性.SubclassDlgItem函数的声明为

 

BOOL SubclassDlgItem( UINT nID, CWnd* pParent );

 

  参数nID是控件的ID,pParent是指向父窗口的指针.若连接成功则函数返回TRUE,否则返回FALSE.

  综上所述,要在程序中使用派生控件,应该按下面两步进行:

在对话框模板中放置好基类控件.

在对话框类中嵌入派生控件类的对象.

在OnInitDialog中调用SubclassDlgItem将派生类的控件对象与对话框中的基类控件相连接,则这个基类控件变成了派生控件.

 

  例如,如果要在对话框中使用新设计的编辑框控件,应先在对话框模板中的合适位置放置一个普通的编辑框,然后,在OnInitDialog函数中按下面的方式调用SubclassDlgItem即可:

BOOL CMyDialog::OnInitDialog()

{

CDialog::OnInitDialog();

m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);

return TRUE;

}

 

 

还有个前提  就是edit1还在生命周期内。你可以试试在主类里建个CEditnew类的指针 的成员变量,然后在初始化里给这个指针赋值为new CEditnew()  后面照旧。试试 比如成员变量 CEditnew m_myEdit; 然后在初始化中:m_myEdit = new CEditnew(); m_myEdit->SubclassDlgItem(IDC_EDIT1,this); m_myEdit->ShowWindow(SW_SHOW); 这样试试。

 

 

 

转载于:https://www.cnblogs.com/lujin49/p/5345313.html

你可能感兴趣的文章
【翻译】Ext JS 4.1的性能
查看>>
Ext JS 5的声明式事件监听
查看>>
docker:快速构建容器监控系统cAdvisor+InfluxDB+Grafana
查看>>
标准与扩展ACL实验
查看>>
Linux 标准目录结构
查看>>
jquery js 获取宽度和高度
查看>>
android SharedPreferences工具类
查看>>
sys和system用户、sysdba 和sysoper系统权限、sysdba和dba角色的区别
查看>>
linux 下apache反向代理tomcat,及解决内网IP问题
查看>>
[验证码识别技术]-初级的滑动式验证图片识别
查看>>
Android开发环境搭建
查看>>
粒子群优化算法
查看>>
文件共享
查看>>
win10 genymotion不能启动vBox
查看>>
Office稿纸信笺功能比较
查看>>
Linux - 判断文件/目录是否存在/具有权限
查看>>
linux启动过程中都发生了什么?
查看>>
kvm下安装windows
查看>>
Linux实现SSH无密码登录
查看>>
...package- info.java”是做什么用的呢?谢谢_百度知道
查看>>