* nEdit.cpp (caret_point_to_caret): 名前行、日付行のテキスト選択時、選択開始が実際のクリック位置とずれていたので修正
WM_LBUTTONDOWNメッセージハンドル時にコンテキストメニュー用の処理を追加
@@ -1757,8 +1757,9 @@ | ||
1757 | 1757 | |
1758 | 1758 | // q2ch拡張 |
1759 | 1759 | // 色変更のための拡張文字を考慮 |
1760 | - if (VISIBLECHAR(*(index_to_char(bf, j))) == FALSE) { | |
1761 | - return j + 1; | |
1760 | + TCHAR *lpszLine = index_to_char(bf, line_get(bf, index_to_line(bf, j))); | |
1761 | + if (VISIBLECHAR(*lpszLine) == FALSE) { | |
1762 | + return j + 2; | |
1762 | 1763 | } |
1763 | 1764 | // q2ch拡張ここまで |
1764 | 1765 | return j; |
@@ -2515,8 +2516,35 @@ | ||
2515 | 2516 | ShowCaret(hWnd); |
2516 | 2517 | return DefWindowProc(hWnd, msg, wParam, lParam); |
2517 | 2518 | |
2519 | + case WM_LBUTTONDOWN: | |
2520 | + { | |
2521 | + SHRGINFO info; | |
2522 | + info.cbSize = sizeof(SHRGINFO); | |
2523 | + info.hwndClient = hWnd; | |
2524 | + info.ptDown.x = LOWORD(lParam); | |
2525 | + info.ptDown.y = HIWORD(lParam); | |
2526 | + info.dwFlags = SHRG_RETURNCMD; | |
2527 | + | |
2528 | + if (SHRecognizeGesture(&info) == GN_CONTEXTMENU) { | |
2529 | + if ((bf = (BUFFER *)GetWindowLong(hWnd, GWL_USERDATA)) == NULL) { | |
2530 | + break; | |
2531 | + } | |
2532 | + DWORD cp = caret_point_to_caret(bf, (short)LOWORD(lParam), (short)HIWORD(lParam)); | |
2533 | + if (bf->sp != bf->cp && bf->sp <= cp && bf->cp >= cp) { | |
2534 | + // 選択範囲内でコンテキストメニューなので選択範囲そのまま | |
2535 | + } else { | |
2536 | + // 選択範囲外でコンテキストメニューなので選択範囲リセット | |
2537 | + bf->cp = caret_point_to_caret(bf, (short)LOWORD(lParam), (short)HIWORD(lParam)); | |
2538 | + bf->sp = bf->cp; | |
2539 | + if (sp != bf->sp) { | |
2540 | + line_refresh(hWnd, bf, cp, sp); | |
2541 | + } | |
2542 | + line_refresh(hWnd, bf, cp, bf->cp); | |
2543 | + } | |
2544 | + break; | |
2545 | + } | |
2546 | + } | |
2518 | 2547 | case WM_MOUSEMOVE: |
2519 | - case WM_LBUTTONDOWN: | |
2520 | 2548 | case WM_LBUTTONUP: |
2521 | 2549 | if ((bf = (BUFFER *)GetWindowLong(hWnd, GWL_USERDATA)) == NULL) { |
2522 | 2550 | break; |