4-7.º¼·ý Á¶Á¤

¿Àµð¿À Ãâ·ÂÀÌ °¡´ÉÇØÁ³À¸´Ï º¼·ý Á¶Àýµµ °¡´ÉÇØ¾ß ÇÑ´Ù. º¼·ýÀ» Á¶Á¤ÇÏ´Â ÀåÄ¡´Â ¿©·¯ °¡Áö°¡ ÀÖ´Ù. Å°º¸µå°¡ ±âº»ÀÌÁö¸¸ ÄÁÆ®·ÑÀ» ÅëÇØ Á¶Á¤ÇÒ ¼öµµ ÀÖ°í ¸¶¿ì½ºÀÇ ÈÙÀ» ±¼¸± ¼öµµ ÀÖ´Ù. ¶Ç Áï½Ã ¼Ò¸®¸¦ ²ô´Â ±â´Éµµ ÇÊ¿äÇÏ´Ù. À½¼Ò°Å´Â ÀÏÁ¾ÀÇ »óÅÂÀ̸ç ÀÌÀü »óÅ·Π½Å¼ÓÇÏ°Ô µ¹¾Æ°¡¾ß ÇÏ´Ï º¯¼ö°¡ ÇÊ¿äÇÏ´Ù.

 

bool isMute;

DWORD oldVolume;

 

isMute´Â À½¼Ò°Å »óŶó´Â ¶æÀÌ°í oldVolume´Â ÀÌÀüÀÇ º¼·ý°ªÀÌ´Ù. ÇöÀç º¼·ý°ªÀº »ç¿îµå Ä«µå°¡ °¡Áö°í ÀÖ¾î µû·Î º¯¼ö¿¡ ÀúÀåÇÒ ÇÊ¿ä ¾ø´Ù. ÆгÎÀÇ Æ®·¢¹Ù´Â ÇöÀç º¼·ýÀ» º¸¿© ÁÖ°í ¶Ç º¼·ýÀ» Á¶Á¤Çϱ⵵ ÇÑ´Ù. ÃÖÃÊ ÇöÀç º¼·ýÀ» º¸¿© ÁÖ°í º¼·ýÀÇ ´Ü°è¸¦ ¼³Á¤ÇÑ´Ù.

 

