private ScalingMode TabStripScalingMode() { 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; int placement = TabStripPlacement(); switch (placement) { case 0: //Top case 1: //Bottom GUI.m_APE.AddFirstMessageFindByHandle(DataStores.Store0, Identity.ParentHandle, Identity.Handle); GUI.m_APE.AddQueryMessageReflect(DataStores.Store0, DataStores.Store1, "ClientLeft", MemberTypes.Property); GUI.m_APE.AddRetrieveMessageGetValue(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 int clientLeft = (int)(Math.Round(GUI.m_APE.GetValueFromMessage())); if (clientLeft - containerOffsetX < 10) { return(ScalingMode.Pixel); } if (TwipsToPixels(clientLeft, Direction.Horizontal) - containerOffsetX < 10) { return(ScalingMode.Twip); } throw GUI.ApeException("Unsupported scaling mode"); case 2: //Left case 3: //Right GUI.m_APE.AddFirstMessageFindByHandle(DataStores.Store0, Identity.ParentHandle, Identity.Handle); GUI.m_APE.AddQueryMessageReflect(DataStores.Store0, DataStores.Store1, "ClientTop", MemberTypes.Property); GUI.m_APE.AddRetrieveMessageGetValue(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 int clientTop = (int)(Math.Round(GUI.m_APE.GetValueFromMessage())); if (clientTop - containerOffsetY < 10) { return(ScalingMode.Pixel); } if (TwipsToPixels(clientTop, Direction.Vertical) - containerOffsetY < 10) { return(ScalingMode.Twip); } throw GUI.ApeException("Unsupported scaling mode"); default: throw GUI.ApeException("The " + Description + " placement is of unsupported type " + placement.ToString()); } }
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); }