on WM_COMMAND */
| 439 | |
| 440 | /* on WM_COMMAND */ |
| 441 | void |
| 442 | onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) |
| 443 | { |
| 444 | PNHMapWindow data; |
| 445 | RECT rt; |
| 446 | |
| 447 | data = (PNHMapWindow) GetWindowLong(hWnd, GWL_USERDATA); |
| 448 | switch (wParam) { |
| 449 | case MSNH_MSG_PRINT_GLYPH: { |
| 450 | PMSNHMsgPrintGlyph msg_data = (PMSNHMsgPrintGlyph) lParam; |
| 451 | data->map[msg_data->x][msg_data->y] = msg_data->glyph; |
| 452 | |
| 453 | /* invalidate the update area */ |
| 454 | nhcoord2display(data, msg_data->x, msg_data->y, &rt); |
| 455 | InvalidateRect(hWnd, &rt, TRUE); |
| 456 | } break; |
| 457 | |
| 458 | case MSNH_MSG_CLIPAROUND: { |
| 459 | PMSNHMsgClipAround msg_data = (PMSNHMsgClipAround) lParam; |
| 460 | int x, y; |
| 461 | BOOL scroll_x, scroll_y; |
| 462 | int mcam = iflags.wc_scroll_margin; |
| 463 | |
| 464 | /* calculate if you should clip around */ |
| 465 | scroll_x = |
| 466 | !GetNHApp()->bNoHScroll |
| 467 | && (msg_data->x < (data->xPos + mcam) |
| 468 | || msg_data->x > (data->xPos + data->xPageSize - mcam)); |
| 469 | scroll_y = |
| 470 | !GetNHApp()->bNoVScroll |
| 471 | && (msg_data->y < (data->yPos + mcam) |
| 472 | || msg_data->y > (data->yPos + data->yPageSize - mcam)); |
| 473 | |
| 474 | mcam += iflags.wc_scroll_amount - 1; |
| 475 | /* get page size and center horizontally on x-position */ |
| 476 | if (scroll_x) { |
| 477 | if (data->xPageSize <= 2 * mcam) { |
| 478 | x = max(0, min(COLNO, msg_data->x - data->xPageSize / 2)); |
| 479 | } else if (msg_data->x < data->xPos + data->xPageSize / 2) { |
| 480 | x = max(0, min(COLNO, msg_data->x - mcam)); |
| 481 | } else { |
| 482 | x = max(0, min(COLNO, msg_data->x - data->xPageSize + mcam)); |
| 483 | } |
| 484 | SendMessage(hWnd, WM_HSCROLL, (WPARAM) MAKELONG(SB_THUMBTRACK, x), |
| 485 | (LPARAM) NULL); |
| 486 | } |
| 487 | |
| 488 | /* get page size and center vertically on y-position */ |
| 489 | if (scroll_y) { |
| 490 | if (data->yPageSize <= 2 * mcam) { |
| 491 | y = max(0, min(ROWNO, msg_data->y - data->yPageSize / 2)); |
| 492 | } else if (msg_data->y < data->yPos + data->yPageSize / 2) { |
| 493 | y = max(0, min(ROWNO, msg_data->y - mcam)); |
| 494 | } else { |
| 495 | y = max(0, min(ROWNO, msg_data->y - data->yPageSize + mcam)); |
| 496 | } |
| 497 | SendMessage(hWnd, WM_VSCROLL, (WPARAM) MAKELONG(SB_THUMBTRACK, y), |
| 498 | (LPARAM) NULL); |
no test coverage detected