From: nethack.allison Date: Wed, 13 Feb 2002 20:09:52 +0000 (+0000) Subject: - added map scrolling: X-Git-Tag: MOVE2GIT~3180 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4565a1d0bd4775cf24cf456bf99ecede92a78b0e;p=nethack - added map scrolling: Ctrl-left_arrow - scroll left Ctrl-right_arrow - scroll right Ctrl-up_arrow - scroll up Ctrl-down_arrow - scroll down Ctrl-home - scroll to upper left corner Ctrl-end - scroll to lower right corner Ctrl-PgUp - scroll one page up (vertical) Ctrl-PgDown - scroll one page down (vertical) - F3/F4 keys switch between tiles / fit-to-screen ASCII mode (Yitzhak's suggestion) --- diff --git a/win/win32/mhmain.c b/win/win32/mhmain.c index a6c71d82c..f40b84136 100644 --- a/win/win32/mhmain.c +++ b/win/win32/mhmain.c @@ -162,35 +162,129 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar switch (wParam) { case VK_LEFT: - NHEVENT_KBD(KEYTABLE(KEY_W)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window one line left */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_HSCROLL, + MAKEWPARAM(SB_LINEUP, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_W)); + } return 0; case VK_RIGHT: - NHEVENT_KBD(KEYTABLE(KEY_E)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window one line right */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_HSCROLL, + MAKEWPARAM(SB_LINEDOWN, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_E)); + } return 0; case VK_UP: - NHEVENT_KBD(KEYTABLE(KEY_N)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window one line up */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_VSCROLL, + MAKEWPARAM(SB_LINEUP, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_N)); + } return 0; case VK_DOWN: - NHEVENT_KBD(KEYTABLE(KEY_S)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window one line down */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_VSCROLL, + MAKEWPARAM(SB_LINEDOWN, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_S)); + } return 0; case VK_HOME: - NHEVENT_KBD(KEYTABLE(KEY_NW)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window to upper left corner */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_VSCROLL, + MAKEWPARAM(SB_THUMBTRACK, 0), + (LPARAM)NULL + ); + + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_HSCROLL, + MAKEWPARAM(SB_THUMBTRACK, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_NW)); + } return 0; case VK_END: - NHEVENT_KBD(KEYTABLE(KEY_SW)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window to lower right corner */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_VSCROLL, + MAKEWPARAM(SB_THUMBTRACK, ROWNO), + (LPARAM)NULL + ); + + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_HSCROLL, + MAKEWPARAM(SB_THUMBTRACK, COLNO), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_SW)); + } return 0; case VK_PRIOR: - NHEVENT_KBD(KEYTABLE(KEY_NE)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window one page up */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_VSCROLL, + MAKEWPARAM(SB_PAGEUP, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_NE)); + } return 0; case VK_NEXT: - NHEVENT_KBD(KEYTABLE(KEY_SE)); + if( GetKeyState(VK_CONTROL)&0x80 ) { + /* scroll map window one page down */ + SendMessage( + mswin_hwnd_from_winid(WIN_MAP), + WM_VSCROLL, + MAKEWPARAM(SB_PAGEDOWN, 0), + (LPARAM)NULL + ); + } else { + NHEVENT_KBD(KEYTABLE(KEY_SE)); + } return 0; case VK_DECIMAL: @@ -211,6 +305,14 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar NHEVENT_KBD(KEYTABLE(KEY_PLUS)); return 0; + case VK_F3: + mswin_select_map_mode(MAP_MODE_TILES); + return 0; + + case VK_F4: + mswin_select_map_mode(MAP_MODE_ASCII_FIT_TO_SCREEN); + return 0; + default: { WORD c; BYTE kbd_state[256];