Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
textout.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 9k
Category:
Windows Kernel
Development Platform:
Visual C++
- /*
- **------------------------------------------------------------------------------
- ** Module: Disk Cleanup Applet
- ** File: textout.cpp
- **
- ** Purpose: Print functions
- ** Notes:
- ** Mod Log: Created by Jason Cobb (2/97)
- **
- ** Copyright (c)1997 Microsoft Corporation, All Rights Reserved
- **------------------------------------------------------------------------------
- */
- /*
- **------------------------------------------------------------------------------
- ** Project include files
- **------------------------------------------------------------------------------
- */
- #include "common.h"
- #include "textout.h"
- /*
- * DEFINITIONS ________________________________________________________________
- *
- */
- typedef struct
- {
- HWND hWnd;
- LONG style;
- TCHAR *pszText; // Buffer for text
- size_t cbMaxText; // Length of text buffer
- HFONT hf; // Current font
- HBITMAP bmp; // Off-screen bitmap for NO FLICKER
- RECT rBmp; // Size of 'bmp'
- } TextOutInfo;
- /*
- * VARIABLES __________________________________________________________________
- *
- */
- static HINSTANCE l_hInst = NULL;
- /*
- * PROTOTYPES _________________________________________________________________
- *
- */
- LRESULT APIENTRY TextOutProc (HWND, UINT, WPARAM, LPARAM);
- void TextOutPaint (TextOutInfo *, HDC, RECT *);
- BOOL TextOutMakeBitmap (TextOutInfo *);
- BOOL TextOutSetText (TextOutInfo *, LPCTSTR);
- void TextOutRedraw (TextOutInfo *, BOOL = TRUE);
- /*
- * ROUTINES ___________________________________________________________________
- *
- */
- /*
- void RegisterTextOutClass (HINSTANCE hInst)
- {
- WNDCLASS wc;
- if (hInst == NULL)
- return;
- l_hInst = hInst;
- wc.style = 0;
- wc.lpfnWndProc = TextOutProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = sizeof (void *);
- wc.hInstance = hInst;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor (NULL, IDC_ARROW);
- wc.hbrBackground = NULL;
- wc.lpszMenuName = NULL;
- wc.lpszClassName = szTextOutCLASS;
- RegisterClass (&wc);
- }
- void UnregisterTextOutClass (void)
- {
- // Unregister from windows
- if (l_hInst)
- UnregisterClass (szTextOutCLASS, l_hInst);
- l_hInst = NULL;
- }
- LRESULT APIENTRY TextOutProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
- {
- TextOutInfo *ptoi;
- PAINTSTRUCT ps;
- HDC hdc;
- if (msg == WM_CREATE)
- {
- if ((ptoi = (TextOutInfo *)GlobalAlloc (GMEM_FIXED, sizeof(*ptoi))) == 0)
- {
- //OutOfMemory();
- return -1;
- }
- SetWindowLongPtr (hWnd, 0, (LPARAM)ptoi);
- ptoi->hWnd = hWnd;
- ptoi->style = ((LPCREATESTRUCT)lp)->style;
- ptoi->pszText = NULL;
- ptoi->cbMaxText = 0;
- ptoi->hf = (HFONT) GetStockObject (DEFAULT_GUI_FONT);
- ptoi->bmp = NULL;
- if (!TextOutMakeBitmap (ptoi))
- return -1;
- if (!TextOutSetText (ptoi, ((LPCREATESTRUCT)lp)->lpszName ))
- return -1;
- TextOutRedraw (ptoi);
- }
- else if ((ptoi = (TextOutInfo *)GetWindowLongPtr (hWnd, 0)) == NULL)
- {
- return DefWindowProc (hWnd, msg, wp, lp);
- }
- switch (msg)
- {
- case WM_DESTROY: if (ptoi->pszText != NULL)
- GlobalFree (ptoi->pszText);
- if (ptoi->bmp != NULL)
- DeleteObject (ptoi->bmp);
- GlobalFree (ptoi);
- SetWindowLongPtr (hWnd, 0, 0L);
- break;
- case WM_USER: TextOutRedraw (ptoi, FALSE);
- break;
- case WM_PAINT: hdc = BeginPaint (hWnd, &ps);
- TextOutPaint (ptoi, hdc, &ps.rcPaint);
- EndPaint (hWnd, &ps);
- return 0;
- break;
- case WM_SETTEXT: TextOutSetText (ptoi, (LPCTSTR)lp);
- TextOutRedraw (ptoi);
- break;
- case WM_GETFONT: return (LRESULT)ptoi->hf;
- break;
- case WM_SETFONT: if ((ptoi->hf = (HFONT)wp) == NULL)
- {
- ptoi->hf = (HFONT) GetStockObject (DEFAULT_GUI_FONT);
- }
- if (LOWORD(lp) != 0)
- {
- TextOutRedraw (ptoi);
- }
- break;
- case WM_SIZE: TextOutMakeBitmap (ptoi);
- break;
- case WM_ERASEBKGND:
- return (LRESULT)1;
- break;
- }
- return DefWindowProc (hWnd, msg, wp, lp);
- }
- void TextOutPaint (TextOutInfo *ptoi, HDC hdcTrg, RECT *pr)
- {
- RECT r;
- HDC hdcSrc;
- HBITMAP bmpSrc;
- if (ptoi->bmp == NULL) // No bitmap?
- return; // No paint.
- if (pr == NULL)
- {
- GetClientRect (ptoi->hWnd, pr = &r);
- }
- hdcSrc = CreateCompatibleDC (hdcTrg);
- bmpSrc = (HBITMAP) SelectObject (hdcSrc, (HGDIOBJ)ptoi->bmp);
- BitBlt (hdcTrg, pr->left, pr->top, pr->right -pr->left, pr->bottom -pr->top,
- hdcSrc, pr->left, pr->top, SRCCOPY);
- SelectObject (hdcSrc, (HGDIOBJ)bmpSrc);
- DeleteDC (hdcSrc);
- }
- BOOL TextOutMakeBitmap (TextOutInfo *ptoi)
- {
- HDC hdc, hdcMem;
- RECT r;
- GetClientRect (ptoi->hWnd, &r);
- if (ptoi->bmp != NULL)
- {
- if ( ((ptoi->rBmp.right - ptoi->rBmp.left) > (r.right - r.left)) ||
- ((ptoi->rBmp.bottom - ptoi->rBmp.top) > (r.bottom - r.top)) )
- {
- DeleteObject (ptoi->bmp);
- ptoi->bmp = NULL;
- }
- }
- if (ptoi->bmp == NULL)
- {
- hdc = GetDC (ptoi->hWnd);
- hdcMem = CreateCompatibleDC (hdc);
- ptoi->bmp = CreateCompatibleBitmap (hdc, r.right, r.bottom);
- ptoi->rBmp = r;
- DeleteDC (hdcMem);
- ReleaseDC (ptoi->hWnd, hdc);
- }
- if (ptoi->bmp == NULL)
- {
- //OutOfMemory();
- return FALSE;
- }
- return TRUE;
- }
- BOOL TextOutSetText (TextOutInfo *ptoi, LPCTSTR psz)
- {
- size_t cb;
- if (psz == NULL)
- {
- if (ptoi->pszText != NULL)
- ptoi->pszText[0] = 0;
- return TRUE;
- }
- cb = 1+ lstrlen(psz);
- if (cb > (ptoi->cbMaxText))
- {
- if (ptoi->pszText != NULL)
- {
- GlobalFree (ptoi->pszText);
- ptoi->pszText = NULL;
- }
- if ((ptoi->pszText = (TCHAR *)GlobalAlloc (GMEM_FIXED, cb * sizeof( TCHAR ))) == NULL)
- {
- ptoi->cbMaxText = 0;
- //OutOfMemory();
- return FALSE;
- }
- ptoi->cbMaxText = cb;
- }
- StrCpy(ptoi->pszText, psz);
- return TRUE;
- }
- void TextOutRedraw (TextOutInfo *ptoi, BOOL fRepaint)
- {
- HBRUSH hbr;
- HDC hdc, hdcMem;
- HBITMAP bmpOld;
- RECT r;
- WPARAM wp;
- LPARAM lp;
- HFONT hfOld = NULL;
- if (ptoi->bmp == NULL)
- return;
- hdc = GetDC (ptoi->hWnd);
- hdcMem = CreateCompatibleDC (hdc);
- bmpOld = (HBITMAP) SelectObject (hdcMem, (HGDIOBJ)ptoi->bmp);
- wp = (WPARAM)hdcMem;
- lp = (LPARAM)ptoi->hWnd;
- hbr = (HBRUSH)SendMessage (GetParent(ptoi->hWnd), WM_CTLCOLORSTATIC, wp,lp);
- if (hbr == NULL)
- {
- SetTextColor (hdc, GetSysColor (COLOR_BTNTEXT));
- SetBkColor (hdc, GetSysColor (COLOR_BTNFACE));
- hbr = CreateSolidBrush (GetSysColor (COLOR_BTNFACE));
- }
- GetClientRect (ptoi->hWnd, &r);
- FillRect (hdcMem, &r, hbr);
- if (ptoi->pszText != NULL)
- {
- if (ptoi->hf != NULL)
- hfOld = (HFONT) SelectObject (hdcMem, ptoi->hf);
- UINT fDrawFlags = DT_EXPANDTABS | DT_WORDBREAK;
- if (ptoi->style & SS_RIGHT)
- fDrawFlags |= DT_RIGHT;
- else if (ptoi->style & SS_CENTER)
- fDrawFlags |= DT_CENTER;
- else
- fDrawFlags |= DT_LEFT;
- DrawText ( hdcMem,
- ptoi->pszText,
- lstrlen(ptoi->pszText),
- &r,
- fDrawFlags );
- if (hfOld != NULL)
- SelectObject (hdcMem, hfOld);
- }
- DeleteObject (hbr);
- SelectObject (hdcMem, bmpOld);
- DeleteDC (hdcMem);
- ReleaseDC (ptoi->hWnd, hdc);
- if (fRepaint)
- {
- InvalidateRect (ptoi->hWnd, NULL, TRUE);
- UpdateWindow (ptoi->hWnd);
- }
- }
- */