LRESULT CALLBACK PanelWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {

       switch (iMessage) {

       case WM_CREATE:

                 ....

                 SendMessage(hVolume, TBM_SETRANGE, FALSE, MAKELPARAM(0, 100));

                 DWORD voldevice, vol;

                 waveOutGetVolume(wa.hWaveDev, &voldevice);

                 vol = DWORD(LOWORD(voldevice) * 100.0 / 0xffff + 0.5);

                 SendMessage(hVolume, TBM_SETPOS, TRUE, vol);

 

Waveform API´Â ÃÖ´ë 65535(0xffff) ´Ü°èÀÇ º¼·ýÀ» Áö¿øÇÏÁö¸¸ ÀÌ·¸°Ô±îÁö Çػ󵵰¡ ³ôÀ» ÇÊ¿ä´Â ¾ø´Ù. ¹éºÐÀ² Á¤µµ¸é ÃæºÐÇÏ´Ù. ±×·¡¼­ Æ®·¢¹ÙÀÇ ¹üÀ§¸¦ 0 ~ 100À¸·Î ¼³Á¤Çß´Ù. ÇöÀç º¼·ýÀº waveOutGetVolume ÇÔ¼ö·Î Á¶»çÇϴµ¥ »óÇÏÀ§ ¿öµå¿¡ ÁÂ, ¿ì º¼·ý°ªÀ» µ¹·ÁÁØ´Ù.

voldevice´Â ÀåÄ¡ÀÇ º¼·ý°ªÀÌ´Ù. Á¿츦 ±»ÀÌ ±¸ºÐÇÒ ÇÊ¿ä´Â ¾ø°í ÁÂ¿ì º¼·ýÀ» ´Ù¸£°Ô Çؼ­ µè´Â »ç¶÷µµ µå¹°´Ù. °¡´ÉÀº ÇÏÁö¸¸ µÎ °ªÀ» µû·Î ´Ù·ê ÇÊ¿ä ¾øÀ¸´Ï ÇÏÀ§ ¿öµåÀÇ ¿ÞÂÊ º¼·ý¸¸ ÃëÇÑ´Ù. ÀÌ °ªÀ» ¹éºÐÀ²·Î ¹Ù²Ù¾î vol º¯¼ö¿¡ ´ëÀÔÇ쵂 ¹Ý¿Ã¸² 󸮰¡ ÇÊ¿äÇÏ´Ù. ¹éºÐÀ²ÀÇ º¼·ý°ªÀ» ÀúÀåÇÏ´Â º°µµÀÇ º¯¼ö°¡ ¾ø°í Ç×»ó ÀåÄ¡ÀÇ º¼·ý°ªÀ» ±âÁØÀ¸·Î Çϱ⠶§¹®¿¡ µÎ °ªÀ» »óÈ£ º¯È¯ÇÏ¸ç »ç¿ëÇØ¾ß ÇÑ´Ù. À̶§ Á¤¼ö ³ª´°¼ÀÀÇ ¿ÀÂ÷°¡ ¹ß»ýÇϴµ¥ °£´ÜÇÏ°Ô ´ÙÀ½°ú °°ÀÌ ¼³¸íÇÒ ¼ö ÀÖ´Ù.

 

65536 ¹üÀ§ÀÇ 10% °ª = 65536 / 10 = 6553

6553ÀÇ ¹éºÐÀ²°ª = 6553 * 100 / 65536 = 9%

 

ÀåÄ¡¿¡°Ô "10% º¼·ýÀ¸·Î ¼³Á¤ÇØ" ¶ó°í Çϸé ÃÖ´ë¹üÀ§¸¦ 10À¸·Î ³ª´« 6553À¸·Î ¼³Á¤Çϸç À̶§ 0.6Àº ¹ö·ÁÁø´Ù. ÀÌ Á¤µµ´Â ¹ö·Áµµ Á¤È®µµ»óÀÇ ¹®Á¦´Â ¾ø´Ù. ±×·¯³ª ÀåÄ¡¿¡°Ô "³Ê Áö±Ý º¼·ýÀÌ ¸î %¾ß" ¶ó°í ¹°À¸¸é 9%¶ó°í ÀÀ´äÇÑ´Ù. Á¤È®ÇÑ ¿¬»ê °á°ú´Â 9.99984ÀÌÁö¸¸ Á¤¼ö·Î ij½ºÆÃÇϸé 9°¡ µÇ¾î ¹ö¸°´Ù. ÀÌ·± ¿ÀÂ÷¸¦ ¹æÁöÇϱâ À§ÇØ ¼Ò¼öÁ¡ À§Ä¡¿¡¼­ ¹Ý¿Ã¸² ó¸®ÇÑ´Ù. º¼·ýÀ» Á¶Á¤ÇÏ´Â ´ÙÀ½ µÎ ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.

 

void AdjustVolumeTo(int vol) {

       int voldevice;

 

       if (isMute) {

                 isMute = false;

       }

 

       int tvol = max(min(vol, 100), 0);

       voldevice = tvol * 0xffff / 100;

       waveOutSetVolume(wa.hWaveDev, MAKELONG(voldevice, voldevice));

       SendMessage(hVolume, TBM_SETPOS, TRUE, tvol);

}

 

void AdjustVolume(bool up) {

       DWORD voldevice, vol;

 

       if (isMute) {

                 vol = oldVolume;

       } else {

                 waveOutGetVolume(wa.hWaveDev, &voldevice);

                 vol = DWORD(LOWORD(voldevice) * 100.0 / 0xffff + 0.5);

       }

       AdjustVolumeTo(vol + (up ? 10 : -10));

}

 

AdjustVolumeTo ÇÔ¼ö´Â Àý´ë º¼·ýÀ¸·Î Á¶Á¤ÇÑ´Ù. À½¼Ò°Å »óÅÂÀ̸é Ç®°í ÇØ´ç º¼·ýÀ¸·Î ÁöÁ¤ÇÑ´Ù. º¼·ý º¯°æÀ» Áö½ÃÇß´Ù´Â °ÍÀº À½¼Ò°Å »óŸ¦ ÇØÁ¦ÇÑ´Ù´Â Àǹ̸¦ ³»Æ÷ÇϹǷΠǮ¾îµµ ¹«¹æÇÏ´Ù. º¼·ý°ªÀÌ ¹éºÐÀ² ¹üÀ§¸¦ ³Ñ¾î°¡Áö ¾Êµµ·Ï Á¶Á¤ÇÑ´Ù. Á¶Á¤µÈ °ªÀ» ÀåÄ¡ º¼·ý°ªÀ¸·Î ¹Ù²Ù¾î ÁÂ¿ì º¼·ýÀ» °°ÀÌ ¹Ù²Û´Ù. Æ®·¢¹Ù¿¡ ÇöÀç º¼·ýÀ» Ç¥½ÃÇÑ´Ù.

AdjustVolume ÇÔ¼ö´Â ÇöÀç º¼·ý¿¡¼­ ÇѴܰ辿 À§ ¶Ç´Â ¾Æ·¡·Î »ó´ëÀûÀÎ º¼·ýÀ» Á¶Á¤ÇÑ´Ù. À½¼Ò°Å »óÅÂÀ̸é ÀÌÀüÀÇ º¼·ýÀ¸·Î µ¹¾Æ°£´Ù. ÀåÄ¡ÀÇ ÇöÀç º¼·ýÀ» ±¸ÇÑ ÈÄ ¹æÇâ¿¡ µû¶ó 10 ¶Ç´Â -10¸¸Å­ Áõ°¨½ÃŲ´Ù. 10´Ü°è¸é ÇØ»ó·ÂÀÌ ³·Áö¸¸ ¸¶½ºÅÍ º¼·ýµµ ÀÖ¾î ºÎÁ·ÇÏÁö´Â ¾Ê´Ù. °áÁ¤ÇÑ º¼·ý°ªÀ» AdjustVolumeTo ÇÔ¼ö·Î Àü´ÞÇϸé À½¼Ò°Åµµ Ç®¸®°í º¼·ýµµ ¼³Á¤µÈ´Ù.

º¼·ýÀ» Á¶Á¤ÇÏ´Â ±â´ÉÀº ´Ù ¸¸µé¾ú°í ÀÌÁ¦ Àû´çÇÑ ¶§¿¡ ÀÌ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. Å°º¸µå ÀÔ·ÂÀ» ¹ÞÀ¸·Á¸é ¾×¼¿·¯·¹ÀÌÅÍ°¡ ÇÊ¿äÇÏ´Ù. WM_KEYDOWNÀ¸·Îµµ Å° ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ÀÖÁö¸¸ Æ÷Ä¿½º 󸮰¡ °ñÄ¡ ¾ÆÇÁ´Ù. ¾ÕÀ¸·Î »ç¿ëÇÒ ¾×¼¿·¯·¹ÀÌÅ͸¦ ´Ù Ãß°¡ÇÑ´Ù.

 

enum eAccel {

       A_SPACE, A_LEFT, A_RIGHT, A_UP, A_DOWN, A_PRIOR, A_NEXT, A_BACK,

       A_A, A_Q, A_M, A_W, A_S, A_RETURN, A_ESC

};

ACCEL arAccel[] = {

       { FVIRTKEY, VK_SPACE, A_SPACE },

       { FVIRTKEY, VK_LEFT, A_LEFT },

       { FVIRTKEY | FCONTROL, VK_LEFT, A_LEFT },

       { FVIRTKEY | FSHIFT, VK_LEFT, A_LEFT },

       { FVIRTKEY, VK_RIGHT, A_RIGHT },

       { FVIRTKEY | FCONTROL, VK_RIGHT, A_RIGHT },

       { FVIRTKEY | FSHIFT, VK_RIGHT, A_RIGHT },

       { FVIRTKEY, VK_UP, A_UP },

       { FVIRTKEY, VK_DOWN, A_DOWN },

       { FVIRTKEY, VK_PRIOR, A_PRIOR },

       { FVIRTKEY, VK_NEXT, A_NEXT },

       { FVIRTKEY, VK_BACK, A_BACK },

       { FVIRTKEY, 'Q', A_Q },

       { FVIRTKEY, 'A', A_A },

       { FVIRTKEY, 'W', A_W },

       { FVIRTKEY, 'S', A_S },

       { FVIRTKEY, 'M', A_M },

       { FVIRTKEY, VK_RETURN, A_RETURN },

       { FVIRTKEY, VK_ESCAPE, A_ESC },

};

#define ARSIZE(ar) (sizeof(ar)/sizeof(ar[0]))

 

ARSIZE ¸ÅÅ©·Î´Â ¹è¿­ÀÇ ¿ä¼Ò °³¼ö¸¦ Á¶»çÇÑ´Ù. WinMain¿¡¼­ ¾×¼¿·¯·¹ÀÌÅÍ Å×À̺íÀ» »ý¼ºÇÏ°í ¸Þ½ÃÁö ·çÇÁ¿¡¼­ Á¡°ËÇÑ´Ù.

 

       HACCEL hAccel = CreateAcceleratorTable(arAccel, ARSIZE(arAccel));

 

       while (GetMessage(&Message, NULL, 0, 0)) {

                 if (!TranslateAccelerator(hWnd, hAccel, &Message)) {

                            TranslateMessage(&Message);

                            DispatchMessage(&Message);

                 }

       }

       return (int)Message.wParam;

}

 

¸®¼Ò½º¸¦ ¾²Áö ¾Ê´Â ÀÌÀ¯´Â ÀÌ ÇÁ·ÎÁ§Æ®°¡ ±³À°¿ëÀ̱⠶§¹®ÀÌ´Ù. ¹èÆ÷ÇÑ ¼Ò½º¸¦ º¹»çÇؼ­ ¹Ù·Î ºÙ¿© ³Ö°í Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ¾î¾ß Çϴµ¥ ¸®¼Ò½º´Â ¸¶¿ì½º·Î ÆíÁýÇØ¾ß ÇϹǷΠ±×´ë·Î µû¶ó Çϱ⠾î·Æ°í ±ÍÂú´Ù. ±×¸®°í ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ ¸®¼Ò½º ID °ü¸®°¡ °³ÆÇÀ̶ó ½Ç½À¿ëÀ¸·Î ºÎÀûÇÕÇÏ´Ù.

Å°º¸µåÀÇ ¾Æ·¡, À§ Å°·Î º¼·ýÀ» »ó´ëÀûÀ¸·Î Áõ°¡½ÃÅ°°í M Å°·Î À½¼Ò°Å¸¦ Åä±ÛÇÑ´Ù. À½À» ¼Ò°ÅÇÑ´Ù°í Çؼ­ 0À¸·Î ¸¸µé¾î ¹ö¸®¸é ¾ÈµÈ´Ù. ÀÌÀü º¼·ý°ªÀ» oldVolume¿¡ ÀúÀåÇØ µÎ¾î¾ß ¿ø·¡ º¼·ýÀ¸·Î µ¹¾Æ°¥ ¼ö ÀÖ´Ù.

 

       case WM_COMMAND:

                 switch (LOWORD(wParam)) {

                 case A_UP:

                            if (GetFocus() == hList) {

                                       SendMessage(hList, WM_KEYDOWN, VK_UP, 0);

                            } else {

                                       AdjustVolume(true);

                            }

                            break;

                 case A_DOWN:

                            if (GetFocus() == hList) {

                                       SendMessage(hList, WM_KEYDOWN, VK_DOWN, 0);

                            } else {

                                       AdjustVolume(false);

                            }

                            break;

                 case A_M:

                            DWORD voldevice;

 

                            isMute = !isMute;

                            if (isMute) {

                                       waveOutGetVolume(wa.hWaveDev, &voldevice);

                                       oldVolume = DWORD(LOWORD(voldevice) * 100.0 / 0xffff + 0.5);

                                       AdjustVolumeTo(0);

                                       isMute = true;

                            } else {

                                       AdjustVolumeTo(oldVolume);

                            }

                            break;

                 }

                 return 0;

 

Æ®·¢¹Ù´Â ÇöÀç º¼·ýÀ» º¸¿© Áֱ⵵ ÇÏ°í µå·¡±×Çؼ­ Á¶Á¤ÇÏ´Â ÀåÄ¡À̱⵵ ÇÏ´Ù. »ç¿ëÀÚ°¡ Æ®·¢¹Ù¸¦ µå·¡±×Çϸé ÇöÀç À§Ä¡°ªÀ¸·Î º¼·ýÀ» ¼³Á¤ÇÑ´Ù.

 

LRESULT CALLBACK PanelWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {

       case WM_HSCROLL:

                 if ((HWND)lParam == hVolume) {

                            int vol = (int)SendMessage(hVolume, TBM_GETPOS, 0, 0);

                            AdjustVolumeTo(vol);

                 }

                 return 0;

 

´õ Æí¸®ÇÑ ¹æ¹ýÀ¸·Î ¸¶¿ì½º ÈÙÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ÈÙÀ» ±¼¸®¸é ±¼·¯°£ ¹æÇâ¿¡ µû¶ó º¼·ýÀ» Áõ°¡ ¶Ç´Â °¨¼Ò½ÃŲ´Ù. ±¼·¯°£ °Å¸®±îÁö °¨¾ÈÇؼ­ Á» ´õ ºü¸£°Ô Á¶Á¤ÇÒ ¼ö ÀÖÁö¸¸ ±»ÀÌ ±×·¸°Ô±îÁö ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

 

LRESULT CALLBACK StageWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {

       ....

       case WM_MOUSEWHEEL:

                 AdjustVolume((short)HIWORD(wParam) > 0);

                 return 0;

 

º¸Åë ¿µ»ó À§¿¡¼­ ÈÙÀ» ±¼¸®¹Ç·Î ½ºÅ×ÀÌÁö°¡ ÈÙ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¡¾ß Àüü È­¸é »óÅ¿¡¼­µµ ÈÙ·Î º¼·ýÀ» Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. Å°º¸µå³ª ¸¶¿ì½º³ª Æ®·¢¹Ù, ¾î¶² ¹æ¹ýÀ¸·Îµç º¼·ý Á¶Á¤ÀÌ Àß µÈ´Ù. ±×·¯³ª ÇöÀç º¼·ý°ªÀÌ º¸ÀÌÁö ¾Ê¾Æ ºÒÆíÇѵ¥ ¿µ»ó À§¿¡ ¿À¹ö·¹ÀÌ·Î ÀÏÁ¤ ½Ã°£µ¿¾È Ãâ·ÂÇØ º¸ÀÚ. ´ÙÀ½ º¯¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

TCHAR overlayMsg[128];

UINT overlayMsgHpos;

UINT overlayMsgVpos;

ULONGLONG overlayMsgTimout;

 

¸Þ½ÃÁö ³»¿ë°ú ¼öÁ÷, ¼öÆò Á¤·Ä À§Ä¡, ¸Þ½ÃÁö Ãâ·Â ½Ã°£À» ±â¾ïÇÏ´Â º¯¼öÀÌ¸ç ´ÙÀ½ ÇÔ¼ö·Î ¼³Á¤ÇÑ´Ù.

 

void SetOverlayMsg(LPCTSTR msg, UINT hpos = 1, UINT vpos = 0, int timeout = 2000);

 

void SetOverlayMsg(LPCTSTR msg, UINT hpos, UINT vpos, int timeout) {

       lstrcpy(overlayMsg, msg);

       overlayMsgHpos = hpos;

       overlayMsgVpos = vpos;

       overlayMsgTimout = GetTickCount64() + timeout;

}

 

¿øÇü¿¡ À§ÂÊ ¼öÆò Áß¾Ó¿¡ 2ÃÊ°£ Ãâ·ÂÇÏ´Â °ÍÀ¸·Î µðÆúÆ®°ªÀ» ÁöÁ¤Çß´Ù. ŸÀӾƿô°ªÀ» Àμö ¹Þ¾Æ ³¡³¾ ½Ã°£À» ¹Ì¸® °è»êÇØ µÐ´Ù. ´ÙÀ½ ÇÔ¼ö·Î Ãâ·ÂÇÑ´Ù.

 

void DrawOverlayMsg(HDC hdc, AVFrame* pFrame) {

       int x = 0, y = 0;

       UINT Align;

       COLORREF oldColor;

       UINT oldAlign;

       int oldMode;

       Align = TA_LEFT | TA_TOP;

       HFONT hFont;

       HFONT hOldFont;

 

       hFont = CreateFont(25, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, 3, 2, 1,

                 VARIABLE_PITCH | FF_SWISS, TEXT("Arial"));

 

       switch (overlayMsgHpos) {

       case 0:

                 x = 10;

                 break;

       case 1:

                 x = pFrame->width / 2;

                 Align |= TA_CENTER;

                 break;

       case 2:

                 x = pFrame->width - 10;

                  Align |= TA_RIGHT;

                 break;

       }

 

       switch (overlayMsgVpos) {

       case 0:

                 y = 10;

                 break;

       case 1:

                 y = pFrame->height / 2;

                 break;

       case 2:

                 y = pFrame->height - 10;

                 Align |= TA_BOTTOM;

                 break;

       }

       oldMode = SetBkMode(hdc, TRANSPARENT);

       oldColor = SetTextColor(hdc, RGB(0, 255, 0));

       oldAlign = SetTextAlign(hdc, Align);

       hOldFont = (HFONT)SelectObject(hdc, hFont);

       TextOut(hdc, x, y, overlayMsg, lstrlen(overlayMsg));

       SelectObject(hdc, hOldFont);

       SetTextAlign(hdc, oldAlign);

       SetTextColor(hdc, oldColor);

       SetBkMode(hdc, oldMode);

 

       DeleteObject(hFont);

}

 

ÁÂÇ¥¿Í Á¤·Ä ¹æ½Ä °è»ê Äڵ尡 Á» ¸¹À» »Ó º¹ÀâÇÏÁö´Â ¾Ê´Ù. PlayThread¿¡¼­ Á¦ÇÑ ½Ã°£ ³»ÀÏ ¶§ ºñÆ®¸Ê Ãâ·Â Á÷Àü¿¡ ¿À¹ö·¹ÀÌ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ºñÆ®¸Ê¿¡ »õ°Ü °°ÀÌ Ãâ·ÂÇÏ´Â ¹æ½ÄÀÌ´Ù.

 

HBITMAP bitmap = CreateBitmap(vFrame.width, vFrame.height, 1, 32, RGBFrame.data[0]);

OldBitmap = (HBITMAP)SelectObject(MemDC, bitmap);

if (GetTickCount64() < overlayMsgTimout) {

       DrawOverlayMsg(MemDC, &vFrame);

}

BitBlt(hdc, 0, 0, vFrame.width, vFrame.height, MemDC, 0, 0, SRCCOPY);

SelectObject(MemDC, OldBitmap);

DeleteObject(bitmap);

 

º¼·ý º¯°æ½Ã ¿À¹ö·¹ÀÌ ¸Þ½ÃÁö¸¦ µî·ÏÇÑ´Ù.

 

void AdjustVolumeTo(int vol) {

       ....

       TCHAR msg[128];

       wsprintf(msg, TEXT("Volume : %d%%"), tvol);

       SetOverlayMsg(msg);

}

 

º¼·ýÀ» º¯°æÇÒ ¶§¸¶´Ù 2ÃÊ°£ »ó´Ü Áß¾Ó¿¡ ÇöÀç º¼·ýÀ» Àá½Ã º¸¿© ÁØ´Ù. ¾×¼¿·¯·¹ÀÌÅÍ°¡ µé¾î°¬À¸´Ï Å°º¸µå·Îµµ ¸ñ·Ï »çÀ̸¦ À̵¿ÇÒ ¼ö ÀÖ´Ù. ÄÚµå´Â ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ°í PgUp, PgDn Å°¿¡ ´ëÇØ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù.

 

                 case A_PRIOR:

                            if (arMedia[nowlist].nowsel > 0) {

                                       ChangeMedia(nowlist, arMedia[nowlist].nowsel - 1);

                            }

                            break;

                 case A_NEXT:

                            if (arMedia[nowlist].nowsel < arMedia[nowlist].num - 1) {

                                       ChangeMedia(nowlist, arMedia[nowlist].nowsel + 1);

                            }

                            break;

 

¿©·¯ °¡Áö ÆíÀÇ ±â´ÉÀ» ³Ö¾ú´õ´Ï ÀÌÁ¦ Á» ¾µ¸¸ÇÑ ÇÁ·Î±×·¥ÀÌ µÇ¾î °¡´Â °Í °°´Ù. ¼º´ÉÀº ¾ÆÁ÷ ÇÑÂü ¶³¾îÁöÁö¸¸ ¸ð¾çÀÌ °®ÃçÁö´Ï »Ç´Ù±¸´Â Á» ³­´Ù. µ¿¿µ»ó ¹Ù²ã °¡¸ç Å×½ºÆ®ÇÒ ¼ö Àִ ȯ°æÀ» °®Ãß¾úÀ¸´Ï ÀÌÁ¦ ¼º´É¿¡ ÁýÁßÇØ º¸ÀÚ.