Esempio n. 1
0
        // edit高度发生变化
        private void AfterEditControlHeightChanged(Visual visual)
        {
            if (visual == null)
            {
                return;
            }
            int nOldHeight = 0;

            nOldHeight = visual.Rect.Height;

            //把文字送入item
            // ??????引向未完整的数据变成xml,抛出错误
            //this.EditControlTextToVisual();

            //重新计算
            int nRetWidth, nRetHeight;

            visual.Layout(visual.Rect.X,
                          visual.Rect.Y,
                          visual.Rect.Width,
                          this.Size.Height,// + visual.TopBlank + visual.BottomBlank + 2*visual.BorderHorzHeight ,//visual.rect .Height ,
                          this.XmlEditor.nTimeStampSeed++,
                          out nRetWidth,
                          out nRetHeight,
                          LayoutMember.Layout);


            // ???????设当前edit的大小及位置



            int nNewHeight = visual.Rect.Height;

            int nDelta = nNewHeight - nOldHeight;

            if (nDelta != 0)
            {
                //上级
                Visual containerVisual = visual.container;
                nNewHeight += containerVisual.TotalRestHeight;

                if (containerVisual != null)
                {
                    containerVisual.Layout(containerVisual.Rect.X,
                                           containerVisual.Rect.Y,
                                           containerVisual.Rect.Width,
                                           nNewHeight,
                                           this.XmlEditor.nTimeStampSeed,
                                           out nRetWidth,
                                           out nRetHeight,
                                           LayoutMember.EnLargeHeight | LayoutMember.Up);
                }
                //Visual.ChangeSibling (visual,-1,nNewHeight);
            }

            if (nDelta != 0 &&
                this.XmlEditor.m_curText != null)
            {
                //这里优先,使用ScrollWindowEx
            }

            if (nDelta != 0)
            {
                this.XmlEditor.AfterDocumentChanged(ScrollBarMember.Vert);
            }

            this.XmlEditor.Invalidate();

            //也需要做优化的事情
        }
