Example #1
0
LRESULT PASCAL LineToolTipWndProc(HWND hWnd, register UINT uMsg, register WPARAM wParam, register LPARAM lParam)
{
	switch ( uMsg )
	{
		case WM_ERASEBKGND:
		{
			return 0;
		}
		
		case WM_SETFOCUS:
		{
			// don't want the focus
			SetFocus( ( HWND ) wParam );
			return 0;
		}
		case WM_PAINT:
		{
			RECT rc;
			GetClientRect( hWnd, &rc );

			PAINTSTRUCT ps;
			BeginPaint( hWnd, &ps );

			// draw the line tool tip
			CEditView *pView = (CEditView *)GetWindowLongPtr(hWnd, 0);
			HBRUSH hbr = CreateSolidBrush( GetSysColor( COLOR_INFOBK ) );
			FillRect( ps.hdc, &rc, hbr );
			DeleteObject( hbr );
			SetBkMode( ps.hdc, TRANSPARENT );
			LOGFONT lf;
			VERIFY( GetObject( GetStockObject( DEFAULT_GUI_FONT ), sizeof( lf ), &lf ) );
			lf.lfHeight = -MulDiv( 8, GetDeviceCaps( ps.hdc, LOGPIXELSY ), 72 );
			lf.lfWidth = 0;
			HFONT hFont = CreateFontIndirect( &lf );
			HFONT hOldFont = ( HFONT ) SelectObject( ps.hdc, hFont );
			TCHAR szTip[ 30 ];
			_tcscpy( szTip, LoadStringPtr( IDS_LINE_TIP_PREFIX ) );
			_itot( pView->GetTopIndex() + 1, szTip + 5, 10 );
			SetTextColor( ps.hdc, GetSysColor( COLOR_INFOTEXT ) );
			DrawText( ps.hdc, szTip, -1, &rc, DT_SINGLELINE | DT_VCENTER | DT_CENTER );
			SelectObject( ps.hdc, hOldFont );
			DeleteObject( hFont );
			EndPaint( hWnd, &ps );
			return 0;
		}
	}

	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
void GetHotKeyString( CM_HOTKEY &cmHotKey, LPTSTR psz )
{
	*psz = _T('\0');
	UINT nVirtKey = cmHotKey.nVirtKey1;
	BYTE byModifiers = cmHotKey.byModifiers1;
	BYTE byOrigModifiers = byModifiers;

	for ( int i = 0; nVirtKey && ( i < 2 ); i++ )
	{
		if ( !i || ( i && byModifiers != byOrigModifiers ) )
		{
			BOOL bAddPlus = FALSE;
			if ( HAS_FLAG( byModifiers, HOTKEYF_CONTROL ) )
			{
				_tcscat( psz, LoadStringPtr( IDS_CTRL ) );
				bAddPlus = TRUE;
			}
			if ( bAddPlus ) { _tcscat( psz, _T(" + ") ); bAddPlus = FALSE; }
			if ( HAS_FLAG( byModifiers, HOTKEYF_SHIFT ) )
			{
				_tcscat( psz, LoadStringPtr( IDS_SHIFT ) );
				bAddPlus = TRUE;
			}
			if ( bAddPlus ) { _tcscat( psz, _T(" + ") ); bAddPlus = FALSE; }
			if ( HAS_FLAG( byModifiers, HOTKEYF_ALT ) )
			{
				_tcscat( psz, LoadStringPtr( IDS_ALT ) );
				bAddPlus = TRUE;
			}
			if ( bAddPlus ) { _tcscat( psz, _T(" + ") ); bAddPlus = FALSE; }
		}

		if  ( nVirtKey )
		{
			LPTSTR pszChar = NULL;
			TCHAR szTemp[ 2 ];
			switch ( nVirtKey )
			{
				case VK_NUMLOCK:
				case VK_BACK:
				case VK_INSERT:
				case VK_DELETE:
				case VK_HOME:
				case VK_END:
				case VK_PRIOR:
				case VK_NEXT:
				case VK_LEFT:
				case VK_RIGHT:
				case VK_UP:
				case VK_DOWN:
				case VK_SCROLL:
				case VK_TAB:
				case VK_ESCAPE:
				case VK_RETURN:
				case VK_PAUSE:
				case VK_CANCEL:
				case VK_SPACE:
				case VK_F1:
				case VK_F2:
				case VK_F3:
				case VK_F4:
				case VK_F5:
				case VK_F6:
				case VK_F7:
				case VK_F8:
				case VK_F9:
				case VK_F10:
				case VK_F11:
				case VK_F12:
					{
					pszChar = ( LPTSTR ) LoadStringPtr( nVirtKey + VK_TO_STRING_OFFSET );
					break;
					}

				default:
				{
					if ( nVirtKey >= 0x60 && nVirtKey <= 0x6f )
					{
						_tcscat( psz, LoadStringPtr( IDS_NUM_KEY ) );
					}
					switch ( nVirtKey )
					{
						case 0xc0:			{ nVirtKey = _T('`'); break; }
						case 0x30:			{ nVirtKey = _T('0'); break; }
						case 0x31:			{ nVirtKey = _T('1'); break; }
						case 0x32:			{ nVirtKey = _T('2'); break; }
						case 0x33:			{ nVirtKey = _T('3'); break; }
						case 0x34:			{ nVirtKey = _T('4'); break; }
						case 0x35:			{ nVirtKey = _T('5'); break; }
						case 0x36:			{ nVirtKey = _T('6'); break; }
						case 0x37:			{ nVirtKey = _T('7'); break; }
						case 0x38:			{ nVirtKey = _T('8'); break; }
						case 0x39:			{ nVirtKey = _T('9'); break; }
						case 0xbd:			{ nVirtKey = _T('-'); break; }
						case 0xbb:			{ nVirtKey = _T('='); break; }
						case 0xdb:			{ nVirtKey = _T('['); break; }
						case 0xdd:			{ nVirtKey = _T(']'); break; }
						case 0xdc:			{ nVirtKey = _T('\\'); break; }
						case 0xba:			{ nVirtKey = _T(';'); break; }
						case 0xde:			{ nVirtKey = _T('\''); break; }
						case 0xbc:			{ nVirtKey = _T(','); break; }
						case 0xbe:			{ nVirtKey = _T('.'); break; }
						case 0xbf:			{ nVirtKey = _T('/'); break; }
						case VK_NUMPAD0:	{ nVirtKey = _T('0'); break; }
						case VK_NUMPAD1:	{ nVirtKey = _T('1'); break; }
						case VK_NUMPAD2:	{ nVirtKey = _T('2'); break; }
						case VK_NUMPAD3:	{ nVirtKey = _T('3'); break; }
						case VK_NUMPAD4:	{ nVirtKey = _T('4'); break; }
						case VK_NUMPAD5:	{ nVirtKey = _T('5'); break; }
						case VK_NUMPAD6:	{ nVirtKey = _T('6'); break; }
						case VK_NUMPAD7:	{ nVirtKey = _T('7'); break; }
						case VK_NUMPAD8:	{ nVirtKey = _T('8'); break; }
						case VK_NUMPAD9:	{ nVirtKey = _T('9'); break; }
						case VK_MULTIPLY:	{ nVirtKey = _T('*'); break; }
						case VK_ADD:		{ nVirtKey = _T('+'); break; }
						case VK_SUBTRACT:	{ nVirtKey = _T('-'); break; }
						case VK_DECIMAL:	{ nVirtKey = _T('.'); break; }
						case VK_DIVIDE :	{ nVirtKey = _T('/'); break; }
						case 0x3b:			{ nVirtKey = _T('+'); break; }
						case 0x3d:			{ nVirtKey = _T('-'); break; }
					}
					szTemp[ 0 ] = ( TCHAR ) nVirtKey;
					szTemp[ 1 ] = _T('\0');
					pszChar = szTemp;
				}
			}

			_tcscat( psz, pszChar );

			nVirtKey = cmHotKey.nVirtKey2;
			byModifiers = cmHotKey.byModifiers2;

			if ( nVirtKey && ( i == 0 ) )
			{
				_tcscat( psz, _T(", ") );
			}
		}
	}
}