wangvoldp 发表于 2023-5-15 16:12:48

【解决方案】指针动态创建窗口(不创建无消耗)

本帖最后由 wangvoldp 于 2023-5-15 16:25 编辑

如果有一个设置窗口,用户没点开这个窗口,那没有必要构造这个窗口类
因为火山视图中没有参考,所以定义的窗口都将直接创建对象,占用内存空间
包括所有的类只要在作用于定义变量,构造函数就会执行,内存就会分配
用 创建对象指针 和 销毁对象指针 可以实现不显示的窗口不占用内存(指针要占4字节)
------------------------------------------------------------
一、动态弹出窗口(弹出窗口可以阻塞线程,函数返回时就能销毁)
挂接事件 (读指针处对象 (Addr, 弹出窗口类))// 将事件挂接到本类
读指针处对象 (Addr, 弹出窗口类).编辑框.内容 = "测试内容"// 设置编辑框内容
读指针处对象 (Addr, 弹出窗口类).编辑框.文本颜色 = 颜色类.红色// 设置编辑框颜色
读指针处对象 (Addr, 弹出窗口类).创建对话框 ()// 弹出窗口并等待窗口关闭

还是因为没有参考 每次访问弹出窗口的成员属性或方法都需要使用 读指针处对象 (Addr, 弹出窗口类)
不能读取窗口类后放到局部变量,那样会再构造一个 弹出窗口类(浪费),而且就算不考虑浪费,局部变量也只是真实窗口的副本,会有很多副作用
比如不能挂接事件 不能修改标记和标记值 不能修改弹出窗口的成员变量,好多东西都不行
------------------------------------------------------------
二、动态弹出其他窗口(其他窗口可以和主窗口同时操作,所以要用一个类管理他的对象指针)

源码里有个 动态窗口类,他里面只有一个成员变量用来保存对象指针
挂接了 已被销毁 事件,当窗口销毁自动销毁对象指针
当程序结束 或 当类析构时 也自动销毁对象指针
就能实现再多再大的窗口,在不显示时都不会占用内存
1. 创建和销毁动态窗口
如果 (动态窗口.有效 == 假)
    动态窗口.Init (自定窗口类)
    动态窗口.创建窗口 ()
否则
    动态窗口.销毁 ()


2. 访问动态窗口
动态窗口.取对象 (自定窗口类).标题 = "新修改的标题"

动态窗口类 里还有其他功能自己体会吧

itismine 发表于 2023-5-15 16:34:53

学习一下。

赵曰天 发表于 2023-5-15 18:45:52

这个可以,之前的我写的都是创建完成,不需要就隐藏了

341991 发表于 2023-5-22 13:09:25

本帖最后由 341991 于 2023-5-22 13:22 编辑

一样的思路。一样的代码。放到EXUI里就不行,MFC就可以,很神奇
好吧,是我的问题,代码写的不对,EXUI也可以,用这个方法就可以不必把按钮写在成员变量里,只需要在成员变量里存一个指针(仅8字节),如果别的方法或线程不需要调用,也可以存局部变量里(8字节占用都省了),需要用的时候创建+挂接,由于指针在成员变量里,别的方法或线程也能调用,用完就销毁+释放内存,

wangvoldp 发表于 2023-5-22 13:55:51

341991 发表于 2023-5-22 13:09
一样的思路。一样的代码。放到EXUI里就不行,MFC就可以,很神奇
好吧,是我的问题,代码写的不对,EXUI也可 ...

是的呢, 火山没参考,那些定义变量的窗口,里面的类变量全都会构造,又费内存又费cpu,
特别是窗口都销毁了,窗口类的其他成员类, 他们还在内存中,属实浪费,
如果火山支持参考, 那这些问题都没了

008 发表于 2023-6-6 10:27:37

6666666666666666666666

boom 发表于 2023-7-6 16:03:12

感谢分享
页: [1]
查看完整版本: 【解决方案】指针动态创建窗口(不创建无消耗)