Esempio n. 2
0
File: Box.cs Progetto: zszqwe/dp2
        // 布局
        public override void Layout(int x,
                                    int y,
                                    int nInitialWidth,
                                    int nInitialHeight,
                                    int nTimeStamp,
                                    out int nRetWidth,
                                    out int nRetHeight,
                                    LayoutMember layoutMember)
        {
            nRetWidth  = nInitialWidth;
            nRetHeight = nInitialHeight;

            bool bEnlargeWidth = false;

            if ((layoutMember & LayoutMember.EnlargeWidth) == LayoutMember.EnlargeWidth)
            {
                bEnlargeWidth = true;
            }
            bool bEnlargeHeight = false;

            if ((layoutMember & LayoutMember.EnLargeHeight) == LayoutMember.EnLargeHeight)
            {
                bEnlargeHeight = true;
            }
            if (bEnlargeWidth == true || bEnlargeHeight == true)
            {
                //父亲和兄弟都影响了
                if ((layoutMember & LayoutMember.Up) == LayoutMember.Up)
                {
                    if (bEnlargeHeight == true)
                    {
                        this.Rect.Height = nInitialHeight;
                        Box myContainer = (Box)(this.container);
                        if (myContainer == null)
                        {
                            return;
                        }

                        //横排
                        if (myContainer.LayoutStyle == LayoutStyle.Horizontal)
                        {
                            //影响兄弟
                            foreach (Visual child in myContainer.childrenVisual)
                            {
                                if (child.Equals(this) == true)
                                {
                                    continue;
                                }

                                child.Layout(
                                    child.Rect.X,
                                    child.Rect.Y,
                                    child.Rect.Width,
                                    this.Rect.Height,
                                    nTimeStamp,
                                    out nRetWidth,
                                    out nRetHeight,
                                    LayoutMember.EnLargeHeight);
                            }

                            int nMyHeight = this.Rect.Height;

                            foreach (Visual child in myContainer.childrenVisual)
                            {
                                if (child.Rect.Height > nMyHeight)
                                {
                                    nMyHeight = child.Rect.Height;
                                }
                            }
                            nMyHeight += myContainer.TotalRestHeight;

                            myContainer.Layout(
                                myContainer.Rect.X,
                                myContainer.Rect.Y,
                                myContainer.Rect.Width,
                                nMyHeight,
                                nTimeStamp,
                                out nRetWidth,
                                out nRetHeight,
                                layoutMember);
                        }
                        //竖排
                        if (myContainer.LayoutStyle == LayoutStyle.Vertical)
                        {
                            int nTempTotalHeight = 0;
                            foreach (Visual childVisual in myContainer.childrenVisual)
                            {
                                nTempTotalHeight += childVisual.Rect.Height;
                            }
                            nTempTotalHeight += myContainer.TotalRestHeight;;


                            myContainer.Layout(
                                myContainer.Rect.X,
                                myContainer.Rect.Y,
                                myContainer.Rect.Width,
                                nTempTotalHeight,
                                nTimeStamp,
                                out nRetWidth,
                                out nRetHeight,
                                layoutMember);


                            //设兄弟坐标
                            int nXDelta = myContainer.LeftResWidth;
                            int nYDelta = myContainer.TopResHeight;
                            foreach (Visual childVisual in myContainer.childrenVisual)
                            {
                                childVisual.Rect.X = nXDelta;
                                childVisual.Rect.Y = nYDelta;
                                nYDelta           += childVisual.Rect.Height;
                            }
                        }
                        return;
                    }
                }

                if (LayoutStyle == LayoutStyle.Horizontal)
                {
                    if (bEnlargeHeight == true)
                    {
                        this.Rect.Height = nInitialHeight;
                        foreach (Visual child in this.childrenVisual)
                        {
                            child.Layout(0,
                                         0,
                                         0,
                                         nInitialHeight,
                                         nTimeStamp,
                                         out nRetWidth,
                                         out nRetHeight,
                                         layoutMember);
                        }
                    }
                }
                else if (LayoutStyle == LayoutStyle.Vertical)
                {
                    if (bEnlargeWidth == true)
                    {
                        this.Rect.Width = nInitialWidth;
                        foreach (Visual child in this.childrenVisual)
                        {
                            child.Layout(0,
                                         0,
                                         nInitialWidth,
                                         0,
                                         nTimeStamp,
                                         out nRetWidth,
                                         out nRetHeight,
                                         layoutMember);
                        }
                    }
                }
                return;
            }

            Item item = GetItem();

            item.m_document.nTime++;
            string strTempInfo    = "";
            int    nTempLevel     = this.GetVisualLevel();
            string strLevelString = this.GetStringFormLevel(nTempLevel);

            if (this.IsWriteInfo == true)
            {
                strTempInfo = "\r\n"
                              + strLevelString + "******************************\r\n"
                              + strLevelString + "这是第" + nTempLevel + "层的" + this.GetType().Name + "调layout开始\r\n"
                              + strLevelString + "参数为:\r\n"
                              + strLevelString + "x=" + x + "\r\n"
                              + strLevelString + "y=" + y + "\r\n"
                              + strLevelString + "nInitialWidth=" + nInitialWidth + "\r\n"
                              + strLevelString + "nInitialHeight=" + nInitialHeight + "\r\n"
                              + strLevelString + "nTimeStamp=" + nTimeStamp + "\r\n"
                              + strLevelString + "layoutMember=" + layoutMember.ToString() + "\r\n"
                              + strLevelString + "LayoutStyle=" + this.LayoutStyle.ToString() + "\r\n"
                              + strLevelString + "使总次数变为" + item.m_document.nTime + "\r\n";
                StreamUtil.WriteText("I:\\debug.txt", strTempInfo);
            }

            if (Catch == true)
            {
                //当输入参数相同时,直接返回catch内容
                if (sizeCatch.nInitialWidth == nInitialWidth &&
                    sizeCatch.nInitialHeight == nInitialHeight &&
                    (sizeCatch.layoutMember == layoutMember))
                {
                    if (this.IsWriteInfo == true)
                    {
                        strTempInfo = "\r\n"
                                      + strLevelString + "------------------"
                                      + strLevelString + "与缓存时相同\r\n"
                                      + strLevelString + "传入的值: initialWidth:" + nInitialWidth + " initialHeight:" + nInitialHeight + " timeStamp: " + nTimeStamp + " layoutMember:" + layoutMember.ToString() + "\r\n"
                                      + strLevelString + "缓存的值: initialWidth:" + sizeCatch.nInitialWidth + " initialHeight:" + sizeCatch.nInitialHeight + " timeStamp: " + sizeCatch.nTimeStamp + " layoutMember:" + sizeCatch.layoutMember.ToString() + "\r\n";
                    }

                    if ((layoutMember & LayoutMember.Layout) != LayoutMember.Layout)
                    {
                        if (this.IsWriteInfo == true)
                        {
                            strTempInfo += strLevelString + "不是实做,直接返回缓冲区值\r\n";
                        }

                        nRetWidth  = sizeCatch.nRetWidth;
                        nRetHeight = sizeCatch.nRetHeight;

                        if (this.IsWriteInfo == true)
                        {
                            strTempInfo += strLevelString + "----------结束------\r\n";
                            StreamUtil.WriteText("I:\\debug.txt", strTempInfo);
                        }
                        goto END1;
                    }
                    else
                    {
                        if (this.IsWriteInfo == true)
                        {
                            strTempInfo += strLevelString + "包含实做,向下继续\r\n";
                        }
                    }

                    if (this.IsWriteInfo == true)
                    {
                        strTempInfo += strLevelString + "----------结束------\r\n";
                        StreamUtil.WriteText("I:\\debug.txt", strTempInfo);
                    }
                }
                else
                {
                    if (this.IsWriteInfo == true)
                    {
                        strTempInfo = "\r\n"
                                      + strLevelString + "------------------"
                                      + strLevelString + "与缓存时不同\r\n"
                                      + strLevelString + "传入的值: initialWidth:" + nInitialWidth + " initialHeight:" + nInitialHeight + " timeStamp: " + nTimeStamp + " layoutMember:" + layoutMember.ToString() + "\r\n"
                                      + strLevelString + "缓存的值: initialWidth:" + sizeCatch.nInitialWidth + " initialHeight:" + sizeCatch.nInitialHeight + " timeStamp: " + sizeCatch.nTimeStamp + " layoutMember:" + sizeCatch.layoutMember.ToString() + "\r\n";

                        strTempInfo += strLevelString + "----------结束------\r\n";
                        StreamUtil.WriteText("I:\\debug.txt", strTempInfo);
                    }
                }
            }



            //计算每一小块用得参数
            int nPartWidth     = 0;
            int nPartHeight    = 0;
            int nRetPartWidth  = 0;;             //返回
            int nRetPartHeight = 0;

            int nTotalWidth = 0;           //横排总宽度
            int nMaxHeight  = 0;           //横排时的最大高度,当变大,要重新算

            int nMaxWidth    = 0;          //竖排时的最大宽度,当变大,要重新算
            int nTotalHeight = 0;          //竖排总高度

            Visual visual = null;

            ArrayList aVisualUnDefineWidth = null; //没有定义宽度的Visual组成的数组
            PartInfo  partInfo             = null; //用来计宽度的对象

            //横排
            if (LayoutStyle == LayoutStyle.Horizontal)
            {
                //******************************************
                //1.只测宽度,用等号
                //*******************************************
                if ((layoutMember == LayoutMember.CalcuWidth))
                {
                    nTotalWidth = 0;                      //总宽度赋0
                    if (aVisualUnDefineWidth != null)
                    {
                        aVisualUnDefineWidth.Clear();
                    }
                    else
                    {
                        aVisualUnDefineWidth = new ArrayList();
                    }

                    if (this.childrenVisual != null)
                    {
                        //把数组中找到定义的宽度
                        for (int i = 0; i < this.childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            PartWidth partWidth = item.GetPartWidth(visual.GetType().Name);

                            //没找到对象,或级别号小于等于0,加到未定义宽度数组
                            if (partWidth == null ||
                                partWidth.nGradeNo <= 0)
                            {
                                aVisualUnDefineWidth.Add(visual);
                                continue;
                            }
                            nPartWidth   = partWidth.nWidth;
                            nTotalWidth += nPartWidth;
                        }
                    }

                    //算那些没有在数组里定义的宽度的区域
                    if (aVisualUnDefineWidth != null &&
                        aVisualUnDefineWidth.Count > 0)
                    {
                        //计算得到其它项的平均宽度
                        int nTemp = nInitialWidth
                                    - nTotalWidth
                                    - this.TotalRestWidth;

                        nPartWidth = nTemp / (aVisualUnDefineWidth.Count);

                        for (int i = 0; i < aVisualUnDefineWidth.Count; i++)
                        {
                            visual = (Visual)aVisualUnDefineWidth[i];

                            visual.Layout(0,
                                          0,
                                          nPartWidth,
                                          0,                         //不关心高度
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.CalcuWidth);                          //只测宽度

                            nTotalWidth += nRetPartWidth;
                        }
                    }

                    //算返回宽度
                    nTotalWidth += this.TotalRestWidth;
                    nRetWidth    = (nRetWidth > nTotalWidth) ? nRetWidth : nTotalWidth;

                    goto END1;
                }

                //*****************************************
                //2.即测宽度,又测高度
                //*******************************************
                if (((layoutMember & LayoutMember.CalcuWidth) == LayoutMember.CalcuWidth) &&
                    ((layoutMember & LayoutMember.CalcuHeight) == LayoutMember.CalcuHeight))
                {
                    nTotalWidth = 0;                      //总宽度赋0
                    if (aVisualUnDefineWidth != null)
                    {
                        aVisualUnDefineWidth.Clear();
                    }
                    else
                    {
                        aVisualUnDefineWidth = new ArrayList();
                    }


                    //最大高度
                    nMaxHeight = nInitialHeight
                                 - this.TotalRestHeight;

                    if (this.childrenVisual != null)
                    {
                        for (int i = 0; i < this.childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            PartWidth partWidth = item.GetPartWidth(visual.GetType().Name);

                            //没找到对象,或级别号小于等于0,加到未定义宽度数组
                            if (partWidth == null ||
                                partWidth.nGradeNo <= 0)
                            {
                                aVisualUnDefineWidth.Add(visual);
                                continue;
                            }

                            nPartWidth = partWidth.nWidth;

                            visual.Layout(0,
                                          0,
                                          nPartWidth,                        //传入一个固定宽度
                                          nMaxHeight,
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.CalcuWidth | LayoutMember.CalcuHeight);                           //只测宽度

                            if (nRetPartHeight > nMaxHeight)
                            {
                                nMaxHeight = nRetPartHeight;
                            }

                            //总宽度增加?,宽度是否会发生改变
                            nTotalWidth += nRetPartWidth;
                        }
                    }

                    //算那些没有在数组里定义的宽度的区域
                    if (aVisualUnDefineWidth != null && aVisualUnDefineWidth.Count > 0)
                    {
                        int nTemp = nInitialWidth
                                    - nTotalWidth
                                    - this.TotalRestWidth;

                        nPartWidth = nTemp / (aVisualUnDefineWidth.Count);

                        for (int i = 0; i < aVisualUnDefineWidth.Count; i++)
                        {
                            visual = (Visual)aVisualUnDefineWidth[i];

                            visual.Layout(0,
                                          0,
                                          nPartWidth,
                                          nMaxHeight,                         //0,   //不关心高度
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.CalcuWidth | LayoutMember.CalcuHeight);                          //只测宽度

                            nTotalWidth += nRetPartWidth;
                            if (nRetPartHeight > nMaxHeight)
                            {
                                nMaxHeight = nRetPartHeight;
                            }
                        }
                    }

                    nTotalWidth += this.TotalRestWidth;
                    nRetWidth    = (nRetWidth > nTotalWidth) ? nRetWidth : nTotalWidth;
                    if (nRetWidth < 0)
                    {
                        nRetWidth = 0;
                    }

                    nMaxHeight += this.TotalRestHeight;;
                    nRetHeight  = (nRetHeight > nMaxHeight) ? nRetHeight : nMaxHeight;
                    if (nRetHeight < 0)
                    {
                        nRetHeight = 0;
                    }
                    goto END1;
                }

                //******************************************
                //3.实算
                //********************************************
                if ((layoutMember & LayoutMember.Layout) == LayoutMember.Layout)
                {
                    nTotalWidth = 0;                      //总宽度赋0
                    if (aVisualUnDefineWidth != null)
                    {
                        aVisualUnDefineWidth.Clear();
                    }
                    else
                    {
                        aVisualUnDefineWidth = new ArrayList();
                    }

                    //最大高度
                    nMaxHeight = nInitialHeight
                                 - this.TotalRestHeight;

                    //这个数组用来记下每个part的宽度
                    ArrayList aWidth = new ArrayList();

                    if (this.childrenVisual != null)
                    {
                        for (int i = 0; i < this.childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            PartWidth partWidth = item.GetPartWidth(visual.GetType().Name);

                            //没找到对象,或级别号小于等于0,加到未定义宽度数组
                            if (partWidth == null ||
                                partWidth.nGradeNo <= 0)
                            {
                                aVisualUnDefineWidth.Add(visual);
                                continue;
                            }
                            nPartWidth   = partWidth.nWidth;
                            nTotalWidth += nPartWidth;                                //这里加的目的是为了以后减少

                            //记到数组里
                            partInfo         = new PartInfo();
                            partInfo.strName = visual.GetType().Name;
                            partInfo.nWidth  = nPartWidth;
                            aWidth.Add(partInfo);
                        }
                    }

                    //算那些没有在数组里定义的宽度的区域
                    if (aVisualUnDefineWidth != null && aVisualUnDefineWidth.Count > 0)
                    {
                        //这儿引起了没法以最小宽度计算
                        int nTemp = nInitialWidth
                                    - nTotalWidth
                                    - this.TotalRestWidth;

                        nPartWidth = nTemp / (aVisualUnDefineWidth.Count);
                        //nPartWidth可能为负数

                        for (int i = 0; i < aVisualUnDefineWidth.Count; i++)
                        {
                            visual       = (Visual)aVisualUnDefineWidth[i];
                            nTotalWidth += nPartWidth;

                            //记到数组里
                            partInfo         = new PartInfo();
                            partInfo.strName = visual.GetType().Name;
                            partInfo.nWidth  = nPartWidth;
                            aWidth.Add(partInfo);
                        }
                    }

                    item.SetValue(this.GetType().Name, nRetWidth);

                    //根据布局样式排列一下
                    int nXDelta = this.LeftResWidth;
                    int nYDelta = this.TopResHeight;

                    if (this.childrenVisual != null)
                    {
                        nTotalWidth = 0;
                        int i;
                        for (i = 0; i < childrenVisual.Count; i++)
                        {
                            visual     = (Visual)childrenVisual[i];
                            nPartWidth = GetRememberWidth(aWidth, visual.GetType().Name);

                            visual.Layout(0 + nXDelta,
                                          0 + nYDelta,
                                          nPartWidth,
                                          0,
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.Layout);

                            nXDelta     += visual.Rect.Width;
                            nTotalWidth += visual.Rect.Width;
                            if (visual.Rect.Height > nMaxHeight)
                            {
                                nMaxHeight = visual.Rect.Height;
                            }
                        }

                        for (i = 0; i < childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            if (visual.Rect.Height < nMaxHeight)
                            {
                                visual.Rect.Height = nMaxHeight;
                            }
                        }
                    }

                    nTotalWidth += this.TotalRestWidth;
                    nRetWidth    = (nRetWidth > nTotalWidth) ? nRetWidth : nTotalWidth;
                    if (nRetWidth < 0)
                    {
                        nRetWidth = 0;
                    }

                    nMaxHeight += this.TotalRestHeight;
                    nRetHeight  = (nRetHeight > nMaxHeight) ? nRetHeight : nMaxHeight;
                    if (nRetHeight < 0)
                    {
                        nRetHeight = 0;
                    }

                    //把自己的rect设好
                    this.Rect = new Rectangle(x,
                                              y,
                                              nRetWidth,
                                              nRetHeight);

                    //goto END1;
                }
            }

            //竖排
            if (LayoutStyle == LayoutStyle.Vertical)
            {
                //******************************************
                //1.只测宽度,用等号
                //*******************************************
                if ((layoutMember == LayoutMember.CalcuWidth))
                {
                    nMaxWidth = nInitialWidth
                                - this.TotalRestWidth;

                    if (nMaxWidth < 0)
                    {
                        nMaxWidth = 0;
                    }
                    if (this.childrenVisual != null)
                    {
                        for (int i = 0; i < this.childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            visual.Layout(0,
                                          0,
                                          nMaxWidth,
                                          0,
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.CalcuWidth);

                            if (nRetPartWidth > nMaxWidth)
                            {
                                nMaxWidth = nRetPartWidth;
                            }
                        }
                    }
                    nMaxWidth += this.TotalRestWidth;
                    nRetWidth  = (nRetWidth > nMaxWidth) ? nRetWidth : nMaxWidth;

                    goto END1;
                }

                //*****************************************
                //2.即测宽度,又测高度
                //*******************************************
                if (((layoutMember & LayoutMember.CalcuWidth) == LayoutMember.CalcuWidth) &&
                    ((layoutMember & LayoutMember.CalcuHeight) == LayoutMember.CalcuHeight))
                {
                    //最大宽度
                    nMaxWidth = nInitialWidth
                                - this.TotalRestWidth;

                    nTotalHeight = 0;                     //总高度赋0

                    if (this.childrenVisual != null)
                    {
                        for (int i = 0; i < this.childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            visual.Layout(0,
                                          0,
                                          nMaxWidth,
                                          0,
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.CalcuWidth | LayoutMember.CalcuHeight);

                            if (nRetPartWidth > nMaxWidth)
                            {
                                nMaxWidth = nRetPartWidth;
                            }

                            nTotalHeight += nRetPartHeight;
                        }
                    }

                    nMaxWidth += this.TotalRestWidth;
                    nRetWidth  = (nRetWidth > nMaxWidth) ? nRetWidth : nMaxWidth;

                    nTotalHeight += this.TotalRestHeight;
                    nRetHeight    = (nRetHeight > nTotalHeight) ? nRetHeight : nTotalHeight;
                    goto END1;
                }

                //******************************************
                //3.实算
                //********************************************
                if ((layoutMember & LayoutMember.Layout) == LayoutMember.Layout)
                {
                    //最大宽度
                    nMaxWidth = nInitialWidth
                                - this.TotalRestWidth;

                    nTotalHeight = 0;                     //总高度赋0

                    item.SetValue(this.GetType().Name, nRetWidth);

                    //根据布局样式排列一下
                    int nXDelta = this.LeftResWidth;
                    int nYDelta = this.TopResHeight;

                    if (this.childrenVisual != null)
                    {
                        for (int i = 0; i < childrenVisual.Count; i++)
                        {
                            visual      = (Visual)childrenVisual[i];
                            nPartHeight = 0;

                            visual.Layout(0 + nXDelta,
                                          0 + nYDelta,
                                          nMaxWidth,
                                          nPartHeight,
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.Layout);

                            nYDelta += visual.Rect.Height;

                            if (visual.Rect.Width > nMaxWidth)
                            {
                                nMaxWidth = visual.Rect.Width;
                            }

                            nTotalHeight += visual.Rect.Height;
                        }
                    }
                    nMaxWidth += this.TotalRestWidth;
                    nRetWidth  = (nRetWidth > nMaxWidth) ? nRetWidth : nMaxWidth;
                    if (nRetWidth < 0)
                    {
                        nRetWidth = 0;
                    }

                    nTotalHeight += this.TotalRestHeight;
                    nRetHeight    = (nRetHeight > nTotalHeight) ? nRetHeight : nTotalHeight;
                    if (nRetHeight < 0)
                    {
                        nRetHeight = 0;
                    }


                    //把自己的rect设好
                    this.Rect = new Rectangle(x,
                                              y,
                                              nRetWidth,
                                              nRetHeight);


                    //goto END1;
                }

                //****************************************
                //4.只测高度,这里有疑问
                //*****************************************
                if (layoutMember == LayoutMember.CalcuHeight)
                {
                    //最大宽度
                    nMaxWidth = nInitialWidth
                                - this.TotalRestWidth;

                    nTotalHeight = 0;                     //总高度赋0
                    if (this.childrenVisual != null)
                    {
                        for (int i = 0; i < this.childrenVisual.Count; i++)
                        {
                            visual = (Visual)childrenVisual[i];
                            visual.Layout(0,
                                          0,
                                          nMaxWidth,
                                          0,
                                          nTimeStamp,
                                          out nRetPartWidth,
                                          out nRetPartHeight,
                                          LayoutMember.CalcuHeight);

                            if (nRetPartWidth > nMaxWidth)
                            {
                                nMaxWidth = nRetPartWidth;
                            }

                            nTotalHeight += nRetPartHeight;
                        }
                    }
                    nTotalHeight += this.TotalRestHeight;
                    nRetHeight    = (nRetHeight > nTotalHeight) ? nRetHeight : nTotalHeight;

                    goto END1;
                }
            }

            if ((layoutMember & LayoutMember.Up) == LayoutMember.Up)
            {
                Visual.UpLayout(this, nTimeStamp);
            }

END1:
            sizeCatch.SetValues(nInitialWidth,
                                nInitialHeight,
                                nRetWidth,
                                nRetHeight,
                                nTimeStamp,
                                layoutMember);

            if (this.IsWriteInfo == true)
            {
                strTempInfo = "";
                strTempInfo = "\r\n"
                              + strLevelString + "这是第" + nTempLevel + "层的" + this.GetType().Name + "调layout结束\r\n"
                              + strLevelString + "返回值为: \r\n"
                              + strLevelString + "x=" + x + "\r\n"
                              + strLevelString + "y=" + y + "\r\n"
                              + strLevelString + "nRetWidth=" + nRetWidth + "\r\n"
                              + strLevelString + "nRetHeight=" + nRetHeight + "\r\n"
                              + strLevelString + "Rect.X=" + this.Rect.X + "\r\n"
                              + strLevelString + "Rect.Y=" + this.Rect.Y + "\r\n"
                              + strLevelString + "Rect.Width=" + this.Rect.Width + "\r\n"
                              + strLevelString + "Rect.Height=" + this.Rect.Height + "\r\n"
                              + strLevelString + "****************************\r\n\r\n";

                StreamUtil.WriteText("I:\\debug.txt", strTempInfo);
            }
        }
