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(", ") ); } } } }