Esempio n. 1
0
        private Rectangle TabRectangle(int actualTabIndex)
        {
            int x;
            int y;
            int width;
            int height;

            switch (Identity.TechnologyType)
            {
            case "Windows Forms (WinForms)":
                GUI.m_APE.AddFirstMessageFindByHandle(DataStores.Store0, Identity.ParentHandle, Identity.Handle);
                GUI.m_APE.AddQueryMessageReflect(DataStores.Store0, DataStores.Store1, "GetTabRect", MemberTypes.Method, new Parameter(GUI.m_APE, actualTabIndex));
                GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store2, "X", MemberTypes.Property);
                GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store3, "Y", MemberTypes.Property);
                GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store4, "Width", MemberTypes.Property);
                GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store5, "Height", MemberTypes.Property);
                GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store2);
                GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store3);
                GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store4);
                GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store5);
                GUI.m_APE.SendMessages(EventSet.APE);
                GUI.m_APE.WaitForMessages(EventSet.APE);
                //Get the value(s) returned MUST be done straight after the WaitForMessages call
                x      = GUI.m_APE.GetValueFromMessage();
                y      = GUI.m_APE.GetValueFromMessage();
                width  = GUI.m_APE.GetValueFromMessage();
                height = GUI.m_APE.GetValueFromMessage();
                break;

            case "Windows ActiveX":
                switch (Identity.TypeName)
                {
                case "SftTabs":
                    GUI.m_APE.AddFirstMessageFindByHandle(DataStores.Store0, Identity.ParentHandle, Identity.Handle);
                    GUI.m_APE.AddQueryMessageReflect(DataStores.Store0, DataStores.Store1, "Tab", MemberTypes.Method, new Parameter(GUI.m_APE, actualTabIndex));
                    GUI.m_APE.AddQueryMessageGetTabRect(DataStores.Store1);
                    GUI.m_APE.SendMessages(EventSet.APE);
                    GUI.m_APE.WaitForMessages(EventSet.APE);
                    //Get the value(s) returned MUST be done straight after the WaitForMessages call
                    x      = GUI.m_APE.GetValueFromMessage();
                    y      = GUI.m_APE.GetValueFromMessage();
                    width  = GUI.m_APE.GetValueFromMessage();
                    height = GUI.m_APE.GetValueFromMessage();
                    break;

                case "TabStrip":
                    GUI.m_APE.AddFirstMessageFindByHandle(DataStores.Store0, Identity.ParentHandle, Identity.Handle);
                    GUI.m_APE.AddQueryMessageReflect(DataStores.Store0, DataStores.Store1, "Tabs", MemberTypes.Method, new Parameter(GUI.m_APE, actualTabIndex));
                    GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store2, "Left", MemberTypes.Property);
                    GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store3, "Top", MemberTypes.Property);
                    GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store4, "Width", MemberTypes.Property);
                    GUI.m_APE.AddQueryMessageReflect(DataStores.Store1, DataStores.Store5, "Height", MemberTypes.Property);
                    GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store2);
                    GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store3);
                    GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store4);
                    GUI.m_APE.AddRetrieveMessageGetValue(DataStores.Store5);
                    GUI.m_APE.SendMessages(EventSet.APE);
                    GUI.m_APE.WaitForMessages(EventSet.APE);
                    //Get the value(s) returned MUST be done straight after the WaitForMessages call
                    x      = (int)(Math.Round(GUI.m_APE.GetValueFromMessage()));
                    y      = (int)(Math.Round(GUI.m_APE.GetValueFromMessage()));
                    width  = (int)(Math.Round(GUI.m_APE.GetValueFromMessage()));
                    height = (int)(Math.Round(GUI.m_APE.GetValueFromMessage()));

                    IntPtr containerHandle = NM.GetAncestor(Handle, NM.GetAncestorFlags.GetParent);

                    NM.tagPoint containerClientPoint = new NM.tagPoint();
                    NM.ClientToScreen(containerHandle, ref containerClientPoint);

                    NM.tagPoint clientPoint = new NM.tagPoint();
                    NM.ClientToScreen(Handle, ref clientPoint);

                    int containerOffsetX = clientPoint.x - containerClientPoint.x;
                    int containerOffsetY = clientPoint.y - containerClientPoint.y;

                    ScalingMode scaleMode = TabStripScalingMode();
                    switch (scaleMode)
                    {
                    case ScalingMode.Twip:             //Twip
                        x      = TwipsToPixels(x, Direction.Horizontal);
                        y      = TwipsToPixels(y, Direction.Vertical);
                        width  = TwipsToPixels(width, Direction.Horizontal);
                        height = TwipsToPixels(height, Direction.Vertical);
                        break;

                    case ScalingMode.Pixel:             //Pixel
                        //do nothing
                        break;

                    case ScalingMode.User:
                    case ScalingMode.Point:
                    case ScalingMode.Character:
                    case ScalingMode.Inch:
                    case ScalingMode.Millimeter:
                    case ScalingMode.Centimeter:
                        throw GUI.ApeException("The " + Description + " scaling mode is of unsupported type " + scaleMode.ToString());

                    default:
                        throw GUI.ApeException("The " + Description + " scaling mode is of unsupported type " + scaleMode.ToString());
                    }

                    x = x - containerOffsetX;
                    y = y - containerOffsetY;

                    int placement = TabStripPlacement();
                    switch (placement)
                    {
                    case 0:             //Top
                    case 1:             //Bottom
                        //do nothing
                        break;

                    case 2:             //Left
                    case 3:             //Right
                        //swap width and height
                        int temp = width;
                        width  = height;
                        height = temp;
                        break;

                    default:
                        throw GUI.ApeException("The " + Description + " placement is of unsupported type " + placement.ToString());
                    }

                    break;

                default:
                    throw GUI.ApeException("The " + Description + " is of an unsupported type " + Identity.TypeNameSpace + "." + Identity.TypeName);
                }
                break;

            default:
                throw GUI.ApeException("The " + Description + " is of an unsupported type " + Identity.TypeNameSpace + "." + Identity.TypeName);
            }
            Rectangle tabRectangle = new Rectangle(x, y, width, height);

            return(tabRectangle);
        }