|
|
/*
CFileWindow.CPP
File window class
*/
#include "stdafx.h"
#include <commdlg.h>
#include "resource.h"
#include "cfilewindow.h"
#define BUFFER_GROW_SIZE 1024
#define CURSOR_BLINK 1000
#define LEFT_MARGIN_SIZE 40
#define MIN( _arg1, _arg2 ) (( _arg1 < _arg2 ? _arg1 : _arg2 ))
#define MAX( _arg1, _arg2 ) (( _arg1 > _arg2 ? _arg1 : _arg2 ))
#define DUMP_RECT( _rect ) { TCHAR sz[MAX_PATH]; wsprintf( sz, "( L%u, %T%u, R%u, B%u )", _rect.left, _rect.top, _rect.right, _rect.bottom ); OutputDebugString( sz ); }
//#define DEBUG_PAINT
//
// Constructor
//
CFileWindow::CFileWindow( HWND hParent ) { TCHAR szTitle[ MAX_PATH ];
_hParent = hParent; _pszFilename = NULL; _nLength = 0; _pLine = NULL;
LoadString( g_hInstance, IDS_UNTITLED, szTitle, sizeof(szTitle)/sizeof(szTitle[0]) );
_hWnd = CreateWindowEx( WS_EX_ACCEPTFILES, CFILEWINDOWCLASS, szTitle, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, g_hInstance, (LPVOID) this); if (!_hWnd) { return; }
ShowWindow( _hWnd, SW_NORMAL ); UpdateWindow( _hWnd ); }
//
// Destructor
//
CFileWindow::~CFileWindow( ) { if ( _pszFilename ) LocalFree( _pszFilename );
if ( _pLine ) LocalFree( _pLine ); }
//
// _UpdateTitle( )
//
HRESULT CFileWindow::_UpdateTitle( ) { TCHAR szTitleBar[ MAX_PATH * 2 ]; LPTSTR pszTitle;
if ( _pszFilename ) { pszTitle = strrchr( _pszFilename, TEXT('\\') ); if ( pszTitle ) { INT iResult; TCHAR ch; TCHAR szCWD[ MAX_PATH ];
GetCurrentDirectory( MAX_PATH, szCWD );
ch = *pszTitle; // save
*pszTitle = 0; // terminate
iResult = strcmp( szCWD, _pszFilename );// compare
*pszTitle = ch; // restore
pszTitle++; // skip past the slash
if ( iResult != 0 ) { pszTitle = _pszFilename; } } else { pszTitle = _pszFilename; }
strcpy( szTitleBar, pszTitle ); } else { LoadString( g_hInstance, IDS_UNTITLED, szTitleBar, sizeof(szTitleBar)/sizeof(szTitleBar[0]) ); }
SetWindowText( _hWnd, szTitleBar );
return S_OK; }
//
// SetInformation( )
//
HRESULT CFileWindow::SetInformation( ULONG nNode, LPTSTR pszFilename, LINEPOINTER * pLineBuffer, ULONG nLineCount ) { SCROLLINFO si;
if ( pszFilename ) { if ( _pszFilename ) LocalFree( _pszFilename );
_pszFilename = pszFilename; _UpdateTitle( ); }
_nNode = nNode; _pLine = pLineBuffer; _nLineCount = nLineCount;
if ( !_fVertSBVisible && _yWindow < (LONG)(_nLineCount * _tm.tmHeight) ) { _fVertSBVisible = TRUE; EnableScrollBar( _hWnd, SB_VERT, ESB_ENABLE_BOTH ); ShowScrollBar( _hWnd, SB_VERT, TRUE ); } else if ( _fVertSBVisible && _yWindow >= (LONG)(_nLineCount * _tm.tmHeight) ) { _fVertSBVisible = FALSE; //EnableScrollBar( _hWnd, SB_VERT, ESB_ENABLE_BOTH );
ShowScrollBar( _hWnd, SB_VERT, FALSE ); }
si.cbSize = sizeof(si); si.fMask = SIF_RANGE; si.nMin = 0; si.nMax = _nLineCount; SetScrollInfo( _hWnd, SB_VERT, &si, TRUE );
InvalidateRect( _hWnd, NULL, TRUE );
return S_OK; }
//
// _OnPaint( )
//
LRESULT CFileWindow::_OnPaint( WPARAM wParam, LPARAM lParam ) { HDC hdc; TCHAR szBuf[ 6 ]; // max 5-digits
LONG y; LONG wx; // window coords
LONG wy; RECT rect; RECT rectResult; SIZE size; LPTSTR pszStartLine; // beginning of line (PID/TID)
LPTSTR pszStartTimeDate; // beginning of time/data stamp
LPTSTR pszStartComponent; // beginning of component name
LPTSTR pszStartResType; // beginning of a resource component
LPTSTR pszStartText; // beginning of text
LPTSTR pszCurrent; // current position and beginning of text
SCROLLINFO si; PAINTSTRUCT ps;
#if 0
#if defined(_DEBUG)
static DWORD cPaint = 0; { TCHAR szBuf[ MAX_PATH ]; wsprintf( szBuf, "%u paint\n", ++cPaint ); OutputDebugString( szBuf ); } #endif
#endif
si.cbSize = sizeof(si); si.fMask = SIF_POS | SIF_PAGE; GetScrollInfo( _hWnd, SB_VERT, &si );
hdc = BeginPaint( _hWnd, &ps);
if ( !_pLine ) goto EndPaint;
SetBkMode( hdc, OPAQUE ); SelectObject( hdc, g_hFont );
y = si.nPos;
wy = 0; while ( y <= (LONG)(si.nPos + si.nPage) && y < _nLineCount ) { // draw line number
SetRect( &rect, 0, wy, LEFT_MARGIN_SIZE, wy + _tm.tmHeight ); if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { //FillRect( hdc, &rect, g_pConfig->GetMarginColor( ) );
SetBkColor( hdc, GetSysColor( COLOR_GRAYTEXT ) ); SetTextColor( hdc, GetSysColor( COLOR_WINDOWTEXT ) );
DrawText( hdc, szBuf, wsprintf( szBuf, TEXT("%05.5u"), y ), &rect, DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE ); }
wx = LEFT_MARGIN_SIZE;
if ( _pLine[ y ].psLine ) {
//
// KB: This is what a typical cluster log line looks like.
// 3fc.268::1999/07/19-19:14:45.548 [EVT] Node up: 2, new UpNodeSet: 0002
// 3fc.268::1999/07/19-19:14:45.548 [EVT] EvOnline : calling ElfRegisterClusterSvc
// 3fc.268::1999/07/19-19:14:45.548 [GUM] GumSendUpdate: queuing update type 2 context 19
// 3fc.268::1999/07/19-19:14:45.548 [GUM] GumSendUpdate: Dispatching seq 2585 type 2 context 19 to node 1
// 3fc.268::1999/07/19-19:14:45.548 [NM] Received update to set extended state for node 1 to 0
// 3fc.268::1999/07/19-19:14:45.548 [NM] Issuing event 0.
// 3fc.268::1999/07/19-19:14:45.548 [GUM] GumSendUpdate: completed update seq 2585 type 2 context 19
// 37c.3a0::1999/07/19-19:14:45.548 Physical Disk: AddVolume : \\?\Volume{99d8d508-39fa-11d3-a200-806d6172696f}\ 'C', 7 (11041600)
// 37c.3a0::1999/07/19-19:14:45.558 Physical Disk: AddVolume: GetPartitionInfo(\??\Volume{99d8d503-39fa-11d3-a200-806d6172696f}), error 170
// 37c.3a0::1999/07/19-19:14:45.568 Physical Disk: AddVolume: GetPartitionInfo(\??\Volume{99d8d504-39fa-11d3-a200-806d6172696f}), error 170
// 37c.3a0::1999/07/19-19:14:45.568 Physical Disk: AddVolume: GetPartitionInfo(\??\Volume{99d8d505-39fa-11d3-a200-806d6172696f}), error 170
// 37c.3a0::1999/07/19-19:14:45.578 Physical Disk: AddVolume: GetPartitionInfo(\??\Volume{99d8d506-39fa-11d3-a200-806d6172696f}), error 170
// 37c.3a0::1999/07/19-19:14:45.578 Physical Disk: AddVolume: GetPartitionInfo(\??\Volume{99d8d501-39fa-11d3-a200-806d6172696f}), error 1
//
if ( _pLine[ y ].nFile != _nNode ) goto SkipLine;
pszStartResType = pszStartComponent = NULL; pszStartLine = pszStartText = pszStartTimeDate = pszCurrent = _pLine[ y ].psLine;
// Find the thread and process IDs
while ( *pszCurrent && *pszCurrent != ':' && *pszCurrent >= 32 ) { pszCurrent++; } if ( *pszCurrent < 32 ) goto DrawRestOfLine;
pszCurrent++; if ( *pszCurrent != ':' ) goto DrawRestOfLine;
pszCurrent++;
// Find Time/Date stamp which is:
// ####/##/##-##:##:##.###<space>
pszStartTimeDate = pszCurrent;
while ( *pszCurrent && *pszCurrent != ' ' && *pszCurrent >= 32 ) { pszCurrent++; } if ( *pszCurrent < 32 ) goto DrawRestOfLine;
pszCurrent++;
pszStartText = pszCurrent;
// [OPTIONAL] Cluster component which looks like:
// [<id...>]
if ( *pszCurrent == '[' ) { while ( *pszCurrent && *pszCurrent != ']' && *pszCurrent >= 32 ) { pszCurrent++; } if ( *pszCurrent < 32 ) goto NoComponentTryResouce;
pszCurrent++;
pszStartComponent = pszStartText; pszStartText = pszCurrent; } else { // [OPTIONAL] If not a component, see if there is a res type
NoComponentTryResouce: pszCurrent = pszStartText;
while ( *pszCurrent && *pszCurrent != ':' && *pszCurrent >= 32 ) { pszCurrent++; }
if ( *pszCurrent >= 32 ) { pszCurrent++;
pszStartResType = pszStartText; pszStartText = pszCurrent; } }
if ( pszStartComponent ) { DWORD n = 0; LONG nLen = pszStartText - pszStartComponent - 2; LPTSTR psz = g_pszFilters; while ( n < g_nComponentFilters ) { if ( g_pfSelectedComponent[ n ] && ( nLen == lstrlen( psz ) ) && ( _strnicmp( pszStartComponent + 1, psz, nLen ) == 0 ) ) goto SkipLine;
while ( *psz ) { psz++; } psz += 2;
n++; } } #if 0
if ( pszStartResType ) { if ( !g_fNetworkName && _strnicmp( pszStartResType, "Network Name", sizeof("Network Name") - 1 ) == 0 ) goto SkipLine; if ( !g_fGenericService && _strnicmp( pszStartResType, "Generic Service", sizeof("Generic Service") - 1 ) == 0 ) goto SkipLine; if ( !g_fPhysicalDisk && _strnicmp( pszStartResType, "Physical Disk", sizeof("Physical Disk") - 1 ) == 0 ) goto SkipLine; if ( !g_fIPAddress && _strnicmp( pszStartResType, "IP Address", sizeof("IP Address") - 1 ) == 0 ) goto SkipLine; if ( !g_fGenericApplication && _strnicmp( pszStartResType, "Generic Application", sizeof("Generic Application") - 1 ) == 0 ) goto SkipLine; if ( !g_fFileShare && _strnicmp( pszStartResType, "File Share", sizeof("File Share") - 1 ) == 0 ) goto SkipLine; } #endif
// Draw PID and TID
GetTextExtentPoint32( hdc, pszStartLine, pszStartTimeDate - pszStartLine - 2, &size );
SetRect( &rect, wx, wy, wx + size.cx, wy + _tm.tmHeight );
if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { SetBkColor( hdc, 0xFF8080 ); SetTextColor( hdc, 0x000000 );
DrawText( hdc, pszStartLine, pszStartTimeDate - pszStartLine - 2, &rect, DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE ); }
wx += size.cx;
GetTextExtentPoint32( hdc, "::", 2, &size );
SetRect( &rect, wx, wy, wx + size.cx, wy + _tm.tmHeight );
if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { SetBkColor( hdc, 0xFFFFFF ); SetTextColor( hdc, 0x000000 );
DrawText( hdc, "::", 2, &rect, DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE ); }
wx += size.cx;
// Draw Time/Date
pszCurrent = ( pszStartComponent ? pszStartComponent : ( pszStartResType ? pszStartResType : pszStartText ) ) - 1; GetTextExtentPoint32( hdc, pszStartTimeDate, pszCurrent - pszStartTimeDate, &size );
SetRect( &rect, wx, wy, wx + size.cx, wy + _tm.tmHeight );
if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { SetBkColor( hdc, 0x80FF80 ); SetTextColor( hdc, 0x000000 );
DrawText( hdc, pszStartTimeDate, pszCurrent - pszStartTimeDate, &rect, DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE ); }
wx += size.cx;
// Draw component
if ( pszStartComponent ) { GetTextExtentPoint32( hdc, pszStartComponent, pszStartText - pszStartComponent, &size );
SetRect( &rect, wx, wy, wx + size.cx, wy + _tm.tmHeight );
if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { SetBkColor( hdc, GetSysColor( COLOR_WINDOW ) ); SetTextColor( hdc, 0x800000 );
DrawText( hdc, pszStartComponent, pszStartText - pszStartComponent, &rect, DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE ); }
wx += size.cx; }
if ( pszStartResType ) { GetTextExtentPoint32( hdc, pszStartResType, pszStartText - pszStartResType, &size );
SetRect( &rect, wx, wy, wx + size.cx, wy + _tm.tmHeight );
if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { SetBkColor( hdc, GetSysColor( COLOR_WINDOW ) ); SetTextColor( hdc, 0x008000 );
DrawText( hdc, pszStartResType, pszStartText - pszStartResType, &rect, DT_NOCLIP | DT_NOPREFIX | DT_SINGLELINE ); }
wx += size.cx; }
DrawRestOfLine: pszCurrent = pszStartText;
while ( *pszCurrent && *pszCurrent != 13 ) { pszCurrent++; }
GetTextExtentPoint32( hdc, pszStartText, pszCurrent - pszStartText, &size );
SetRect( &rect, wx, wy, wx + size.cx, wy + _tm.tmHeight );
if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { SetBkColor( hdc, GetSysColor( COLOR_WINDOW ) ); SetTextColor( hdc, GetSysColor( COLOR_WINDOWTEXT ) );
DrawText( hdc, pszStartText, pszCurrent - pszStartText, &rect, DT_NOCLIP /*| DT_NOPREFIX */ | DT_SINGLELINE ); }
wx += size.cx; }
SkipLine: SetRect( &rect, wx, wy, _xWindow, wy + _tm.tmHeight ); if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { HBRUSH hBrush; hBrush = CreateSolidBrush( GetSysColor( COLOR_WINDOW ) ); FillRect( hdc, &rect, hBrush ); DeleteObject( hBrush ); }
wy += _tm.tmHeight; y++; }
SetRect( &rect, wx, wy, _xWindow, wy + _tm.tmHeight ); if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { HBRUSH hBrush; hBrush = CreateSolidBrush( GetSysColor( COLOR_WINDOW ) ); FillRect( hdc, &rect, hBrush ); DeleteObject( hBrush ); }
SetRect( &rect, 0, wy + _tm.tmHeight, LEFT_MARGIN_SIZE, _yWindow ); if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { HBRUSH hBrush; hBrush = CreateSolidBrush( GetSysColor( COLOR_GRAYTEXT ) ); FillRect( hdc, &rect, hBrush ); DeleteObject( hBrush ); }
SetRect( &rect, LEFT_MARGIN_SIZE, wy + _tm.tmHeight, _xWindow, _yWindow ); if ( IntersectRect( &rectResult, &ps.rcPaint, &rect ) ) { HBRUSH hBrush; hBrush = CreateSolidBrush( GetSysColor( COLOR_WINDOW ) ); FillRect( hdc, &rect, hBrush ); DeleteObject( hBrush ); } EndPaint: EndPaint(_hWnd, &ps); return 0; }
//
// _OnCommand( )
//
LRESULT CFileWindow::_OnCommand( WPARAM wParam, LPARAM lParam ) { UINT cmd = LOWORD(wParam); switch ( cmd ) { // Pass these back up
case IDM_OPEN_FILE: return SendMessage( GetParent( GetParent( _hWnd ) ), WM_COMMAND, IDM_OPEN_FILE, 0 );
case IDM_NEW_FILE: return SendMessage( GetParent( GetParent( _hWnd ) ), WM_COMMAND, IDM_NEW_FILE, 0 );
default: break; } return DefWindowProc( _hWnd, WM_COMMAND, wParam, lParam); }
//
// _OnCloseWindow( )
//
LRESULT CFileWindow::_OnCloseWindow( ) { return 0; }
//
// _OnDestroyWindow( )
//
LRESULT CFileWindow::_OnDestroyWindow( ) { delete this; return 0; }
//
// _OnFocus( )
//
LRESULT CFileWindow::_OnFocus( WPARAM wParam, LPARAM lParam ) { return 0; }
//
// _OnKillFocus( )
//
LRESULT CFileWindow::_OnKillFocus( WPARAM wParam, LPARAM lParam ) { HideCaret( _hWnd ); DestroyCaret( ); return 0; }
//
// _OnTimer( )
//
LRESULT CFileWindow::_OnTimer( WPARAM wParam, LPARAM lParam ) { OutputDebugString( "Timer!\n" ); return 0; }
//
// _OnKeyUp( )
//
BOOL CFileWindow::_OnKeyUp( WPARAM wParam, LPARAM lParam ) { return FALSE; }
//
// _OnVerticalScroll( )
//
LRESULT CFileWindow::_OnVerticalScroll( WPARAM wParam, LPARAM lParam ) { SCROLLINFO si;
INT nScrollCode = LOWORD(wParam); // scroll bar value
INT nPos; //INT nPos = HIWORD(wParam); // scroll box position
//HWND hwndScrollBar = (HWND) lParam; // handle to scroll bar
si.cbSize = sizeof(si); si.fMask = SIF_ALL; GetScrollInfo( _hWnd, SB_VERT, &si );
nPos = si.nPos;
switch( nScrollCode ) { case SB_BOTTOM: si.nPos = si.nMax; break;
case SB_THUMBPOSITION: si.nPos = nPos; break;
case SB_THUMBTRACK: si.nPos = si.nTrackPos; break;
case SB_TOP: si.nPos = si.nMin; break;
case SB_LINEDOWN: si.nPos += 1; break;
case SB_LINEUP: si.nPos -= 1; break;
case SB_PAGEDOWN: si.nPos += si.nPage; break;
case SB_PAGEUP: si.nPos -= si.nPage; break; }
si.fMask = SIF_POS; SetScrollInfo( _hWnd, SB_VERT, &si, TRUE ); GetScrollInfo( _hWnd, SB_VERT, &si );
if ( si.nPos != nPos ) { ScrollWindowEx( _hWnd, 0, (nPos - si.nPos) * _tm.tmHeight, NULL, NULL, NULL, NULL, SW_INVALIDATE ); }
return 0; }
//
// _OnCreate( )
//
LRESULT CFileWindow::_OnCreate( HWND hwnd, LPCREATESTRUCT pcs ) { _hWnd = hwnd;
SetWindowLong( _hWnd, GWL_USERDATA, (LONG) this );
_UpdateTitle( );
return 0; }
//
// _OnSize( )
//
LRESULT CFileWindow::_OnSize( LPARAM lParam ) { HDC hdc; SIZE size; HGDIOBJ hObj; TCHAR szSpace[ 1 ] = { TEXT(' ') };
SCROLLINFO si;
_xWindow = LOWORD( lParam ); _yWindow = HIWORD( lParam ); hdc = GetDC( _hWnd ); hObj = SelectObject( hdc, g_hFont ); GetTextMetrics( hdc, &_tm );
GetTextExtentPoint32( hdc, szSpace, 1, &size ); _xSpace = size.cx;
si.cbSize = sizeof(si); si.fMask = SIF_RANGE | SIF_PAGE; si.nMin = 0; si.nMax = _nLineCount; si.nPage = _yWindow / _tm.tmHeight;
SetScrollInfo( _hWnd, SB_VERT, &si, FALSE );
// cleanup the HDC
SelectObject( hdc, hObj ); ReleaseDC( _hWnd, hdc );
return 0; }
//
// _OnMouseWheel( )
//
LRESULT CFileWindow::_OnMouseWheel( SHORT iDelta ) { if ( iDelta > 0 ) { SendMessage( _hWnd, WM_VSCROLL, SB_LINEUP, 0 ); SendMessage( _hWnd, WM_VSCROLL, SB_LINEUP, 0 ); SendMessage( _hWnd, WM_VSCROLL, SB_LINEUP, 0 ); } else if ( iDelta < 0 ) { SendMessage( _hWnd, WM_VSCROLL, SB_LINEDOWN, 0 ); SendMessage( _hWnd, WM_VSCROLL, SB_LINEDOWN, 0 ); SendMessage( _hWnd, WM_VSCROLL, SB_LINEDOWN, 0 ); } return 0; }
//
// WndProc( )
//
LRESULT CALLBACK CFileWindow::WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { CFileWindow * pfw = (CFileWindow *) GetWindowLong( hWnd, GWL_USERDATA );
if ( pfw != NULL ) { switch( uMsg ) { case WM_COMMAND: return pfw->_OnCommand( wParam, lParam );
case WM_PAINT: return pfw->_OnPaint( wParam, lParam );
case WM_CLOSE: return pfw->_OnCloseWindow( );
case WM_DESTROY: SetWindowLong( hWnd, GWL_USERDATA, NULL ); return pfw->_OnDestroyWindow( );
case WM_SETFOCUS: pfw->_OnFocus( wParam, lParam ); break; // don't return!
case WM_KILLFOCUS: return pfw->_OnKillFocus( wParam, lParam );
case WM_TIMER: return pfw->_OnTimer( wParam, lParam );
case WM_SIZE: return pfw->_OnSize( lParam );
case WM_KEYDOWN: case WM_SYSKEYDOWN: if ( pfw->_OnKeyDown( wParam, lParam ) ) return 0; break; // do default as well
case WM_KEYUP: case WM_SYSKEYUP: if ( pfw->_OnKeyUp( wParam, lParam ) ) return 0; break;
case WM_VSCROLL: return pfw->_OnVerticalScroll( wParam, lParam );
case WM_MOUSEWHEEL: return pfw->_OnMouseWheel( HIWORD(wParam) ); } }
if ( uMsg == WM_CREATE ) { LPCREATESTRUCT pcs = (LPCREATESTRUCT) lParam; //LPMDICREATESTRUCT pmdics = (LPMDICREATESTRUCT) pcs->lpCreateParams;
//pfw = (CFileWindow *) pmdics->lParam;
pfw = (CFileWindow *) pcs->lpCreateParams; return pfw->_OnCreate( hWnd, pcs ); }
if ( uMsg == WM_ERASEBKGND ) { RECT rect; RECT rectWnd; HDC hdc = (HDC) wParam; HBRUSH hBrush; #if defined(DEBUG_PAINT)
hBrush = CreateSolidBrush( 0xFF00FF ); #else
hBrush = CreateSolidBrush( GetSysColor( COLOR_GRAYTEXT ) ); #endif
GetClientRect( hWnd, &rectWnd ); SetRect( &rect, 0, 0, LEFT_MARGIN_SIZE, rectWnd.bottom ); FillRect( hdc, &rect, hBrush ); DeleteObject( hBrush ); #if defined(DEBUG_PAINT)
hBrush = CreateSolidBrush( 0xFF00FF ); #else
hBrush = CreateSolidBrush( GetSysColor( COLOR_WINDOW ) ); #endif
SetRect( &rect, LEFT_MARGIN_SIZE, 0, rectWnd.right, rectWnd.bottom );
FillRect( hdc, &rect, hBrush ); DeleteObject( hBrush );
return TRUE; }
return DefWindowProc( hWnd, uMsg, wParam, lParam ); }
|