/* --------- KEYBOARD Message ---------- */ static int KeyboardMsg(WINDOW wnd, PARAM p1, PARAM p2) { int c = (int) p1; BOOL delnl; PARAM pn = p1; if (WindowMoving || WindowSizing || ((int)p2 & ALTKEY)) return FALSE; switch (c) { case PGUP: case PGDN: case UP: case DN: pn = (PARAM) BS; case FWD: case BS: BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); TurnOffDisplay(wnd); while (*CurrChar == pTab) BaseWndProc(EDITOR, wnd, KEYBOARD, pn, p2); TurnOnDisplay(wnd); return TRUE; case DEL: TurnOffDisplay(wnd); delnl = *CurrChar == '\n' || TextBlockMarked(wnd); BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); while (*CurrChar == pTab) BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); AdjustTab(wnd); TurnOnDisplay(wnd); RepaintLine(wnd); if (delnl) SendMessage(wnd, PAINT, 0, 0); return TRUE; case '\t': TurnOffDisplay(wnd); BaseWndProc(EDITOR, wnd, KEYBOARD, (PARAM) sTab, p2); while ((wnd->CurrCol % cfg.Tabs) != 0) BaseWndProc(EDITOR, wnd, KEYBOARD, pTab, p2); TurnOnDisplay(wnd); RepaintLine(wnd); return TRUE; default: if ((c & OFFSET == 0) && (isprint(c) || c == '\r')) { TurnOffDisplay(wnd); BaseWndProc(EDITOR, wnd, KEYBOARD, p1, p2); AdjustTab(wnd); TurnOnDisplay(wnd); RepaintLine(wnd); if (c == '\r') SendMessage(wnd, PAINT, 0, 0); return TRUE; } break; } return FALSE; }
void CPpcMainWnd::OnToolHoldDisp() { UnregisterHotKeys(); m_fHold = !m_fHold; EnableWindow(m_hWnd, !m_fHold); RegisterHotKeys(); if (!m_fActive) SetForegroundWindow(m_hWnd); KillTimer(m_hWnd, ID_TIMER_HOLD); m_fDrawHold = TRUE; SetTimer(m_hWnd, ID_TIMER_HOLD, TIMER_HOLD_INTERVAL, NULL); UpdateTitle(); if (m_fHold) { TurnOffDisplay(); m_fDisplay = FALSE; } else { TurnOnDisplay(); m_fDisplay = TRUE; InvalidateRect(m_hWnd, NULL, TRUE); UpdateWindow(m_hWnd); } }
void CPpcMainWnd::OnListViewKeyDown(NMHDR* pnmh) { // バックライト制御以外で // 自動バックライトON制御が有効のとき if (((CPpcOptions*)m_pOptions)->m_fDispAutoOn) { TurnOnDisplay(); m_fDisplay = TRUE; InvalidateRect(m_hWnd, NULL, TRUE); UpdateWindow(m_hWnd); } if (((LPNMLVKEYDOWN)pnmh)->wVKey == 'Q' && (GetAsyncKeyState(VK_CONTROL) & 0x8000)) PostMessage(m_hWnd, WM_CLOSE, 0, 0); }
void CPpcMainWnd::OnListViewReturn(NMHDR* pnmh) { // バックライト制御以外で // 自動バックライトON制御が有効のとき if (((CPpcOptions*)m_pOptions)->m_fDispAutoOn) { TurnOnDisplay(); m_fDisplay = TRUE; InvalidateRect(m_hWnd, NULL, TRUE); UpdateWindow(m_hWnd); } if (!ListView_GetSelectedCount(m_hwndLV)) return; int nCount = ListView_GetItemCount(m_hwndLV); for (int i = 0; i < nCount; i++) { if (ListView_GetItemState(m_hwndLV, i, LVIS_FOCUSED)) { Play(i); break; } } }
void CPpcMainWnd::OnHotKey(int nId, UINT fuModifiers, UINT uVirtKey) { // 未処理のWM_HOTKEYを削除する MSG msg; while (PeekMessage(&msg, m_hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE)); CPpcOptions* pOptions = (CPpcOptions*)m_pOptions; if (!pOptions) return; // 登録情報を参照する for (int i = 0; i < pOptions->m_listKeyMap.GetCount(); i++) { ACCEL* p = (ACCEL*)pOptions->m_listKeyMap.GetAt(i); if (p->key == uVirtKey) { // モーダルダイアログが表示されている場合は // ダイアログをだすもの、メニューを出すものを処理しない if (m_fMenuLoop || m_hMenu || (GetWindowLong(m_hWnd, GWL_STYLE) & WS_DISABLED)) { switch (p->cmd) { case IDM_PLAY_PLAYPAUSE: case IDM_PLAY_STOP: case IDM_PLAY_PREV: case IDM_PLAY_REW: case IDM_PLAY_FF: case IDM_PLAY_NEXT: case IDM_PLAY_REPEAT: case IDM_TOOL_VOLUP: case IDM_TOOL_VOLDOWN: case IDM_TOOL_TOGGLEDISPLAY: case IDM_TOOL_HOLD: case IDM_TOOL_HOLDDISP: case IDM_PLAY_PLAYSTOP: break; default: return; } } if (m_fHold) { BOOL fHold = FALSE; ACCEL* p = (ACCEL*)pOptions->m_listKeyMap.GetAt(i); for (int j = 0; j < sizeof(s_uHoldKeys) / sizeof(UINT) / 2; j++) { if (s_uHoldKeys[j][0] == p->key) { fHold = TRUE; break; } } if (p->cmd == IDM_TOOL_TOGGLEDISPLAY || p->cmd == IDM_TOOL_HOLD || p->cmd == IDM_TOOL_HOLDDISP || !fHold) PostMessage(m_hWnd, WM_COMMAND, p->cmd, 0); else { KillTimer(m_hWnd, ID_TIMER_HOLD); m_fDrawHold = TRUE; SetTimer(m_hWnd, ID_TIMER_HOLD, TIMER_HOLD_INTERVAL, NULL); UpdateTitle(); } } else PostMessage(m_hWnd, WM_COMMAND, p->cmd, 0); // バックライト制御以外で // 自動バックライトON制御が有効のとき if (pOptions->m_fDispAutoOn && (p->cmd != IDM_TOOL_TOGGLEDISPLAY && p->cmd != IDM_TOOL_HOLDDISP)) { TurnOnDisplay(); m_fDisplay = TRUE; InvalidateRect(m_hWnd, NULL, TRUE); UpdateWindow(m_hWnd); } return; } } if (m_fHold) { KillTimer(m_hWnd, ID_TIMER_HOLD); m_fDrawHold = TRUE; SetTimer(m_hWnd, ID_TIMER_HOLD, TIMER_HOLD_INTERVAL, NULL); UpdateTitle(); } }