![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Welcome to Vista Forums we are your forum to discuss Windows Vista x64 and x86 systems. Whether you need help or just want to post an idea you have on Vista, this is the forum for you.
br>
|
|
|||||||
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 | ||
|
Guest
Posts: n/a
|
Hi - I just wondered, if there is anything simpler than this?
Thanks, Jan public void DrawTextOnGlass(IntPtr hwnd, String text, Font font, Rectangle ctlrct, int iglowSize) { if (IsCompositionEnabled()) { RECT rc = new RECT(); RECT rc2 = new RECT(); rc.left = ctlrct.Left; rc.right = ctlrct.Right + 2 * iglowSize; //make it larger to contain the glow effect rc.top = ctlrct.Top; rc.bottom = ctlrct.Bottom + 2 * iglowSize; //Just the same rect with rc,but (0,0) at the lefttop rc2.left = 0; rc2.top = 0; rc2.right = rc.right - rc.left; rc2.bottom = rc.bottom - rc.top; IntPtr destdc = GetDC(hwnd); //hwnd must be the handle of form,not control IntPtr Memdc = CreateCompatibleDC(destdc); // Set up a memory DC where we'll draw the text. IntPtr bitmap; IntPtr bitmapOld = IntPtr.Zero; IntPtr logfnotOld; int uFormat = DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_NOPREFIX; //text format BITMAPINFO dib = new BITMAPINFO(); dib.bmiHeader.biHeight = -(rc.bottom - rc.top); // negative because DrawThemeTextEx() uses a top-down DIB dib.bmiHeader.biWidth = rc.right - rc.left; dib.bmiHeader.biPlanes = 1; dib.bmiHeader.biSize = Marshal.SizeOf(typeof(BITMAPINFOHEADER)); dib.bmiHeader.biBitCount = 32; dib.bmiHeader.biCompression = BI_RGB; if (!(SaveDC(Memdc) == 0)) { bitmap = CreateDIBSection(Memdc, ref dib, DIB_RGB_COLORS, 0, IntPtr.Zero, 0); // Create a 32-bit bmp for use in offscreen drawing when glass is on if (!(bitmap == IntPtr.Zero)) { bitmapOld = SelectObject(Memdc, bitmap); IntPtr hFont = font.ToHfont(); logfnotOld = SelectObject(Memdc, hFont); try { System.Windows.Forms.VisualStyles.VisualStyleRenderer renderer = new System.Windows.Forms.VisualStyles.VisualStyleRenderer(System.Windows.Forms.VisualStyles.VisualStyleElement.Window.Caption.Active); DTTOPTS dttOpts = new DTTOPTS(); dttOpts.dwSize = (uint)Marshal.SizeOf(typeof(DTTOPTS)); dttOpts.dwFlags = DTT_COMPOSITED | DTT_GLOWSIZE; dttOpts.iGlowSize = iglowSize; DrawThemeTextEx(renderer.Handle, Memdc, 0, 0, text, -1, uFormat, ref rc2, ref dttOpts); BitBlt(destdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, Memdc, 0, 0, SRCCOPY); } catch (Exception e) { Trace.WriteLine(e.Message); } //Remember to clean up SelectObject(Memdc, bitmapOld); SelectObject(Memdc, logfnotOld); DeleteObject(bitmap); DeleteObject(hFont); ReleaseDC(Memdc, -1); DeleteDC(Memdc); } } } |
||
|
|
|
|
|
|
#2 | ||
|
Guest
Posts: n/a
|
There is not more managed way to draw window caption? Without bitblts?
Jan "Jan Kucera" <kucera@lupacovka.cz> wrote in message news:F6579CA6-50D0-436D-95F4-7769168D1CFF@microsoft.com... > Hi - I just wondered, if there is anything simpler than this? > Thanks, Jan > > > public void DrawTextOnGlass(IntPtr hwnd, String text, Font font, Rectangle > ctlrct, int iglowSize) > { > if (IsCompositionEnabled()) > { > RECT rc = new RECT(); > RECT rc2 = new RECT(); > rc.left = ctlrct.Left; > rc.right = ctlrct.Right + 2 * iglowSize; //make it larger to > contain the glow effect > rc.top = ctlrct.Top; > rc.bottom = ctlrct.Bottom + 2 * iglowSize; > //Just the same rect with rc,but (0,0) at the lefttop > rc2.left = 0; > rc2.top = 0; > rc2.right = rc.right - rc.left; > rc2.bottom = rc.bottom - rc.top; > IntPtr destdc = GetDC(hwnd); //hwnd must be the handle of form,not > control > IntPtr Memdc = CreateCompatibleDC(destdc); // Set up a memory DC > where we'll draw the text. > IntPtr bitmap; > IntPtr bitmapOld = IntPtr.Zero; > IntPtr logfnotOld; > int uFormat = DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_NOPREFIX; > //text format > BITMAPINFO dib = new BITMAPINFO(); > dib.bmiHeader.biHeight = -(rc.bottom - rc.top); // negative because > DrawThemeTextEx() uses a top-down DIB > dib.bmiHeader.biWidth = rc.right - rc.left; > dib.bmiHeader.biPlanes = 1; > dib.bmiHeader.biSize = Marshal.SizeOf(typeof(BITMAPINFOHEADER)); > dib.bmiHeader.biBitCount = 32; > dib.bmiHeader.biCompression = BI_RGB; > if (!(SaveDC(Memdc) == 0)) > { > bitmap = CreateDIBSection(Memdc, ref dib, DIB_RGB_COLORS, 0, > IntPtr.Zero, 0); // Create a 32-bit bmp for use in offscreen drawing when > glass is on > if (!(bitmap == IntPtr.Zero)) > { > bitmapOld = SelectObject(Memdc, bitmap); > IntPtr hFont = font.ToHfont(); > logfnotOld = SelectObject(Memdc, hFont); > try > { > System.Windows.Forms.VisualStyles.VisualStyleRenderer > renderer = new > System.Windows.Forms.VisualStyles.VisualStyleRenderer(System.Windows.Forms.VisualStyles.VisualStyleElement.Window.Caption.Active); > DTTOPTS dttOpts = new DTTOPTS(); > dttOpts.dwSize = (uint)Marshal.SizeOf(typeof(DTTOPTS)); > dttOpts.dwFlags = DTT_COMPOSITED | DTT_GLOWSIZE; > dttOpts.iGlowSize = iglowSize; > DrawThemeTextEx(renderer.Handle, Memdc, 0, 0, text, -1, > uFormat, ref rc2, ref dttOpts); > BitBlt(destdc, rc.left, rc.top, rc.right - rc.left, > rc.bottom - rc.top, Memdc, 0, 0, SRCCOPY); > } > catch (Exception e) > { > Trace.WriteLine(e.Message); > } > > //Remember to clean up > SelectObject(Memdc, bitmapOld); > SelectObject(Memdc, logfnotOld); > DeleteObject(bitmap); > DeleteObject(hFont); > ReleaseDC(Memdc, -1); > DeleteDC(Memdc); > } > } > } > |
||
|
|
|
|
|
![]() |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| .NET 3.0 problems | =?Utf-8?B?TUNTRQ==?= | Vista installation & setup | 1 | 10-03-2006 07:17 PM |
| .NET problem and installing programs | Beck | Vista General | 0 | 08-30-2006 01:32 PM |
| Installing Visual Studio .NET 2003 on Vista Build 5456 | =?Utf-8?B?SmFtZXMgU2ltcHNvbg==?= | Vista General | 1 | 07-17-2006 11:00 AM |
| .NET Framework catch-22 | Richard Helms | Vista General | 1 | 06-12-2006 05:41 PM |