| 2467 |
} |
} |
| 2468 |
} |
} |
| 2469 |
|
|
| 2470 |
static WNDPROC g_defAboutDlgEditWndProc; |
// WM_MOUSEWHEEL は winuser.h ヘッダで宣言されていますが、#define _WIN32_WINNT 0x0400 が宣言されていないと認識されません。 |
| 2471 |
|
#define WM_MOUSEWHEEL 0x020A |
| 2472 |
|
#define WHEEL_DELTA 120 |
| 2473 |
|
#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) |
| 2474 |
|
#define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) |
| 2475 |
|
|
| 2476 |
|
static WNDPROC g_defAboutDlgEditWndProc; // Edit Controlのサブクラス化用 |
| 2477 |
|
static int g_deltaSumAboutDlg = 0; // マウスホイールのDelta累積用 |
| 2478 |
|
|
| 2479 |
static LRESULT CALLBACK AboutDlgEditWindowProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) |
static LRESULT CALLBACK AboutDlgEditWindowProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) |
| 2480 |
{ |
{ |
| 2481 |
// Edit control上で CTRL+A を押下すると、テキストを全選択する。 |
WORD keys; |
| 2482 |
if (msg == WM_KEYDOWN && wp == 'A' && GetKeyState(VK_CONTROL) < 0) { |
short delta; |
| 2483 |
PostMessage(hWnd, EM_SETSEL, 0, -1); |
BOOL page; |
| 2484 |
return 0; |
|
| 2485 |
} |
switch (msg) { |
| 2486 |
|
case WM_KEYDOWN: |
| 2487 |
|
// Edit control上で CTRL+A を押下すると、テキストを全選択する。 |
| 2488 |
|
if (wp == 'A' && GetKeyState(VK_CONTROL) < 0) { |
| 2489 |
|
PostMessage(hWnd, EM_SETSEL, 0, -1); |
| 2490 |
|
return 0; |
| 2491 |
|
} |
| 2492 |
|
break; |
| 2493 |
|
|
| 2494 |
|
case WM_MOUSEWHEEL: |
| 2495 |
|
// CTRLorSHIFT + マウスホイールの場合、横スクロールさせる。 |
| 2496 |
|
keys = GET_KEYSTATE_WPARAM(wp); |
| 2497 |
|
delta = GET_WHEEL_DELTA_WPARAM(wp); |
| 2498 |
|
page = keys & (MK_CONTROL | MK_SHIFT); |
| 2499 |
|
|
| 2500 |
|
if (page == 0) |
| 2501 |
|
break; |
| 2502 |
|
|
| 2503 |
|
g_deltaSumAboutDlg += delta; |
| 2504 |
|
|
| 2505 |
|
if (g_deltaSumAboutDlg >= WHEEL_DELTA) { |
| 2506 |
|
g_deltaSumAboutDlg -= WHEEL_DELTA; |
| 2507 |
|
SendMessage(hWnd, WM_HSCROLL, SB_PAGELEFT , 0); |
| 2508 |
|
} else if (g_deltaSumAboutDlg <= -WHEEL_DELTA) { |
| 2509 |
|
g_deltaSumAboutDlg += WHEEL_DELTA; |
| 2510 |
|
SendMessage(hWnd, WM_HSCROLL, SB_PAGERIGHT, 0); |
| 2511 |
|
} |
| 2512 |
|
|
| 2513 |
|
break; |
| 2514 |
|
} |
| 2515 |
return CallWindowProc(g_defAboutDlgEditWndProc, hWnd, msg, wp, lp); |
return CallWindowProc(g_defAboutDlgEditWndProc, hWnd, msg, wp, lp); |
| 2516 |
} |
} |
| 2517 |
|
|
| 2566 |
SetFocus(GetDlgItem(dlg, IDOK)); |
SetFocus(GetDlgItem(dlg, IDOK)); |
| 2567 |
|
|
| 2568 |
// Edit controlをサブクラス化する。 |
// Edit controlをサブクラス化する。 |
| 2569 |
|
g_deltaSumAboutDlg = 0; |
| 2570 |
g_defAboutDlgEditWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc); |
g_defAboutDlgEditWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(dlg, IDC_ABOUTTEXT), GWLP_WNDPROC, (LONG_PTR)AboutDlgEditWindowProc); |
| 2571 |
|
|
| 2572 |
return FALSE; |
return FALSE; |