埼玉大学 情報システム工学科
小林 貴訓
プログラミング演習
IV
第
7回 マウス,キーボード,サウンド,
マウス入力
クリックイベントのコールバック関数の登録
クリックイベントのコールバック関数
glutMouseFunc(mouse); // マウスクリックコールバック関数の指定
static int MouseLB_ON=0; //左マウスボタン押下フラグ
static int MouseRB_ON=0; //右マウスボタン押下フラグ
void mouse(int button, int state, int x, int y){
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
MouseLB_ON = 1; printf("(%3d,%3d)で左ボタンが押されました¥n", x, y); }else if (button == GLUT_LEFT_BUTTON && state == GLUT_UP){
MouseLB_ON = 0; printf("(%3d,%3d)で左ボタンを離しました¥n", x, y);
}else if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN){ MouseRB_ON = 1; printf("(%3d,%3d)で右ボタンが押されました¥n", x, y); }else if (button == GLUT_RIGHT_BUTTON && state == GLUT_UP){
MouseRB_ON = 0; printf("(%3d,%3d)で右ボタンを離しました¥n", x, y); }
マウス入力
ドラッグイベントのコールバック関数の登録
ドラッグイベントのコールバック関数
マウス移動のコールバック関数の登録
マウス移動のコールバック関数
glutMotionFunc(dragMotion); // マウスドラッグコールバック関数の指定void dragMotion(int x, int y){
if (MouseLB_ON==1) printf(“(%3d,%3d)で左ドラッグ中...¥n", x, y);
else if (MouseRB_ON==1) printf(“(%3d,%3d)で右ドラッグ中...¥n", x, y); }
glutPassiveMotionFunc(passiveMotion);// マウス移動コールバック関数の指定
void passiveMotion(int x, int y){
printf("(%3d,%3d)でマウス移動中...¥n", x, y); }
キー入力
通常キーのコールバック関数(押したとき)の登録
通常キーのコールバック関数(押したとき)
glutKeyboardFunc(keyboard); //通常キーコールバック関数の指定(押したとき)
void keyboard(unsigned char key, int x, int y){ switch (key) { case '1': printf("(%3d,%3d)で1が押されました¥n", x, y); break; case '2': printf("(%3d,%3d)で2が押されました¥n", x, y); break; case '3': printf("(%3d,%3d)で3が押されました¥n", x, y); break; } }
キー入力
通常キーのコールバック関数(離したとき)の登録
通常キーのコールバック関数(離したとき)
glutKeyboardUpFunc(keyboardUp); //通常キーコールバック関数の指定(離したとき)
void keyboardUp(unsigned char key, int x, int y){ switch (key) { case '1': printf("(%3d,%3d)で1が離されました¥n", x, y); break; case '2': printf("(%3d,%3d)で2が離されました¥n", x, y); break; case '3': printf("(%3d,%3d)で3が離されました¥n", x, y); break; }
キー入力
特殊キーのコールバック関数(押したとき)の登録
特殊キーのコールバック関数(押したとき)
glutSpecialFunc(specialKey); //特殊キーコールバック関数の指定(押したとき)
void specialKey(int key, int x, int y){ switch (key) { case GLUT_KEY_UP: printf("(%3d,%3d)で[↑]が押されました¥n", x, y); break; case GLUT_KEY_DOWN: printf("(%3d,%3d)で[↓]が押されました¥n", x, y); break; case GLUT_KEY_LEFT: printf("(%3d,%3d)で[←]が押されました¥n", x, y); break; case GLUT_KEY_RIGHT: printf("(%3d,%3d)で[→]が押されました¥n", x, y); break; } }
キー入力
特殊キーのコールバック関数(離したとき)の登録
特殊キーのコールバック関数(離したとき)
glutSpecialUpFunc(specialKeyUp); //特殊キーコールバック関数の指定(離したとき)
void specialKeyUp(int key, int x, int y){ switch (key) { case GLUT_KEY_UP: printf("(%3d,%3d)で[↑]が離されました¥n", x, y); break; case GLUT_KEY_DOWN: printf("(%3d,%3d)で[↓]が離されました¥n", x, y); break; case GLUT_KEY_LEFT: printf("(%3d,%3d)で[←]が離されました¥n", x, y); break; case GLUT_KEY_RIGHT: printf("(%3d,%3d)で[→]が離されました¥n", x, y); break; }
キーリピート
キーリピートを無効にするには以下を書く
サウンドを鳴らす
Playsound
1.windows.hをインクルード
2.winmm.libをリンク
3.再生したい
wavファイルをソースと同じフォルダに配置
4.PlaySound命令を発行する
PlaySound( “bgm.wav”, NULL,
SND_FILENAME | SND_ASYNC | SND_LOOP );
※この方法が最も簡単だが,同時に再生できるのは1つのwavファイルのみ
無限ループ 非同期再生
サウンドを鳴らす
MCI(Media Control Interface)コマンドを使う
1.
windows.hをインクルード
2.winmm.libをリンク
デバイスの準備
static MCI_OPEN_PARMS mciOpenParam1; mciOpenParam1.lpstrDeviceType
=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO; // メディアの種類
mciOpenParam1.lpstrElementName=“bell.wav”; // ファイル名 // mciデバイスのオープン
mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE |
MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT, (DWORD_PTR)&mciOpenParam1);