#if FRAMEWORK20 using System; using System.Drawing; using System.Windows.Forms; using System.Globalization; namespace DevComponents.DotNetBar.Schedule { public partial class PosWin : Form { #region Private variables private BaseView _View; // BaseView private string _PosText = ""; // Window content private int _PosHeight; // Calculated window height #endregion /// /// Constructor /// public PosWin(BaseView view) { _View = view; InitializeComponent(); } #region CreateParams / show support // This code permits us to be able to create a // window with a drop shadow private const int CsDropshadow = 0x00020000; protected override CreateParams CreateParams { get { CreateParams parameters = base.CreateParams; parameters.ClassStyle = (parameters.ClassStyle | CsDropshadow); return (parameters); } } protected override bool ShowWithoutActivation { get { return true; } } #endregion #region Public properties /// /// Gets and sets the window content text /// public string PosText { get { return (_PosText); } set { if (_PosText != value) { _PosText = value; this.Refresh(); } } } /// /// Gets the calculated window height /// public int PosHeight { get { if (_PosHeight <= 0) { using (Graphics g = CreateGraphics()) { Size sz = TextDrawing.MeasureString(g, "ABC", SystemFonts.CaptionFont, 0, eTextFormat.Default | eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter); _PosHeight = sz.Height + 4; } } return (_PosHeight); } } #endregion #region UpdateWin /// /// Updates the posWin /// /// View rectangle public void UpdateWin(Rectangle viewRect) { CalendarItem item = _View.SelectedItem; if (item != null) { // Calculate where the window should be positioned // and what time should be displayed Point pt = item.Bounds.Location; DateTime time = item.StartTime; pt.X += item.Bounds.Width + 4; if (pt.X > _View.ClientRect.Right) pt.X = _View.ClientRect.Right + 4; if (_View.NClientData.TabOrientation == eTabOrientation.Horizontal) { if (_View.SelectedItem.HitArea == CalendarItem.eHitArea.BottomResize) { pt.Y += (item.Bounds.Height - PosHeight); time = item.EndTime; } } else { if (_View.SelectedItem.HitArea == CalendarItem.eHitArea.RightResize) time = item.EndTime; } if (pt.Y < viewRect.Y) pt.Y = viewRect.Y; // Convert the point to global coordinates // and set our window position accordingly Control c = (Control)_View.GetContainerControl(true); if (c != null) pt = c.PointToScreen(pt); Location = pt; // Set the window text and show the window string fmt = "t"; if (_View.ECalendarView == eCalendarView.TimeLine) { switch (_View.CalendarView.TimeLinePeriod) { case eTimeLinePeriod.Years: fmt = ""; PosText = time.Year.ToString(); break; case eTimeLinePeriod.Days: fmt = "g"; break; } } if (fmt != "") { PosText = _View.CalendarView.Is24HourFormat == true ? time.ToString(fmt, DateTimeFormatInfo.InvariantInfo) : time.ToString(fmt, null); } Show(); } } #endregion #region Paint processing /// /// Paint processing /// /// /// private void PosWin_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; const eTextFormat tf = eTextFormat.Default | eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter; Size sz = TextDrawing.MeasureString(g, _PosText, SystemFonts.CaptionFont, 0, tf); sz.Width += 6; sz.Height += 4; this.Size = sz; int swidth = Screen.FromControl(this).Bounds.Width; if (Location.X + sz.Width > swidth) Location = new Point(swidth - sz.Width, Location.Y); Rectangle r = new Rectangle(0, 0, sz.Width - 1, sz.Height - 1); g.DrawRectangle(Pens.Black, r); TextDrawing.DrawString(g, _PosText, SystemFonts.CaptionFont, Color.Black, r, tf); } #endregion } } #endif