svnno****@sourc*****
svnno****@sourc*****
2014年 5月 5日 (月) 01:54:12 JST
Revision: 5579 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5579 Author: yutakapon Date: 2014-05-05 01:54:12 +0900 (Mon, 05 May 2014) Log Message: ----------- バージョン情報のEdit Controlの横スクロールバーを、「CTRL/SHIFT + マウスホイール」で 左右にスクロールできるようにした。 Modified Paths: -------------- trunk/ttssh2/ttxssh/ttxssh.c -------------- next part -------------- Modified: trunk/ttssh2/ttxssh/ttxssh.c =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.c 2014-05-04 15:49:47 UTC (rev 5578) +++ trunk/ttssh2/ttxssh/ttxssh.c 2014-05-04 16:54:12 UTC (rev 5579) @@ -2467,15 +2467,51 @@ } } -static WNDPROC g_defAboutDlgEditWndProc; +// WM_MOUSEWHEEL \x82\xCD winuser.h \x83w\x83b\x83_\x82Ő錾\x82\xB3\x82\xEA\x82Ă\xA2\x82܂\xB7\x82\xAA\x81A#define _WIN32_WINNT 0x0400 \x82\xAA\x90錾\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x82ƔF\x8E\xAF\x82\xB3\x82\xEA\x82܂\xB9\x82\xF1\x81B +#define WM_MOUSEWHEEL 0x020A +#define WHEEL_DELTA 120 +#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) +#define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) +static WNDPROC g_defAboutDlgEditWndProc; // Edit Control\x82̃T\x83u\x83N\x83\x89\x83X\x89\xBB\x97p +static int g_deltaSumAboutDlg = 0; // \x83}\x83E\x83X\x83z\x83C\x81[\x83\x8B\x82\xCCDelta\x97ݐϗp + static LRESULT CALLBACK AboutDlgEditWindowProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { - // Edit control\x8F\xE3\x82\xC5 CTRL+A \x82\xF0\x89\x9F\x89\xBA\x82\xB7\x82\xE9\x82ƁA\x83e\x83L\x83X\x83g\x82\xF0\x91S\x91I\x91\xF0\x82\xB7\x82\xE9\x81B - if (msg == WM_KEYDOWN && wp == 'A' && GetKeyState(VK_CONTROL) < 0) { - PostMessage(hWnd, EM_SETSEL, 0, -1); - return 0; - } + WORD keys; + short delta; + BOOL page; + + switch (msg) { + case WM_KEYDOWN: + // Edit control\x8F\xE3\x82\xC5 CTRL+A \x82\xF0\x89\x9F\x89\xBA\x82\xB7\x82\xE9\x82ƁA\x83e\x83L\x83X\x83g\x82\xF0\x91S\x91I\x91\xF0\x82\xB7\x82\xE9\x81B + if (wp == 'A' && GetKeyState(VK_CONTROL) < 0) { + PostMessage(hWnd, EM_SETSEL, 0, -1); + return 0; + } + break; + + case WM_MOUSEWHEEL: + // CTRLorSHIFT + \x83}\x83E\x83X\x83z\x83C\x81[\x83\x8B\x82̏ꍇ\x81A\x89\xA1\x83X\x83N\x83\x8D\x81[\x83\x8B\x82\xB3\x82\xB9\x82\xE9\x81B + keys = GET_KEYSTATE_WPARAM(wp); + delta = GET_WHEEL_DELTA_WPARAM(wp); + page = keys & (MK_CONTROL | MK_SHIFT); + + if (page == 0) + break; + + g_deltaSumAboutDlg += delta; + + if (g_deltaSumAboutDlg >= WHEEL_DELTA) { + g_deltaSumAboutDlg -= WHEEL_DELTA; + SendMessage(hWnd, WM_HSCROLL, SB_PAGELEFT , 0); + } else if (g_deltaSumAboutDlg <= -WHEEL_DELTA) { + g_deltaSumAboutDlg += WHEEL_DELTA; + SendMessage(hWnd, WM_HSCROLL, SB_PAGERIGHT, 0); + } + + break; + } return CallWindowProc(g_defAboutDlgEditWndProc, hWnd, msg, wp, lp); } @@ -2530,6 +2566,7 @@ SetFocus(GetDlgItem(dlg, IDOK)); // Edit control\x82\xF0\x83T\x83u\x83N\x83\x89\x83X\x89\xBB\x82\xB7\x82\xE9\x81B + g_deltaSumAboutDlg = 0; g_defAboutDlgEditWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc); return FALSE;