diff --git a/include/MainWindow.hpp b/include/MainWindow.hpp index 65b34b6..4fba7d4 100644 --- a/include/MainWindow.hpp +++ b/include/MainWindow.hpp @@ -25,6 +25,16 @@ #define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) #endif +#define KEYBOARD_IMAGE 0xAA00 +#define KEYBOARD_VOLUME 0xAA01 +#define KEYBOARD_FORCE 0xAA02 +#define KEYBOARD_INSTRUMENT 0xAA03 +#define KEYBOARD_USE_BEEP 0xAAFF +#define KEYBOARD_SAVE 0xAB00 +#define KEYBOARD_SAVE_FILE 0xAB01 +#define KEYBOARD_BROWSE 0xAB02 +#define KEYBOARD_REOPEN 0xAB03 + class MainWindow : public Window { public: virtual LPCTSTR ClassName() { return TEXT("MusicKeyboardMain"); } @@ -67,7 +77,6 @@ protected: bool saving; private: HFONT hFont; - HBRUSH hBrush; }; #endif diff --git a/include/PianoControl.hpp b/include/PianoControl.hpp index 94c6c62..5b6b09c 100644 --- a/include/PianoControl.hpp +++ b/include/PianoControl.hpp @@ -22,7 +22,7 @@ class PianoControl : public Window { public: virtual LPCTSTR ClassName() { return TEXT("KeyboardControl"); } - static PianoControl *Create(LPCTSTR szTitle, HWND hwParent, + static PianoControl *Create(LPCTSTR szTitle, HWND hwParent, DWORD dwDlgID, DWORD dwStyle = 0, int x = CW_USEDEFAULT, int y = CW_USEDEFAULT, int cx = CW_USEDEFAULT, int cy = CW_USEDEFAULT); diff --git a/src/Keyboard.cpp b/src/Keyboard.cpp index facdebe..cc99be9 100644 --- a/src/Keyboard.cpp +++ b/src/Keyboard.cpp @@ -14,6 +14,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine ShowWindow(win->GetHWND(), nCmdShow); MSG msg; while (GetMessage(&msg, NULL, 0, 0) > 0) { + if (msg.message == WM_KEYUP && msg.wParam == VK_ESCAPE) { + SendMessage(win->GetHWND(), WM_KEYUP, VK_ESCAPE, msg.lParam); + continue; + } TranslateMessage(&msg); DispatchMessage(&msg); } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 4648761..95af36b 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -9,15 +9,6 @@ #define RIGHT(x, y, cx, cy) (x - cx), y, cx, cy #define BOTTOM(x, y, cx, cy) x, (y - cy), cx, cy #define BOTTOMRIGHT(x, y, cx, cy) (x - cx), (y - cy), cx, cy -#define KEYBOARD_IMAGE 0xAA00 -#define KEYBOARD_VOLUME 0xAA01 -#define KEYBOARD_FORCE 0xAA02 -#define KEYBOARD_INSTRUMENT 0xAA03 -#define KEYBOARD_USE_BEEP 0xAAFF -#define KEYBOARD_SAVE 0xAB00 -#define KEYBOARD_SAVE_FILE 0xAB01 -#define KEYBOARD_BROWSE 0xAB02 -#define KEYBOARD_REOPEN 0xAB03 #define MIDI_MESSAGE(handle, code, arg1, arg2) \ midiOutShortMsg(handle, ((arg2 & 0x7F) << 16) |\ ((arg1 & 0x7F) << 8) | (code & 0xFF)) @@ -33,9 +24,6 @@ MessageBoxA(hwnd, buf, title, opt); \ } while (0) - -DWORD rgbWindowBackground; - static char keymap[256]; static LPWSTR keychars = L"~`\0" // F#3 @@ -99,8 +87,6 @@ LRESULT MainWindow::OnCreate() GetClientRect(m_hwnd, &client); hFont = CreateFontIndirect(&ncmMetrics.lfMessageFont); - rgbWindowBackground = GetSysColor(COLOR_WINDOW); - hBrush = GetSysColorBrush(COLOR_WINDOW); // Children m_volumeLabel = CreateWindow(WC_STATIC, L"Volume:", @@ -113,34 +99,35 @@ LRESULT MainWindow::OnCreate() WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, 0, 0, 0, 0, m_hwnd, NULL, GetInstance(), NULL); - m_volumeBar = CreateWindow(TRACKBAR_CLASS, NULL, - WS_CHILD | WS_VISIBLE | TBS_NOTICKS, 0, 0, 0, 0, - m_hwnd, (HMENU) KEYBOARD_VOLUME, GetInstance(), NULL); - m_forceBar = CreateWindow(TRACKBAR_CLASS, NULL, - WS_CHILD | WS_VISIBLE | TBS_NOTICKS, 0, 0, 0, 0, - m_hwnd, (HMENU) KEYBOARD_FORCE, GetInstance(), NULL); m_instruSelect = CreateWindow(WC_COMBOBOX, NULL, WS_CHILD | WS_VISIBLE | - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL, 0, 0, 0, 0, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, + 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_INSTRUMENT, GetInstance(), NULL); + m_forceBar = CreateWindow(TRACKBAR_CLASS, NULL, + WS_CHILD | WS_VISIBLE | TBS_NOTICKS | WS_TABSTOP, 0, 0, 0, 0, + m_hwnd, (HMENU) KEYBOARD_FORCE, GetInstance(), NULL); + m_volumeBar = CreateWindow(TRACKBAR_CLASS, NULL, + WS_CHILD | WS_VISIBLE | TBS_NOTICKS | WS_TABSTOP, 0, 0, 0, 0, + m_hwnd, (HMENU) KEYBOARD_VOLUME, GetInstance(), NULL); - m_beepCheck = CreateWindow(WC_BUTTON, L"&Beep?", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, - 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_USE_BEEP, GetInstance(), NULL); - - m_saveCheck = CreateWindow(WC_BUTTON, L"&Save?", WS_CHILD | WS_VISIBLE | BS_CHECKBOX, + m_saveCheck = CreateWindow(WC_BUTTON, L"&Save?", WS_CHILD | WS_VISIBLE | BS_CHECKBOX | WS_TABSTOP, 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_SAVE, GetInstance(), NULL); m_saveLabel = CreateWindow(WC_STATIC, L"File:", WS_CHILD | WS_VISIBLE | WS_DISABLED | SS_CENTERIMAGE, 0, 0, 0, 0, m_hwnd, NULL, GetInstance(), NULL); m_saveFile = CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, NULL, - WS_CHILD | WS_VISIBLE | WS_DISABLED, 0, 0, 0, 0, + WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_SAVE_FILE, GetInstance(), NULL); m_saveBrowse = CreateWindow(WC_BUTTON, L"B&rowse...", - WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED, + WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED | WS_TABSTOP, 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_BROWSE, GetInstance(), NULL); m_reopen = CreateWindow(WC_BUTTON, L"R&eopen", - WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED, + WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED | WS_TABSTOP, 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_REOPEN, GetInstance(), NULL); + m_beepCheck = CreateWindow(WC_BUTTON, L"&Beep?", WS_CHILD | WS_VISIBLE | BS_CHECKBOX | WS_TABSTOP, + 0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_USE_BEEP, GetInstance(), NULL); + SendMessage(m_volumeBar, TBM_SETRANGEMIN, FALSE, 0x0000); SendMessage(m_volumeBar, TBM_SETRANGEMAX, FALSE, 0xFFFF); SendMessage(m_forceBar, TBM_SETRANGE, FALSE, 127 << 16); @@ -184,7 +171,9 @@ LRESULT MainWindow::OnCreate() MessageBox(m_hwnd, L"Failed to open MIDI device!", L"Fatal Error", MB_ICONERROR); memset(state, 0, 128 * sizeof(bool)); - this->piano = PianoControl::Create(NULL, m_hwnd, WS_VISIBLE | WS_CHILD, 0, 0, 0, 0); + this->piano = PianoControl::Create(NULL, m_hwnd, KEYBOARD_IMAGE, + WS_VISIBLE | WS_CHILD | WS_TABSTOP, + 0, 0, 0, 0); this->piano->SetBackground(GetSysColorBrush(COLOR_3DFACE)); // Beep Initialization @@ -196,9 +185,8 @@ LRESULT MainWindow::OnCreate() } else { F_RtlInitUnicodeString(&usBeepDevice, L"\\Device\\Beep"); hBeep = NULL; - useBeep = false; } - + useBeep = false; { keymap[VK_OEM_3] = 54; // `~ key keymap['Q'] = 55; @@ -581,6 +569,11 @@ LRESULT MainWindow::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) break; case WM_KEYUP: case WM_SYSKEYUP: + if (wParam == VK_ESCAPE) { + HWND hwnd = GetNextDlgTabItem(m_hwnd, GetFocus(), GetKeyState(VK_SHIFT) < 0); + SetFocus(hwnd); + return 0; + } if (Play(wParam, lParam, false)) return 0; break; diff --git a/src/PianoControl.cpp b/src/PianoControl.cpp index 0a1b0de..08f631d 100644 --- a/src/PianoControl.cpp +++ b/src/PianoControl.cpp @@ -584,13 +584,13 @@ LRESULT PianoControl::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) return Window::HandleMessage(uMsg, wParam, lParam); } -PianoControl *PianoControl::Create(LPCTSTR szTitle, HWND hwParent, +PianoControl *PianoControl::Create(LPCTSTR szTitle, HWND hwParent, DWORD dwDlgID, DWORD dwStyle, int x, int y, int cx, int cy) { PianoControl *self = new PianoControl(); if (self && self->WinCreateWindow(0, szTitle, dwStyle, x, y, cx, cy, - hwParent, NULL)) { + hwParent, (HMENU) dwDlgID)) { return self; } delete self;