開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 プロジェクト |
プロジェクト名 |
EzPlay |
アプリケーションの種類 |
Windows アプリケーション |
追加のオプション |
空のプロジェクト |
文字セット |
Unicode |
EzPlay.cpp
#pragma comment(lib, "winmm")
#include <Windows.h>
#include <tchar.h>
#include "resource.h"
#define MAKESMSG(st,ch,d1,d2) ((st)<<4|(ch)|(d1)<<8|(d2)<<16)
#define CH 0
// 関数プロトタイプ宣言
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void Trace(LPCTSTR format, ...);
void NoteOff(void);
// 外部変数
HMIDIOUT g_hmo;
UINT_PTR g_uCode = 0;
int g_nNoteNO = -1;
//==============================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
midiOutOpen(&g_hmo, MIDI_MAPPER, NULL, 0, CALLBACK_NULL);
midiOutShortMsg(g_hmo, MAKESMSG(0xc, CH, 0, 0)); // プログラム・チェンジ Piano
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
midiOutReset(g_hmo);
midiOutClose(g_hmo);
return 0;
}
void Trace(LPCTSTR format, ...)
{
va_list arg_ptr;
TCHAR buffer[256];
int size;
va_start(arg_ptr, format);
size = _vsntprintf_s(buffer, _countof(buffer), _TRUNCATE, format, arg_ptr);
va_end(arg_ptr);
OutputDebugString(buffer);
if (size < 0) {
OutputDebugString(_T("...\n"));
}
}
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
INT_PTR nRet = TRUE; // メッセージを処理した
switch (uMsg) {
case WM_KEYDOWN:
if (wParam != g_uCode) {
g_uCode = wParam;
Trace(_T("D:%x\n"), g_uCode);
NoteOff();
switch (g_uCode) {
case 'A': g_nNoteNO = 56; break;
case 'Z': g_nNoteNO = 57; break;
case 'S': g_nNoteNO = 58; break;
case 'X': g_nNoteNO = 59; break;
case 'C': g_nNoteNO = 60; break;
case 'F': g_nNoteNO = 61; break;
case 'V': g_nNoteNO = 62; break;
case 'G': g_nNoteNO = 63; break;
case 'B': g_nNoteNO = 64; break;
case 'N': g_nNoteNO = 65; break;
case 'J': g_nNoteNO = 66; break;
case 'M': g_nNoteNO = 67; break;
case 'K': g_nNoteNO = 68; break;
case VK_OEM_COMMA: g_nNoteNO = 69; break;
case 'L': g_nNoteNO = 70; break;
case VK_OEM_PERIOD: g_nNoteNO = 71; break;
case VK_OEM_2: g_nNoteNO = 72; break;
case VK_OEM_1: g_nNoteNO = 73; break;
case VK_OEM_102: g_nNoteNO = 74; break;
case VK_OEM_6: g_nNoteNO = 75; break;
}
if (0 <= g_nNoteNO) {
// ノート・オン
midiOutShortMsg(g_hmo, MAKESMSG(0x9, CH, g_nNoteNO, 127));
}
}
break;
case WM_KEYUP:
Trace(_T("U:%x\n"), g_uCode);
g_uCode = 0;
NoteOff();
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCANCEL:
EndDialog(hDlg, IDCANCEL);
break;
}
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
default:
nRet = FALSE; // メッセージを処理しなかった
}
return nRet;
}
void NoteOff(void)
{
if (g_nNoteNO < 0) return;
midiOutShortMsg(g_hmo, MAKESMSG(0x8, CH, g_nNoteNO, 0)); // ノート・オフ
g_nNoteNO = -1;
}
resource.h
EzPlay.rc
// resource script
#include <windows.h>
#include "resource.h"
IDD_MAIN DIALOGEX 100, 100, 320, 200
STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION "EzPlay"
FONT 9, "MS Pゴシック"
BEGIN
END
最終更新:2013年01月22日 20:21