mirror of
https://github.com/quantum5/MusicKeyboard.git
synced 2025-04-24 13:11:58 -04:00
Added ESC to move focused control.
Fixed minor uninitialized variable.
This commit is contained in:
parent
d6274e4d64
commit
7af966e0f3
|
@ -25,6 +25,16 @@
|
||||||
#define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam))
|
#define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam))
|
||||||
#endif
|
#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 {
|
class MainWindow : public Window {
|
||||||
public:
|
public:
|
||||||
virtual LPCTSTR ClassName() { return TEXT("MusicKeyboardMain"); }
|
virtual LPCTSTR ClassName() { return TEXT("MusicKeyboardMain"); }
|
||||||
|
@ -67,7 +77,6 @@ protected:
|
||||||
bool saving;
|
bool saving;
|
||||||
private:
|
private:
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
HBRUSH hBrush;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
class PianoControl : public Window {
|
class PianoControl : public Window {
|
||||||
public:
|
public:
|
||||||
virtual LPCTSTR ClassName() { return TEXT("KeyboardControl"); }
|
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,
|
DWORD dwStyle = 0,
|
||||||
int x = CW_USEDEFAULT, int y = CW_USEDEFAULT,
|
int x = CW_USEDEFAULT, int y = CW_USEDEFAULT,
|
||||||
int cx = CW_USEDEFAULT, int cy = CW_USEDEFAULT);
|
int cx = CW_USEDEFAULT, int cy = CW_USEDEFAULT);
|
||||||
|
|
|
@ -14,6 +14,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
ShowWindow(win->GetHWND(), nCmdShow);
|
ShowWindow(win->GetHWND(), nCmdShow);
|
||||||
MSG msg;
|
MSG msg;
|
||||||
while (GetMessage(&msg, NULL, 0, 0) > 0) {
|
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);
|
TranslateMessage(&msg);
|
||||||
DispatchMessage(&msg);
|
DispatchMessage(&msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,15 +9,6 @@
|
||||||
#define RIGHT(x, y, cx, cy) (x - cx), y, cx, cy
|
#define RIGHT(x, y, cx, cy) (x - cx), y, cx, cy
|
||||||
#define BOTTOM(x, y, cx, cy) x, (y - cy), 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 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) \
|
#define MIDI_MESSAGE(handle, code, arg1, arg2) \
|
||||||
midiOutShortMsg(handle, ((arg2 & 0x7F) << 16) |\
|
midiOutShortMsg(handle, ((arg2 & 0x7F) << 16) |\
|
||||||
((arg1 & 0x7F) << 8) | (code & 0xFF))
|
((arg1 & 0x7F) << 8) | (code & 0xFF))
|
||||||
|
@ -33,9 +24,6 @@
|
||||||
MessageBoxA(hwnd, buf, title, opt); \
|
MessageBoxA(hwnd, buf, title, opt); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
DWORD rgbWindowBackground;
|
|
||||||
|
|
||||||
static char keymap[256];
|
static char keymap[256];
|
||||||
static LPWSTR keychars =
|
static LPWSTR keychars =
|
||||||
L"~`\0" // F#3
|
L"~`\0" // F#3
|
||||||
|
@ -99,8 +87,6 @@ LRESULT MainWindow::OnCreate()
|
||||||
GetClientRect(m_hwnd, &client);
|
GetClientRect(m_hwnd, &client);
|
||||||
|
|
||||||
hFont = CreateFontIndirect(&ncmMetrics.lfMessageFont);
|
hFont = CreateFontIndirect(&ncmMetrics.lfMessageFont);
|
||||||
rgbWindowBackground = GetSysColor(COLOR_WINDOW);
|
|
||||||
hBrush = GetSysColorBrush(COLOR_WINDOW);
|
|
||||||
|
|
||||||
// Children
|
// Children
|
||||||
m_volumeLabel = CreateWindow(WC_STATIC, L"Volume:",
|
m_volumeLabel = CreateWindow(WC_STATIC, L"Volume:",
|
||||||
|
@ -113,34 +99,35 @@ LRESULT MainWindow::OnCreate()
|
||||||
WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, 0, 0, 0, 0,
|
WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE, 0, 0, 0, 0,
|
||||||
m_hwnd, NULL, GetInstance(), NULL);
|
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 |
|
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_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,
|
m_saveCheck = CreateWindow(WC_BUTTON, L"&Save?", WS_CHILD | WS_VISIBLE | BS_CHECKBOX | WS_TABSTOP,
|
||||||
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,
|
|
||||||
0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_SAVE, GetInstance(), NULL);
|
0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_SAVE, GetInstance(), NULL);
|
||||||
m_saveLabel = CreateWindow(WC_STATIC, L"File:",
|
m_saveLabel = CreateWindow(WC_STATIC, L"File:",
|
||||||
WS_CHILD | WS_VISIBLE | WS_DISABLED | SS_CENTERIMAGE, 0, 0, 0, 0,
|
WS_CHILD | WS_VISIBLE | WS_DISABLED | SS_CENTERIMAGE, 0, 0, 0, 0,
|
||||||
m_hwnd, NULL, GetInstance(), NULL);
|
m_hwnd, NULL, GetInstance(), NULL);
|
||||||
m_saveFile = CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, 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_hwnd, (HMENU) KEYBOARD_SAVE_FILE, GetInstance(), NULL);
|
||||||
m_saveBrowse = CreateWindow(WC_BUTTON, L"B&rowse...",
|
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);
|
0, 0, 0, 0, m_hwnd, (HMENU) KEYBOARD_BROWSE, GetInstance(), NULL);
|
||||||
m_reopen = CreateWindow(WC_BUTTON, L"R&eopen",
|
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);
|
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_SETRANGEMIN, FALSE, 0x0000);
|
||||||
SendMessage(m_volumeBar, TBM_SETRANGEMAX, FALSE, 0xFFFF);
|
SendMessage(m_volumeBar, TBM_SETRANGEMAX, FALSE, 0xFFFF);
|
||||||
SendMessage(m_forceBar, TBM_SETRANGE, FALSE, 127 << 16);
|
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);
|
MessageBox(m_hwnd, L"Failed to open MIDI device!", L"Fatal Error", MB_ICONERROR);
|
||||||
|
|
||||||
memset(state, 0, 128 * sizeof(bool));
|
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));
|
this->piano->SetBackground(GetSysColorBrush(COLOR_3DFACE));
|
||||||
|
|
||||||
// Beep Initialization
|
// Beep Initialization
|
||||||
|
@ -196,9 +185,8 @@ LRESULT MainWindow::OnCreate()
|
||||||
} else {
|
} else {
|
||||||
F_RtlInitUnicodeString(&usBeepDevice, L"\\Device\\Beep");
|
F_RtlInitUnicodeString(&usBeepDevice, L"\\Device\\Beep");
|
||||||
hBeep = NULL;
|
hBeep = NULL;
|
||||||
useBeep = false;
|
|
||||||
}
|
}
|
||||||
|
useBeep = false;
|
||||||
{
|
{
|
||||||
keymap[VK_OEM_3] = 54; // `~ key
|
keymap[VK_OEM_3] = 54; // `~ key
|
||||||
keymap['Q'] = 55;
|
keymap['Q'] = 55;
|
||||||
|
@ -581,6 +569,11 @@ LRESULT MainWindow::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
case WM_SYSKEYUP:
|
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))
|
if (Play(wParam, lParam, false))
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -584,13 +584,13 @@ LRESULT PianoControl::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
return Window::HandleMessage(uMsg, wParam, 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)
|
DWORD dwStyle, int x, int y, int cx, int cy)
|
||||||
{
|
{
|
||||||
PianoControl *self = new PianoControl();
|
PianoControl *self = new PianoControl();
|
||||||
if (self &&
|
if (self &&
|
||||||
self->WinCreateWindow(0, szTitle, dwStyle, x, y, cx, cy,
|
self->WinCreateWindow(0, szTitle, dwStyle, x, y, cx, cy,
|
||||||
hwParent, NULL)) {
|
hwParent, (HMENU) dwDlgID)) {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
delete self;
|
delete self;
|
||||||
|
|
Loading…
Reference in a new issue