Esempio n. 3
0
        // edit高度发生变化
        private void AfterEditControlHeightChanged(Visual visual)
        {
            if (visual == null)
                return;
            int nOldHeight = 0;
            nOldHeight = visual.Rect.Height;

            //把文字送入item
            // ??????引向未完整的数据变成xml,抛出错误
            //this.EditControlTextToVisual();

            //重新计算
            int nRetWidth, nRetHeight;
            visual.Layout(visual.Rect.X,
                visual.Rect.Y,
                visual.Rect.Width,
                this.Size.Height,// + visual.TopBlank + visual.BottomBlank + 2*visual.BorderHorzHeight ,//visual.rect .Height ,
                this.XmlEditor.nTimeStampSeed++,
                out nRetWidth,
                out nRetHeight,
                LayoutMember.Layout);


            // ???????设当前edit的大小及位置



            int nNewHeight = visual.Rect.Height;

            int nDelta = nNewHeight - nOldHeight;

            if (nDelta != 0)
            {
                //上级
                Visual containerVisual = visual.container;
                nNewHeight += containerVisual.TotalRestHeight;

                if (containerVisual != null)
                {
                    containerVisual.Layout(containerVisual.Rect.X,
                        containerVisual.Rect.Y,
                        containerVisual.Rect.Width,
                        nNewHeight,
                        this.XmlEditor.nTimeStampSeed,
                        out nRetWidth,
                        out nRetHeight,
                        LayoutMember.EnLargeHeight | LayoutMember.Up);
                }
                //Visual.ChangeSibling (visual,-1,nNewHeight);
            }

            if (nDelta != 0
                && this.XmlEditor.m_curText != null)
            {
                //这里优先,使用ScrollWindowEx
            }

            if (nDelta != 0)
            {
                this.XmlEditor.AfterDocumentChanged(ScrollBarMember.Vert);
            }

            this.XmlEditor.Invalidate();

            //也需要做优化的事情
        }