MCIWndOpen MCIWndClose MCIWndPlay




cat makefile
TARGET=mci_wnd_open_test
SAMPLE_AVI="C:\Users\smnb\Videos\sample.avi"
RESOURCE=resource
ICON=test.ico

all: $(TARGET).exe

$(TARGET).exe: $(TARGET).o $(RESOURCE).o
	gcc -mno-cygwin -mwindows -o $@ $^ -lvfw32

$(TARGET).o: $(TARGET).c $(RESOURCE).h
	gcc -mno-cygwin -c $<

$(RESOURCE).o: $(RESOURCE).rc $(RESOURCE).h $(ICON) $(CURSOR)
	windres $< $@

clean:
	-rm *.o *.exe *~

test: $(TARGET).exe
	./$(TARGET).exe $(SAMPLE_AVI)

mmm:
	cat makefile
	cat resource.h
	cat $(RESOURCE).rc
	cat $(TARGET).c

sample.avi:
	cd "C:\Users\smnb\Videos"
	wget http://download.microsoft.com/download/win98se/sample/1/w98/en-us/avisampl.exe
	./avisample.exe
cat resource.h
// resource.h
#define IDS_TEST 1
#define IDM_NEW 40001
#define IDM_OPEN 40002
#define IDM_EXIT 40003
#define IDM_CUT 40011
#define IDM_COPY 40012
#define IDM_PASTE 40013
#define IDM_DELETE 40014
cat resource.rc
#include "resource.h"
TESTICON ICON DISCARDABLE "test.ico"
STRINGTABLE {
	IDS_TEST "Test Test Test\012TEST TEST TEST TEST"
}

TESTMENU MENU {
	POPUP "&FILE" {
		MENUITEM "&NEW" , IDM_NEW
			MENUITEM "&OPEN" , IDM_OPEN
			MENUITEM "E&XIT" , IDM_EXIT
	}
	POPUP "EDIT(&E)" {
		MENUITEM "CUT(&T)" , IDM_CUT
			MENUITEM "COPY(&C)" , IDM_COPY
			MENUITEM "PASTE(&P)" , IDM_PASTE
			MENUITEM "DELETE(&L)" , IDM_DELETE
	}
}
cat mci_wnd_open_test.c
#include <windows.h>
#include <vfw.h>
#include "resource.h"
#define TITLE TEXT("MCIWndOpen Test")

LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
	static HWND hMCI;
	static OPENFILENAME ofn;
	static TCHAR strFile[MAX_PATH];

	switch (msg) {
		case WM_DESTROY:
			MCIWndDestroy(hMCI);
			PostQuitMessage(0);
			return 0;
		case WM_CREATE:
			ofn.lStructSize = sizeof (OPENFILENAME);
			ofn.hwndOwner = hWnd;
			ofn.lpstrFilter = TEXT("Mdia File \0*.avi;*.mpg;*.wav\0");
			ofn.nMaxCustFilter = 256;
			ofn.nFilterIndex = 0;
			ofn.lpstrFile = strFile;
			ofn.nMaxFile = MAX_PATH;
			ofn.Flags = OFN_FILEMUSTEXIST;

			hMCI = MCIWndCreate(hWnd , ((LPCREATESTRUCT)lp)->hInstance ,
					WS_CHILD | WS_VISIBLE | MCIWNDF_NOPLAYBAR , NULL);
			return 0;
		case WM_COMMAND:
			switch (LOWORD(wp)) {
				case IDM_OPEN:
					if (GetOpenFileName(&ofn)) {
						MCIWndClose(hMCI);
						MCIWndOpen(hMCI , strFile , 0);
						MCIWndPlay(hMCI);
    					}
			}
			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;

	winc.style		= CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc	= WndProc;
	winc.cbClsExtra	= winc.cbWndExtra	= 0;
	winc.hInstance		= hInstance;
	winc.hIcon		= LoadIcon(hInstance , TEXT("TESTICON"));
	winc.hCursor		= LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
	winc.lpszMenuName	= TEXT("TESTMENU");
	winc.lpszClassName	= TEXT("TestClass");

	if (!RegisterClass(&winc)) return -1;

	hWnd = CreateWindow(
			TEXT("TestClass") , TITLE ,
			WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			NULL , NULL , hInstance , NULL
			);
	if (hWnd == NULL) return -1;

	while(GetMessage(&msg , NULL , 0 , 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;

}