private void InitializeAeroGlass() { ResetDwmBlurBehind(); m_glassMargins = new DwmApi.MARGINS(-1, -1, -1, -1); //m_glassMargins = new DwmApi.MARGINS(1, 1, 1, 1); if (DwmApi.DwmIsCompositionEnabled()) { DwmApi.DwmExtendFrameIntoClientArea(this.Handle, m_glassMargins); } }
private void ResetDwmBlurBehind() { if (DwmApi.DwmIsCompositionEnabled()) { DwmApi.DWM_BLURBEHIND bbhOff = new DwmApi.DWM_BLURBEHIND(); bbhOff.dwFlags = DwmApi.DWM_BLURBEHIND.DWM_BB_ENABLE | DwmApi.DWM_BLURBEHIND.DWM_BB_BLURREGION; bbhOff.fEnable = false; bbhOff.hRegionBlur = IntPtr.Zero; DwmApi.DwmEnableBlurBehindWindow(this.Handle, bbhOff); } }
protected override void OnPaintBackground(PaintEventArgs e) { if (DwmApi.DwmIsCompositionEnabled()) { BackColor = Color.Black; } else { BackColor = SystemColors.ControlLightLight; } base.OnPaintBackground(e); }
protected override void WndProc(ref Message m) { const int WM_DWMCOMPOSITIONCHANGED = 0x031E; switch (m.Msg) { case 0x0084: IntPtr currentActiveHandle = NativeMethods.GetForegroundWindow(); if (NativeMethods.IsWindow(currentActiveHandle) && currentActiveHandle != this.Handle) { lastActiveHandle = currentActiveHandle; } break; case 0x0021: int hitTestResult = (int)m.LParam & 0xff; // hit client if (hitTestResult == 1) { m.Result = new IntPtr(3); return; } break; case WM_DWMCOMPOSITIONCHANGED: if (!DwmApi.DwmIsCompositionEnabled()) { m_glassMargins = null; } else { InitializeAeroGlass(); } break; } base.WndProc(ref m); }
protected override void WndProc(ref Message msg) { base.WndProc(ref msg); const int WM_DWMCOMPOSITIONCHANGED = 0x031E; const int WM_NCHITTEST = 0x84; const int HTCLIENT = 0x01; const int WM_HOTKEY = 0x0312; const int WM_COPYDATA = 0x004A; switch (msg.Msg) { case WM_COPYDATA: NativeMethods.COPYDATASTRUCT cds = Marshal.PtrToStructure(msg.LParam, typeof(NativeMethods.COPYDATASTRUCT)) as NativeMethods.COPYDATASTRUCT; if (cds.dwData.ToInt32() == 0x8855) { Byte[] states = new Byte[cds.cbData]; Marshal.Copy(cds.lpData, states, 0, cds.cbData); keyEventHandler.SetKeyboardState(states); } break; case WM_HOTKEY: if (msg.WParam.ToInt32() == softKeyboardHtkyId) { softKeyboard.Visible = !softKeyboard.Visible; } break; case (int)DLLMSG.KM_INPUTLANGCHANGE: softKeyboard.Refresh(SoftKeyboard.RefreshFor.Label); break; //case (int)DLLMSG.KM_GETKBLNAME: // try // { // String fileName = ActiveKeyboardList[msg.LParam.ToInt32()].file; // SetFileToLoad(fileName); // } // catch (Exception) // { // //Marshal.WriteByte(DllPtrFileToLoad, 0); // } // break; case (int)DLLMSG.KM_GOTFOCUS: if (msg.LParam == Handle || msg.LParam == NativeMethods.GetParent(msg.LParam)) { } else { uint pid; NativeMethods.GetWindowThreadProcessId(msg.LParam, out pid); if (Process.GetCurrentProcess().Id == pid) { break; } } //StringBuilder sb = new StringBuilder(255); //NativeMethods.GetClassName(msg.LParam, sb, 255); //Debug.WriteLine(sb.ToString()); //if (sb.ToString().Equals("TaskSwitcherWnd")) //{ // Debug.WriteLine("Ignored"); // break; //} LastClientHandle = msg.LParam; ClearCheck(cmsLeft.Items); uint dwProcessId; uint threadId = NativeMethods.GetWindowThreadProcessId(NativeMethods.GetForegroundWindow(), out dwProcessId); //NativeMethods.AttachThreadInput(NativeMethods.GetCurrentThreadId(), threadId, true); try { int index = 0; if (engines.ContainsKey(LastClientHandle)) { LayoutInfo layoutInfo = engines[LastClientHandle]; keyEventHandler.Engine = layoutInfo.engine; if (keyEventHandler.Engine != null) { keyEventHandler.Engine.Reset(); } SoftKeyboardEngine = keyEventHandler.Engine; index = layoutInfo.index; } else { engines[LastClientHandle] = new LayoutInfo(0, null); keyEventHandler.Engine = null; SoftKeyboardEngine = null; } if (cmsLeft.Items.Count > index) { String ActiveFile = ActiveKeyboardList[index].file; ToolStripMenuItem item = cmsLeft.Items[index] as ToolStripMenuItem; item.Checked = true; SetKeyboardIcon(ActiveFile); } } catch (Exception ex) { Trace.WriteLine(ex.Message, "Exception"); } break; case WM_NCHITTEST: if (HTCLIENT == msg.Result.ToInt32()) { // it's inside the client area // Parse the WM_NCHITTEST message parameters // get the mouse pointer coordinates (in screen coordinates) Point p = new Point(); p.X = (msg.LParam.ToInt32() & 0xFFFF); // low order word p.Y = (msg.LParam.ToInt32() >> 16); // hi order word // convert screen coordinates to client area coordinates p = PointToClient(p); // if it's on glass, then convert it from an HTCLIENT // message to an HTCAPTION message and let Windows handle it from then on if (PointIsOnGlass(p)) { msg.Result = new IntPtr(2); } } break; case WM_DWMCOMPOSITIONCHANGED: if (!DwmApi.DwmIsCompositionEnabled()) { m_glassMargins = null; } else { InitializeAeroGlass(); } break; } }
protected override void OnPaint(PaintEventArgs e) { if (Width < 1 && Height < 1) { return; } Graphics g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; if (DwmApi.DwmIsCompositionEnabled()) { g.Clear(Color.Transparent); } else { g.Clear(SystemColors.ControlLightLight); } Rectangle border = Rectangle.FromLTRB(0, 0, Width - 1, Height - 1); using (GraphicsPath roundBorderPath = RoundedRectangle.Create(border)) { if (isDown || (isChecked && checkAble)) { using (LinearGradientBrush gradientBrush = new LinearGradientBrush(border, downColor[0], downColor[1], LinearGradientMode.Vertical)) { g.FillPath(gradientBrush, roundBorderPath); } } else { using (LinearGradientBrush gradientBrush = new LinearGradientBrush(border, normalColor[0], normalColor[1], LinearGradientMode.Vertical)) { g.FillPath(gradientBrush, roundBorderPath); } } if (isHovering) { using (Pen p = new Pen(Color.FromArgb(80, SystemColors.Highlight), 3)) { g.DrawPath(p, roundBorderPath); } using (Pen p = new Pen(Color.FromArgb(150, SystemColors.Highlight), 1)) { g.DrawPath(p, roundBorderPath); } } else { using (Pen p = new Pen(Color.FromArgb(80, BorderColor), 2)) { g.DrawPath(p, roundBorderPath); } using (Pen p = new Pen(Color.FromArgb(150, BorderColor), 1)) { g.DrawPath(p, roundBorderPath); } } } g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; TextFormatFlags tff = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter | TextFormatFlags.SingleLine | TextFormatFlags.NoPrefix; if (DwmApi.DwmIsCompositionEnabled()) { DrawTextOnGlass(g, Text, Font, ClientRectangle, ForeColor, tff); } else { TextRenderer.DrawText(g, Text, Font, ClientRectangle, ForeColor, tff); } }
internal void DrawControl(Graphics g) { if (DwmApi.DwmIsCompositionEnabled()) { g.Clear(Color.Transparent); } else { g.Clear(SystemColors.ControlLightLight); } if (TabCount > 0) { g.FillRectangle(Brushes.White, GetTabRect(0).X, GetTabRect(0).Bottom, ClientRectangle.Width, ClientRectangle.Height); Rectangle contentRect = Rectangle.FromLTRB(ClientRectangle.X, GetTabRect(0).Bottom, ClientRectangle.Right - 1, ClientRectangle.Bottom - 1); g.DrawRectangle(Pens.Gray, contentRect); } for (int i = 0; i < TabCount; i++) { TabPage tab = TabPages[i]; Rectangle tabRect = GetTabRect(i); tabRect.Inflate(-2, 0); //draw shadow Rectangle shadowRect = tabRect; shadowRect.Offset(2, 2); using (GraphicsPath path = CreateCompleteTabPath(shadowRect)) { Rectangle tabBar = Rectangle.FromLTRB(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Right, tabRect.Bottom); Region region = g.Clip; g.SetClip(tabBar); SolidBrush shadow = new SolidBrush(Color.FromArgb(100, Color.Gray)); g.FillPath(shadow, path); g.Clip = region; } if (tab == SelectedTab) { using (GraphicsPath path = CreateTabPath(tabRect)) { g.SmoothingMode = SmoothingMode.AntiAlias; g.FillPath(Brushes.White, path); g.DrawPath(Pens.Gray, path); } Rectangle fillRect = tabRect; fillRect.Offset(0, 2); using (GraphicsPath path = CreateCompleteTabPath(fillRect)) { g.FillPath(Brushes.White, path); } } else { using (GraphicsPath path = CreateCompleteTabPath(tabRect)) { g.SmoothingMode = SmoothingMode.AntiAlias; g.FillPath(Brushes.White, path); g.DrawPath(Pens.Gray, path); } } if (i == mouseIsOn) { using (GraphicsPath path = CreateTabPath(tabRect)) { using (Pen p = new Pen(Color.FromArgb(80, SystemColors.Highlight))) { p.Width = 4; g.DrawPath(p, path); } using (Pen p = new Pen(Color.FromArgb(150, SystemColors.Highlight))) { p.Width = 2; g.DrawPath(p, path); } } } StringFormat stringFormat = new StringFormat(); stringFormat.Alignment = StringAlignment.Center; stringFormat.LineAlignment = StringAlignment.Center; g.DrawString(tab.Text, tab.Font, new SolidBrush(tab.ForeColor), tabRect, stringFormat); } }