private int scUpDown_SubClassedWndProc(ref Message m) { switch (m.Msg) { case CustomWin32.WM_PAINT: { //------------------------ // redraw IntPtr hDC = CustomWin32.GetWindowDC(scUpDown.Handle); Graphics g = Graphics.FromHdc(hDC); DrawIcons(g); g.Dispose(); CustomWin32.ReleaseDC(scUpDown.Handle, hDC); //------------------------ // return 0 (processed) m.Result = IntPtr.Zero; //------------------------ // validate current rect Rectangle rect = new Rectangle(); CustomWin32.GetClientRect(scUpDown.Handle, ref rect); CustomWin32.ValidateRect(scUpDown.Handle, ref rect); //------------------------ } return(1); } return(0); }
private void UpdateUpDown() { if (bUpDown) { if (CustomWin32.IsWindowVisible(scUpDown.Handle)) { Rectangle rect = new Rectangle(); CustomWin32.GetClientRect(scUpDown.Handle, ref rect); CustomWin32.InvalidateRect(scUpDown.Handle, ref rect, true); } } }
private void FindUpDown() { bool bFound = false; // find the UpDown control IntPtr pWnd = CustomWin32.GetWindow(this.Handle, CustomWin32.GW_CHILD); while (pWnd != IntPtr.Zero) { //---------------------------- // Get the window class name char[] className = new char[33]; int length = CustomWin32.GetClassName(pWnd, className, 32); string s = new string(className, 0, length); //---------------------------- if (s == "msctls_updown32") { bFound = true; if (!bUpDown) { //---------------------------- // Subclass it this.scUpDown = new SubClass(pWnd, true); this.scUpDown.SubClassedWndProc += new SubClass.SubClassWndProcEventHandler(scUpDown_SubClassedWndProc); //---------------------------- bUpDown = true; } break; } pWnd = CustomWin32.GetWindow(pWnd, CustomWin32.GW_HWNDNEXT); } if ((!bFound) && (bUpDown)) { bUpDown = false; } }
internal void DrawIcons(Graphics g) { if ((leftRightImages == null) || (leftRightImages.Images.Count != 4)) { return; } //---------------------------- // calculate positions Rectangle TabControlArea = this.ClientRectangle; Rectangle r0 = new Rectangle(); CustomWin32.GetClientRect(scUpDown.Handle, ref r0); Brush br = new SolidBrush(Color.FromArgb(120, 135, 156)); g.FillRectangle(br, r0); br.Dispose(); Pen border = new Pen(SystemColors.ControlDark); Rectangle rborder = r0; rborder.Inflate(-1, -1); g.DrawRectangle(border, rborder); border.Dispose(); int nMiddle = (r0.Width / 2); int nTop = (r0.Height - 16) / 2; int nLeft = (nMiddle - 16) / 2; Rectangle r1 = new Rectangle(nLeft, nTop, 16, 16); Rectangle r2 = new Rectangle(nMiddle + nLeft, nTop, 16, 16); //---------------------------- //---------------------------- // draw buttons Image img = leftRightImages.Images[1]; if (img != null) { if (this.TabCount > 0) { Rectangle r3 = this.GetTabRect(0); if (r3.Left < TabControlArea.Left) { g.DrawImage(img, r1); } else { img = leftRightImages.Images[3]; if (img != null) { g.DrawImage(img, r1); } } } } img = leftRightImages.Images[0]; if (img != null) { if (this.TabCount > 0) { Rectangle r3 = this.GetTabRect(this.TabCount - 1); if (r3.Right > (TabControlArea.Width - r0.Width)) { g.DrawImage(img, r2); } else { img = leftRightImages.Images[2]; if (img != null) { g.DrawImage(img, r2); } } } } //---------------------------- }
//public override Rectangle DisplayRectangle //{ // get // { // Rectangle rect = base.DisplayRectangle; // return new Rectangle(rect.Left - 4, rect.Top - 1, rect.Width + 8, rect.Height + 5); // } //} internal void DrawControl(Graphics g) { if (!Visible) { return; } Rectangle TabControlArea = this.ClientRectangle; Rectangle TabArea = this.DisplayRectangle; // fill client area RenderControlBackground(g, TabControlArea); // draw panel border int nDelta = SystemInformation.Border3DSize.Width; Pen border = new Pen(SystemColors.Control); TabArea.Inflate(nDelta, nDelta); g.DrawRectangle(border, TabArea); border.Dispose(); // clip region for drawing tabs Region rsaved = g.Clip; Rectangle rreg; int nWidth = TabArea.Width + nMargin; if (bUpDown) { // exclude updown control for painting if (CustomWin32.IsWindowVisible(scUpDown.Handle)) { Rectangle rupdown = new Rectangle(); CustomWin32.GetWindowRect(scUpDown.Handle, ref rupdown); Rectangle rupdown2 = this.RectangleToClient(rupdown); nWidth = rupdown2.X; } } rreg = new Rectangle(TabArea.Left, TabControlArea.Top, nWidth - nMargin, TabControlArea.Height); g.SetClip(rreg); // draw tabs for (int i = 0; i < this.TabCount; i++) { DrawTab(g, this.TabPages[i], i); } g.Clip = rsaved; //---------------------------- //---------------------------- // draw background to cover flat border areas if (this.SelectedTab != null) { TabPage tabPage = this.SelectedTab; Color color = Color.White; border = new Pen(color); TabArea.Offset(1, 1); TabArea.Width -= 2; TabArea.Height -= 2; g.DrawRectangle(border, TabArea); TabArea.Width -= 1; TabArea.Height -= 1; g.DrawRectangle(border, TabArea); border.Dispose(); } }