| 定数 | 解説 |
|---|---|
| MCI_FROM | 所定の構造体の dwFrom メンバに 現在の時間フォーマットで開始位置が格納されている |
| MCI_RECORD_INSERT | 新規に記録した情報を既存のデータに挿入または貼りつける デバイスによってはサポートされない |
| MCI_RECORD_OVERWRITE | データは既存のデータを上書きする |
| MCI_TO | 所定の構造体の dwTo メンバに 現在の時間フォーマットで終了位置が格納されている |
| デジタルビデオフラグ | |
| MCI_DGV_RECORD_AUDIO_STREAM | MCI_DGV_RECORD_PARMS 構造体の dwAudioStream メンバにオーディオストリーム番号が含まれる このフラグを省略した場合、データは最初の物理ストリームに記録される |
| MCI_DGV_RECORD_HOLD | 記録を停止した時に、スクリーンは最初のイメージを保持し MCI_MONITOR コマンドが発行されるまでイメージの表示を再開しない |
| MCI_DGV_RECORD_VIDEO_STREAM | MCI_DGV_RECORD_PARMS 構造体の dwVideoStream メンバにビデオストリーム番号が含まれる このフラグを省略した場合、データは最初の物理ストリームに記録される |
| MCI_DGV_RECT | 矩形を MCI_DGV_RECORD_PARMS 構造体の rc メンバで指定する |
| VCRフラグ | |
| MCI_VCR_RECORD_AT | MCI_VCR_RECORD_PARMS 構造体の dwAt メンバに コマンド全体を開始する時間、またはデバイスにキューを出している場合は デバイスが cue コマンドで指定された 開始位置に達する時間が格納されている |
| MCI_VCR_RECORD_INITIALIZE | デバイスをメディアの開始にシークして ブランクのビデオ及びオーディオの記録を開始し 可能な場合は時刻コードを記録する |
typedef struct {
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
} MCI_RECORD_PARMS;
dwCallback には、メッセージを受けるウィンドウのハンドルをtypedef struct {
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
RECT rc;
DWORD dwAudioStream;
DWORD dwVideoStream;
} MCI_DGV_RECORD_PARMS;
最初の3つのメンバは MCI_RECORD_PARMS 構造体と同じですtypedef struct tagMCI_VCR_RECORD_PARMS {
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
DWORD dwAt;
} MCI_VCR_RECORD_PARMS;
dwAt メンバには、コマンドに影響を与える時間値を指定します| 定数 | 解説 |
|---|---|
| MCI_SAVE_FILE | 所定の構造体の lpfilename メンバに 保存先のファイル名を示す文字列のポインタが格納されている |
| デジタルビデオフラグ | |
| MCI_DGV_RECT | MCI_DGV_SAVE_PARMS 構造体の rc メンバに 有効なフレームバッファ領域の矩形が格納されている |
| MCI_DGV_SAVE_ABORT | 実行中の保存捜査を終了する 他のフラグと組み合わせることはできない |
| MCI_DGV_SAVE_KEEPRESERVE | オリジナルの MCI_RESERVE コマンドで残された 未使用のディスクスペースを割り当て解除しない |
| ビデオオーバレイフラグ | |
| MCI_OVLY_RECT | MCI_OVLY_SAVE_PARMS 構造体の rc メンバに 保存するビデオバッファの領域を示す矩形が格納されている |
typedef struct {
DWORD dwCallback;
LPCSTR lpfilename;
} MCI_SAVE_PARMS;
dwCallback には、通知メッセージを受けるウィンドウのハンドルをtypedef struct {
DWORD dwCallback;
DWORD lpstrFileName;
RECT rc;
} MCI_DGV_SAVE_PARMS;
typedef struct {
DWORD dwCallback;
LPCSTR lpfilename;
RECT rc;
} MCI_OVLY_SAVE_PARMS;
最初の2つのメンバは MCI_SAVE_PARMS 構造体と同じです//resource.h #define IDB_REC 0x100 #define IDB_REC_END 0x101
//リソーススクリプト
#include "resource.h"
KITTY DIALOG 10 , 10 , 100 , 20
FONT 12 , "MS Serif"
STYLE WS_VISIBLE | WS_POPUPWINDOW
CLASS "KITTY"
CAPTION "Kitty on your lap" {
PUSHBUTTON "Record" , IDB_REC , 5 , 5 , 40 , 10
PUSHBUTTON "End" , IDB_REC_END , 50 , 5 , 40 , 10
}
#include <windows.h>
#include "resource.h"
#define TITLE TEXT("Kitty on your lap")
PSTR strFile;
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
static MCI_OPEN_PARMS mop;
static MCI_SAVE_PARMS msp;
switch (msg) {
case WM_DESTROY:
mciSendCommand(mop.wDeviceID , MCI_CLOSE , 0 , 0);
PostQuitMessage(0);
return 0;
case WM_CREATE:
mop.dwCallback = (DWORD)hWnd;
mop.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
mop.lpstrElementName = TEXT("");
mciSendCommand(0 , MCI_OPEN ,
MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |
MCI_OPEN_ELEMENT , (DWORD)&mop);
return 0;
case WM_COMMAND:
switch(LOWORD(wp)) {
case IDB_REC:
mciSendCommand(mop.wDeviceID , MCI_RECORD , 0 , 0);
EnableWindow(GetDlgItem(hWnd , IDB_REC) , FALSE);
EnableWindow(GetDlgItem(hWnd , IDB_REC_END) , TRUE);
break;
case IDB_REC_END:
msp.dwCallback = (DWORD)hWnd;
msp.lpfilename = strFile;
mciSendCommand(mop.wDeviceID , MCI_STOP , MCI_WAIT , 0);
mciSendCommand(mop.wDeviceID , MCI_SAVE ,
MCI_WAIT | MCI_SAVE_FILE , (DWORD)&msp);
EnableWindow(GetDlgItem(hWnd , IDB_REC) , TRUE);
EnableWindow(GetDlgItem(hWnd , IDB_REC_END) , FALSE);
break;
}
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
if (*lpCmdLine == 0) {
MessageBox(NULL , TEXT("Input file name.") , NULL , MB_OK);
return 0;
}
strFile = lpCmdLine;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = 0;
winc.cbWndExtra = DLGWINDOWEXTRA;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = CreateSolidBrush(GetSysColor(COLOR_MENU));
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hwnd = CreateDialog(hInstance , TEXT("KITTY") , 0 , NULL);
if (hwnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
このプログラムは、コマンドライン引数で保存する WAVE 形式ファイル名を指定し