4-4.ÆÄÀÏ ¿­±â

½ÇÇàÁß¿¡ µ¿¿µ»ó ÆÄÀÏÀ» ¿­¾î º¸ÀÚ. 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ÀÌ ³ª¿À´Â°Ç ¿µ»óÀÌ ´Ê°Ô ³ª¿Í ½Ç½À¿ëÀ¸·Î Àû´çÄ¡ ¾Ê´Ù. ¿µÈ­³ª µå¶ó¸¶µµ ±¦ÂúÁö¸¸ µµÀԺΰ¡ ±æ¾î óÀ½ºÎÅÍ Äô¦Äô¦ ¼Ò¸®°¡ ³ª¿À´Â ¹ÂÁ÷ ºñµð¿À°¡ Á¦ÀÏ ÁÁ´Ù. Àû´çÈ÷ Å©°í Çػ󵵵µ ÃæºÐÇÑ µ¿¿µ»óÀ» °ñ¶ó Å×½ºÆ®ÇØ º¸ÀÚ.