½ÇÇàÁß¿¡ µ¿¿µ»ó ÆÄÀÏÀ» ¿¾î º¸ÀÚ. WM_CREATE¿¡¼ »ùÇà µ¿¿µ»óÀ»
ÀÚµ¿À¸·Î ¿µµ·Ï µÇ¾î Àִµ¥ ¿øÇÏ´Â ÀÓÀÇÀÇ µ¿¿µ»óÀ» ¿ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ´Ù¸¥ µ¿¿µ»óÀ» ¿¸é Àç»ýÁßÀÎ
µ¿¿µ»óÀº Áï½Ã ÁßÁöÇØ¾ß ÇÑ´Ù. OpenMovie ÇÔ¼ö¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.
void OpenMovie(LPCTSTR movie) {
char
MoviePathAnsi[MAX_PATH];
TCHAR
Title[MAX_PATH + 10];
if
(isOpen) {
CloseMovie();
}
status
= P_STOP;
WideCharToMultiByte(CP_ACP,
0, movie, -1, MoviePathAnsi, MAX_PATH, NULL, NULL);
int
ret = avformat_open_input(&fmtCtx, MoviePathAnsi, NULL, NULL);
if
(ret != 0) {
isOpen
= false;
MessageBox(hWndMain,
TEXT("µ¿¿µ»ó ÆÄÀÏÀÌ ¾ø½À´Ï´Ù."), TEXT("¾Ë¸²"), MB_OK);
return;
}
wsprintf(Title,
TEXT("%s - %s"), lpszClass, movie);
SetWindowText(hWndMain,
Title);
avformat_find_stream_info(fmtCtx,
NULL);
....
Àç»ýÁßÀ̸é CloseMovie¸¦ È£ÃâÇÏ¿© Áï½Ã ÁßÁöÇÑ´Ù. CloseMovie ÇÔ¼ö¿¡¼ status¸¦ P_EXIT·Î ¼³Á¤ÇÏ¸é ½º·¹µå´Â Áï½Ã Á¾·áÇÏ¸ç °ü·Ã ¸Þ¸ð¸®¸¦ ¸ðµÎ ÇØÁ¦ÇÑ´Ù. ½º·¹µå°¡
¿ÏÀüÈ÷ Á¾·áÇÒ ¶§±îÁö ´ë±âÇØÁֹǷΠCloseMovie¸¸ ºÎ¸£¸é ¸ðµç Á¤¸®°¡ ³¡³´Ù. ¾î¶² °æ¿ì¶óµµ óÀ½ºÎÅÍ ´Ù½Ã ÃʱâÈÇÒ ¼ö ÀÖµµ·Ï ´ëºñÇØ¾ß ÇÑ´Ù. ¼¶¼¼ÇÑ
µÞÁ¤¸®°¡ Áß¿äÇϸç Â±â¸¦ ÀüÇô ³²±âÁö ¾Ê¾Æ¾ß »õ µ¿¿µ»óÀ» ¹«»çÈ÷ ¿ ¼ö ÀÖ´Ù.
Àç»ýÁßÀÎ µ¿¿µ»óÀ» ´ÝÀº ÈÄ ÇÊ¿äÇÑ Ãʱâȸ¦ ¼öÇàÇÑ´Ù. µ¿ÀÛ¿¡ ÇÊ¿äÇÑ
¸ðµç º¯¼ö¸¦ ÀÌ ½ÃÁ¡¿¡¼ ÃʱâÈÇØ¾ß ÇÑ´Ù. Çѹø¸¸ ¼öÇàµÇ´Â Àü¿ª Ãʱâ½ÄÀ¸·Î´Â ¾ÈµÇ°í ÆÄÀÏÀ» ¿¶§¸¶´Ù
ÃʱâÈÇØ¾ß ÇÑ´Ù. CloseMovie°¡ Á¾·á¸¦ À§ÇØ º¯°æÇØ ³õÀº status¸¦ P_STOPÀ¸·Î ÃʱâÈÇØ ³ö¾ß ½º·¹µå°¡ Å»ÃâÇÏÁö ¾Ê°í Àß µ¹¾Æ°£´Ù. ŸÀÌƲ
¹Ù¿¡ ÆÄÀϸíÀ» Ç¥½ÃÇÑ´Ù. ÀÓÀÇÀÇ ÆÄÀÏÀ» ¿ ¼ö ÀÖÀ¸´Ï Áö±Ý º¸°í ÀÖ´Â ÆÄÀÏÀÌ ¹«¾ùÀÎÁöµµ Ç¥½ÃÇØ¾ß ÇÑ´Ù.
ÆгÎÀÇ Open ¹öÆ°À» ´©¸£¸é »õ µ¿¿µ»óÀ» ºÒ·¯ ¿Â´Ù. °øÅë ´ëÈ»óÀÚ¸¦ ¿¾î ÆÄÀÏ °æ·Î¸¦ ±¸ÇÏ°í ÆÄÀÏÀ» ¿©´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ°í
ID_BTNOPEN¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
case
WM_COMMAND:
switch
(LOWORD(wParam)) {
case
ID_BTNOPEN:
OpenMediaFile(true);
break;
}
return
0;
void OpenMediaFile(bool reset) {
OPENFILENAME
OFN;
TCHAR
MoviePath[MAX_PATH] = TEXT("");
memset(&OFN,
0, sizeof(OPENFILENAME));
OFN.lStructSize
= sizeof(OPENFILENAME);
OFN.hwndOwner
= hWndMain;
OFN.lpstrFilter
= TEXT("¸ðµç ÆÄÀÏ(*.*)\0*.*\0");
OFN.lpstrFile
= MoviePath;
OFN.nMaxFile
= MAX_PATH;
if
(GetOpenFileName(&OFN) != 0) {
OpenMovie(MoviePath);
}
}
ÆÄÀÏ ¿±â °øÅë ´ëÈ»óÀڷκÎÅÍ ÆÄÀÏ °æ·Î¸¦ ÀÔ·Â¹Þ¾Æ OpenMovie ÇÔ¼ö·Î
Àü´ÞÇÑ´Ù. ÀÌÁ¦ ½ÇÇàÁß¿¡ ÀÓÀÇÀÇ ÆÄÀÏÀ» ¿ ¼ö ÀÖ´Ù.
ÆÄÀÏÀ» ¿¸é ÀÌÀü Àç»ýÇÏ´ø ÆÄÀÏÀ» Áï½Ã ÁßÁöÇÏ°í ¿¾î ÁØ´Ù. ±×·¯³ª
¾ÆÁ÷ ȸé 󸮰¡ ¿ÏÀüÇÏÁö ¾Ê¾Æ ÀÌÀü µ¿¿µ»ó°ú »õ µ¿¿µ»óÀÇ À̹ÌÁö°¡ °ãÄ£´Ù. ÀÌÀü µ¿¿µ»óÀÇ À̹ÌÁö¸¦
Áö¿ö¾ß Çϴµ¥ ±×º¸´Ù´Â »õ µ¿¿µ»ó¿¡ ¸Â°Ô À©µµ¿ìÀÇ Å©±â¸¦ ¹Ù²Ù´Â °ÍÀÌ ´õ ÁÁ´Ù. µ¿¿µ»ó Å©±â¸¦ Àü´ÞÇϸé
À©µµ¿ìÀÇ Å©±â¿Í À§Ä¡¸¦ Á¶Á¤ÇÏ´Â ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
void AdjustWindowSizePos(int width, int height) {
RECT
crt, wrt;
if
(IsZoomed(hWndMain)) {
return;
}
if
(op.listShow) {
SetRect(&crt,
0, 0, width + op.listWidth + op.gap, height + PanelHeight);
}
else {
SetRect(&crt,
0, 0, width, height + PanelHeight);
}
AdjustWindowRect(&crt,
WS_OVERLAPPEDWINDOW, FALSE);
GetWindowRect(hWndMain,
&wrt);
wrt.right
= wrt.left + (crt.right - crt.left);
wrt.bottom
= wrt.top + (crt.bottom - crt.top);
HMONITOR
hMon = MonitorFromRect(&wrt, MONITOR_DEFAULTTOPRIMARY);
MONITORINFO
mi = { sizeof(MONITORINFO), };
GetMonitorInfo(hMon,
&mi);
if
(wrt.right - wrt.left > mi.rcWork.right - mi.rcWork.left) {
wrt.right
= wrt.left + mi.rcWork.right - mi.rcWork.left;
}
if
(wrt.bottom - wrt.top > mi.rcWork.bottom - mi.rcWork.top) {
wrt.bottom
= wrt.top + mi.rcWork.bottom - mi.rcWork.top;
}
int
xdiff = wrt.right - mi.rcWork.right;
if
(xdiff > 0) {
wrt.left
-= xdiff;
wrt.right
-= xdiff;
}
int
ydiff = wrt.bottom - mi.rcWork.bottom;
if
(ydiff > 0) {
wrt.top
-= ydiff;
wrt.bottom
-= ydiff;
}
SetWindowPos(hWndMain,
NULL, wrt.left, wrt.top, wrt.right - wrt.left, wrt.bottom - wrt.top,
SWP_NOZORDER);
}
´Ü¼øÇÑ µ¿ÀÛÀÏ °Å °°Áö¸¸ ó¸®ÇØ¾ß ÇÒ À⹫°¡ ¸¹¾Æ ¿¹»ó ¿Ü·Î º¹ÀâÇÏ´Ù. ÃÖ´ëÈ
»óÅÂÀ̸é À©µµ¿ì Å©±â¸¦ °Á¦·Î ¹Ù²ÙÁö ¾Ê°í ±×´ë·Î À¯ÁöÇÑ´Ù. Â÷ÈÄ µ¿¿µ»óÀ» À©µµ¿ì Å©±â¿¡ ¸Â°Ô ½ºÄÉÀϸµÇÒ
°ÍÀÌ´Ù. ¸ñ·ÏÀÇ º¸ÀÓ ¿©ºÎ¿¡ µû¶ó ÇÊ¿äÇÑ Å©±â°¡ ´Ù¸£´Ù.
À©µµ¿ì Å©±â¸¦ Á¶Á¤ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÛ¾÷¿µ¿ª Å©±â¸¦ Á¶Á¤ÇØ¾ß ÇÑ´Ù. À©µµ¿ì¸¦
µ¿¿µ»ó¿¡ ¸ÂÃ߸é ŸÀÌƲ ¹Ù³ª °æ°è¼± ¶§¹®¿¡ ½ÇÁ¦ µ¿¿µ»óÀ» Ãâ·ÂÇÒ ¿µ¿ªÀÌ Á¼¾ÆÁø´Ù. ¿øÇÏ´Â ÀÛ¾÷¿µ¿ª Å©±â¸¦
ÁöÁ¤ÇÏ¿© AdjustWindowRect ÇÔ¼ö¸¦ È£ÃâÇϸé À©µµ¿ì Å©±â¸¦ °è»êÇØ ÁØ´Ù. À©µµ¿ì¸¦ µ¿¿µ»ó Å©±â¿¡ ¸ÂÃ߸é ÀÛ¾÷ ¿µ¿ªÀÌ Á¼¾Æ ÀϺΰ¡ Àß·Á º¸ÀδÙ.
Å©±â¸¦ °áÁ¤Çß´Ù°í Çؼ ±×´ë·Î Àû¿ëÇÒ ¼ö´Â ¾ø´Ù. ȸéÀÌ 1024 * 768 Å©±âÀε¥ FHD ¿µ»óÀ» ¿¾ú´Ù°í Çؼ À©µµ¿ì¸¦ 1920 * 1080À¸·Î ¸¸µé ¼ö´Â ¾ø´Ù. ¹°¸®ÀûÀΠȸé Å©±â¸¦ ÃÊ°úÇÒ
¼ö´Â ¾øÀ¸´Ï »óÇѼ±ÀÌ ÀÖ´Ù. ±×·¸´Ù°í Çؼ ȸé Å©±â¿¡ ¸ÂÃ߾µ ¾ÈµÈ´Ù. Á¤È®ÇÏ°Ô´Â ÀÛ¾÷ Ç¥½ÃÁÙÀ» Á¦¿ÜÇÑ ¿öÅ©¿¡¸®¾î Å©±â¿¡ ¸ÂÃß¾î¾ß ÇÑ´Ù. °Ô´Ù°¡
´ÙÁß ¸ð´ÏÅÍ¿¡¼´Â ¸ð´ÏÅ͸¶´Ù Çػ󵵰¡ ´Þ¶ó ÇöÀç ¸ð´ÏÅ͸¦ ±âÁØÀ¸·Î ÇØ¾ß ÇÑ´Ù. ±×·¡¼ À⹫°¡ ¸¹´Ù.
À©µµ¿ì ¿µ¿ªÀ¸·ÎºÎÅÍ ÇöÀç ¸ð´ÏÅ͸¦ Á¶»çÇÑ´Ù. ¾î´À ¸ð´ÏÅ͵µ ¾Æ´Ï¸é
ÁÖ ¸ð´ÏÅ͸¦ ã´Â´Ù. ¸ð´ÏÅÍÀÇ Á¤º¸¸¦ Á¶»çÇÑ ÈÄ rcWork ¸â¹ö¸¦
ÀÐÀ¸¸é ¿öÅ©¿¡¸®¾îÀÇ ÁÂÇ¥¸¦ ¾Ë ¼ö ÀÖ´Ù. ¿ÞÂÊ¿¡ ³õÀÎ ¸ð´ÏÅÍ´Â À½¼ö ¿µ¿ªÀÏ ¼öµµ ÀÖÁö¸¸ ¾î·°Å³ª ÀÌ
¿µ¿ª ¾È¿¡ À©µµ¿ì¸¦ ³õÀ¸¸é µÈ´Ù.
¿öÅ© ¿¡¸®¾îº¸´Ù´Â À©µµ¿ì Å©±â¸¦ ´õ ÀÛ°Ô ¼³Á¤ÇÑ´Ù. ±×¸®°í À§Ä¡µµ
Á¶Á¤ÇÑ´Ù. ÀÛÀº µ¿¿µ»óÀ» È¸é ¾Æ·¡¿¡¼ º¸´Ù°¡ Å« µ¿¿µ»óÀ» ¿¸é ¾Æ·¡ÂÊ ºÎºÐÀÌ È¸é ¾Æ·¡·Î ¼û¾î ´Ù
º¸ÀÌÁö ¾Ê´Â´Ù. ÀÌ »óȲÀÏ ¶§ À©µµ¿ì¸¦ ¿öÅ© ¿¡¸®¾î ¹Ù´Ú¿¡ ¸ÂÃç À̵¿½ÃŲ´Ù. ¸¶Âù°¡Áö·Î ¿À¸¥ÂÊÀÌ °¡·ÁÁö¸é È¸é ¾ÈÀ¸·Î ¸ð¼Å¿Â´Ù. ¿ÞÂÊ°ú À§ÂÊÀº
±»ÀÌ ÀÌ·¸°Ô±îÁö ÇÒ ÇÊ¿ä ¾ø´Ù.
ÃÖÁ¾ÀûÀ¸·Î Á¶Á¤ÇÑ ÁÂÇ¥¿¡ À©µµ¿ì¸¦ ¿Å±â¸é µÈ´Ù. OpenMovie ÇÔ¼öÀÇ
³¡¿¡¼ ½º·¹µå¸¦ ±âµ¿Çϱâ Á÷Àü¿¡ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ¾î¶² µ¿¿µ»óÀ» ¿¾îµµ È¸é ¾ÈÀ¸·Î µé¾î¿Â´Ù. ´Ü, ºñµð¿À ½ºÆ®¸²ÀÌ ¾ø´Â °æ¿ì´Â
500, 300 Á¤µµ·Î Å©±â¸¦ Àâ°í ȸéÀ» Áö¿î´Ù. Ưº°ÇÑ Àǹ̴ ¾ø°í º¼·ý Á¶Á¤Àº °¡´ÉÇؾß
ÇÏ´Ï Æ®·¢¹Ù°¡ º¸ÀÌ´Â Á¤µµÀÇ Å©±â·Î Àâ¾Ò´Ù.
void OpenMovie(LPCTSTR movie) {
....
if
(vidx >= 0) {
AdjustWindowSizePos(vPara->width,
vPara->height);
}
else {
AdjustWindowSizePos(500,
300);
InvalidateRect(hWndMain,
NULL, TRUE);
}
hPlayThread
= CreateThread(NULL, 0, PlayThread, NULL, 0, &ThreadID);
isOpen
= true;
}
ÀÌÁ¦ ½ÇÇàÁß¿¡¶óµµ ¾Æ¹« ÆÄÀÏÀ̳ª ¿¾î Àç»ýÇÒ ¼ö ÀÖ°í À©µµ¿ì À§Ä¡¿Í Å©±âµµ Àß Á¶Á¤µÈ´Ù. Áö±Ý±îÁö´Â 10ÃÊÂ¥¸®
fire.avi¸¸À¸·Îµµ ÃæºÐÇߴµ¥ ÀÌÁ¦ ¼º´ÉÀ̳ª ½ÌÅ©µµ ¸ÂÃç¾ß ÇÏ´Ï ´õ Å« ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù. µ¿¿µ»óÀº
³Ê¹« Ä¿ Æ®·¡ÇÈÀ» °¨´çÇÒ ¼ö ¾ø°í ÀúÀÛ±Ç ¹®Á¦µµ ÀÖ¾î °ÁÂ¿Í ÇÔ²² Á¦°øÇÒ ¼ö´Â ¾ø´Ù. ¿©·¯ºÐ ÇÏµå µð½ºÅ©¿¡
ÀÖ´Â Àû´çÇÑ µ¿¿µ»óÀ» »ç¿ëÇÏÀÚ.
ù ȸéºÎÅÍ FBI WarningÀÌ ³ª¿À´Â°Ç ¿µ»óÀÌ ´Ê°Ô ³ª¿Í ½Ç½À¿ëÀ¸·Î
Àû´çÄ¡ ¾Ê´Ù. ¿µÈ³ª µå¶ó¸¶µµ ±¦ÂúÁö¸¸ µµÀԺΰ¡ ±æ¾î óÀ½ºÎÅÍ Äô¦Äô¦ ¼Ò¸®°¡ ³ª¿À´Â ¹ÂÁ÷ ºñµð¿À°¡
Á¦ÀÏ ÁÁ´Ù. Àû´çÈ÷ Å©°í Çػ󵵵µ ÃæºÐÇÑ µ¿¿µ»óÀ» °ñ¶ó Å×½ºÆ®ÇØ º¸ÀÚ.