SOUI官方论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 163|回复: 4

SSplitWnd有没有动态添加和删除分割窗口的例子?

[复制链接]

3

主题

10

帖子

184

积分

24:00金丹期

Rank: 2

积分
184
发表于 2019-9-19 11:47:36 | 显示全部楼层 |阅读模式
SSplitWnd有没有动态添加和删除分割窗口的例子?

4

主题

10

帖子

121

积分

版主

Rank: 7Rank: 7Rank: 7

积分
121
发表于 2019-9-19 21:48:53 | 显示全部楼层
namespace
{
        const TCHAR* xml = _T("<pane idealSize=\"250\" minSize=\"30\" colorBkgnd=\"#008800\" clipClient=\"1\"/>");

        void insert(SSplitWnd* pSplitWnd, LPCTSTR xml)
        {
                pugi::xml_document doc;
                if (doc.load(xml))
                {
                        SSplitPane* pPane = new SSplitPane();
                        pSplitWnd->InsertChild(pPane);
                        if (pPane->InitFromXml(doc.root()))
                        {
                                pSplitWnd->InsertItem(pPane);
                        }
                }
        }
}
void CMainDlg::OnAdd()
{
        SSplitWnd* pSplitWnd = FindChildByName2<SSplitWnd>(L"split_row");

        SASSERT(pSplitWnd);

        insert(pSplitWnd, xml);
}

5

主题

155

帖子

518

积分

版主

Rank: 7Rank: 7Rank: 7

积分
518
发表于 2019-9-19 23:23:09 | 显示全部楼层
9527 发表于 2019-9-19 21:48
namespace
{
        const TCHAR* xml = _T("");

9527这样用会有一个小问题:如果SOUI是MT编译的DLL,那么你new的SplitWnd会被SOUI内部delete的时候导致程序崩溃。
正确的做法应该是继承SSplitPane,实现虚函数:IRefObj::OnFinalRelease,在里面delete this。

3

主题

10

帖子

184

积分

24:00金丹期

Rank: 2

积分
184
 楼主| 发表于 2019-9-20 09:57:07 | 显示全部楼层
setoutsoft 发表于 2019-9-19 23:23
9527这样用会有一个小问题:如果SOUI是MT编译的DLL,那么你new的SplitWnd会被SOUI内部delete的时候导致程 ...

之前也是一直碰到soui内部delete出问题了,听老大一席话,胜读十年书  哈哈

4

主题

10

帖子

121

积分

版主

Rank: 7Rank: 7Rank: 7

积分
121
发表于 2019-10-3 11:03:59 | 显示全部楼层
我MT的时候一般是全静态。。。。用DLL的时候都是MD。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|SOUI官方论坛 ( 粤ICP备18103663号-2 )

GMT+8, 2019-10-17 03:33

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表