´Ù. CMru

MRUÀÇ ÇÙ½ÉÀÎ ¹®ÀÚ¿­ ¹è¿­ Ŭ·¡½º°¡ ¿Ï¼ºµÇ¾ú´Ù. ´ÙÀ½Àº ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ¿© ÃÖ±Ù ÆÄÀÏ ¸ñ·ÏÀ» °ü¸®ÇÏ´Â CMru Ŭ·¡½º¸¦ ¸¸µé¾îº¸ÀÚ. Util.h¿¡ CMru Ŭ·¡½º¸¦ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.

 

class CMru

{

private:

     CHistory arMru;

     HMENU hMenu;

     TCHAR Key[MAX_PATH];

 

public:

     UINT MenuID;

     int MaxMru;

 

     CMru();

     ~CMru();

     BOOL InitMRU(TCHAR *aKey, HMENU aMenu, UINT aMenuID, int aMaxMru);

     BOOL ChangeMenu(HMENU aMenu);

     void ChangeMaxMru(int aMaxMru);

     void LoadMRU();

     void SaveMRU();

     void AddMRU(TCHAR *Path);

     void RemoveMRU(int nIndex);

     void ArrangeMenu();

     void GetFilePath(int nIndex,TCHAR *buf);

};

 

arMru °´Ã¼´Â ÃÖ±Ù ÀÐÀº ÆÄÀÏÀÇ °æ·Î¸¦ ÀúÀåÇÏ´Â ¹®ÀÚ¿­ ¹è¿­ÀÌ´Ù. °æ·Î´Â ¹®ÀÚ¿­À̹ǷΠCHistory Ŭ·¡½º·Î °ü¸®Çϱ⿡ Àû´çÇÏ´Ù. MaxMru ¸â¹ö´Â ¸ñ·ÏÀÇ ÃÖ´ë Å©±â¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀÌ ³Ê¹« ÀÛÀ¸¸é ½Ç¿ë¼ºÀÌ ¶³¾îÁö°í ¶Ç ³Ê¹« Å©¸é ¸Þ´º ¸®½ºÆ®°¡ ±æ¾îÁ®¼­ º°·Î º¸±â¿¡ ÁÁÁö ¾Ê´Ù. ÇÁ·Î±×·¥ÀÇ ¼º°Ý¿¡ ¸Â°Ô Àû´çÇÑ °ªÀ» ¼±ÅÃÇ쵂 10 Á¤µµ°¡ Àû´çÇÑ Å©±âÀÌ´Ù.

ÃÖ±Ù ÆÄÀÏÀÇ ¸ñ·ÏÀº Æ˾÷¸Þ´º¿¡ ³ªÅ¸³ª´Âµ¥ hMenu´Â ¸ñ·Ï Ãâ·Â¿¡ »ç¿ëµÉ Æ˾÷¸Þ´ºÀÇ ÇÚµéÀÌ´Ù. ÇÁ·Î±×·¥Àº MRU·Î »ç¿ëÇÒ Æ˾÷¸Þ´º¸¦ ¹Ì¸® ¸¸µé¾î µÎ°í ±× ÇÚµéÀ» CMru Ŭ·¡½º¿¡°Ô °¡¸£ÃÄ Áà¾ß ÇÑ´Ù. CMru´Â ÀÌ Æ˾÷¸Þ´º¿¡ ¸ñ·ÏÀ» Ãâ·ÂÇϴµ¥ ¸ñ·Ï¿¡ ÇØ´çÇÏ´Â °¢ ¸Þ´ºÇ׸ñÀÇ ID´Â MenuID ¸â¹öº¯¼öºÎÅÍ ¿¬¼ÓÀûÀÎ ID¸¦ ÇÒ´çÇÑ´Ù. ½ÃÀÛ IDµµ ÇÁ·Î±×·¥ÀÌ CMru¿¡°Ô Á¦°øÇØ¾ß Çϴµ¥ ÀÌ ID ÀÌÈÄ MaxMru °³¼öÀÇ ID°¡ ¿¬¼ÓÀûÀ¸·Î ºñ¾î ÀÖ¾î¾ß ÇÑ´Ù.

MRU ¸ñ·ÏÀº ÇÁ·Î±×·¥ Á¾·á½Ã ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ´Âµ¥ Key ¸â¹ö´Â ÀúÀåÇÒ ·¹Áö½ºÆ®¸® °æ·Î¸¦ °¡¸®Å²´Ù. CMru´Â MaxMru °ªÀ» Àü´Þ¹Þ¾Æ È÷½ºÅ丮 °´Ã¼¸¦ ÃʱâÈ­ÇÏ°í hMenu, MenuID¸¦ Àü´Þ¹Þ¾Æ ¸Þ´º¸¦ ±¸¼ºÇÏ°í Key°¡ ÁöÁ¤ÇÏ´Â À§Ä¡¿¡ ¸ñ·ÏÀ» ÀúÀåÇÑ´Ù. »ó±â ³× °ªÀº MRU ±¸Çö¿¡ ²À ÇÊ¿äÇϹǷΠÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÌ Á¦°øÇØ¾ß ÇÑ´Ù. ´ÙÀ½Àº ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ ÃÖ±Ù ÆÄÀÏ ¸Þ´ºÀÌ´Ù.

Æ˾÷¸Þ´º Çϳª°¡ MRU ¸ñ·ÏÀ» À§ÇØ ÇÒ´çµÇ¾î ÀÖÀ¸¸ç ÀÌ ¸Þ´º ¾Æ·¡¿¡ ÃÖ±Ù ÆÄÀÏÀÇ °æ·Î°¡ ¸Þ´ºÇ׸ñÀ¸·Î µî·ÏµÇ¾î ÀÖ´Ù. °¢ ¸Þ´ºÇ׸ñÀº ¾à¼ÓµÈ ¿¬¼ÓÀûÀÎ ID¸¦ °¡Áö°í ÀÖÀ» °ÍÀ̸ç ÃÖ´ë °³¼öµµ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Ù. ¸â¹öº¯¼öµé ¿Ü¿¡ »ý¼ºÀÚ, Æı«ÀÚ¸¦ ºñ·ÔÇÑ ¸î °¡Áö ¸â¹öÇÔ¼öµéÀÌ Æ÷ÇԵǾî Àִµ¥ °¢ ÇÔ¼öµéÀÇ ±¸Çö Äڵ带 Util.cpp¿¡ ÀÛ¼ºÇغ¸ÀÚ.

 

CMru::CMru()

{

}

 

CMru::~CMru()

{

}

 

BOOL CMru::InitMRU(TCHAR *aKey, HMENU aMenu, UINT aMenuID, int aMaxMru)

{

     MaxMru=aMaxMru;

     arMru.Init(MAX_PATH+64,MaxMru);

     lstrcpy(Key,aKey);

     MenuID=aMenuID;

     return ChangeMenu(aMenu);

}

 

BOOL CMru::ChangeMenu(HMENU aMenu)

{

     if (aMenu) {

          hMenu=aMenu;

          ArrangeMenu();

          return TRUE;

     }

     return FALSE;

}

 

void CMru::ChangeMaxMru(int aMaxMru)

{

     arMru.ChangeHeight(aMaxMru);

     ArrangeMenu();

}

 

void CMru::LoadMRU()

{

     int i;

     TCHAR SubKey[32];

     TCHAR Path[MAX_PATH];

 

     arMru.num=SHRegReadInt(SHCU,Key,"nFiles",0);

     arMru.num=min(arMru.num, MaxMru);

     for (i=0;i<arMru.num;i++) {

          wsprintf(SubKey,"File%d",i);

          SHRegReadString(SHCU,Key,SubKey,"",Path,MAX_PATH);

          arMru.Set(i,Path);

     }

     ArrangeMenu();

}

 

void CMru::SaveMRU()

{

     int i;

     TCHAR SubKey[32];

 

     SHRegWriteInt(SHCU,Key,"nFiles",arMru.num);

     for (i=0;i<arMru.num;i++) {

          wsprintf(SubKey,"File%d",i);

          SHRegWriteString(SHCU,Key,SubKey,arMru.Get(i));

     }

}

 

void CMru::AddMRU(TCHAR *Path)

{

     arMru.Add(Path);

     ArrangeMenu();

}

 

void CMru::RemoveMRU(int nIndex)

{

     arMru.Delete(nIndex);

     ArrangeMenu();

}

 

void CMru::ArrangeMenu()

{

     int i;

     TCHAR szItem[MAX_PATH+12];

 

     if (arMru.num) {

          while (DeleteMenu(hMenu,0,MF_BYPOSITION));

     }

 

     for (i=0;i<arMru.num;i++) {

          if (i < 9) {

              wsprintf(szItem,"&%c %s",i+1+¡¯0¡¯,arMru.Get(i));

          } else {

              wsprintf(szItem,"&%c %s",i-9+¡¯A¡¯,arMru.Get(i));

          }

          AppendMenu(hMenu,MF_STRING,MenuID+i,szItem);

     }

}

 

void CMru::GetFilePath(int nIndex,TCHAR *buf)

{

     lstrcpy(buf,arMru.Get(nIndex));

}

 

»ý¼ºÀÚ¿Í Æı«ÀÚ´Â ¾Æ¹« °Íµµ ÇÏÁö ¾ÊÀ¸¸ç ºóµÕºóµÕ ³î°í ÀÖ´Ù. CMruÀÇ ½ÇÁ¦ ÃʱâÈ­ ÇÔ¼ö´Â InitMRU ÇÔ¼öÀε¥ ¿Ö »ý¼ºÀÚ ´ë½Å ÀÌ ÇÔ¼ö¸¦ µû·Î Á¤ÀÇÇϴ°¡ Çϸé MaxMru´Â È£½ºÆ®ÀÇ ¼³Á¤°ªÀ̹ǷΠ·¹Áö½ºÆ®¸®¿¡¼­ º°µµ·Î Àоî¾ß ±× ½ÇÁ¦°ªÀ» ¾Ë ¼ö Àֱ⠶§¹®ÀÌ´Ù. CMru °´Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇÑ´Ù¸é ¸ô¶óµµ »ý¼ºÀÚ È£Ãâ ½ÃÁ¡¿¡¼­´Â ÀÌ °ªÀ» ¾Ë ¼ö°¡ ¾ø´Ù.

InitMRU ÇÔ¼ö´Â arMru.Init¸¦ È£ÃâÇÏ¿© ¸ñ·Ï ¹öÆÛ¸¦ ÃʱâÈ­ÇÑ´Ù. Æø MAX_PATH+64¸¸Å­ÀÇ ¹®ÀÚ¿­ÀÌ MaxMru¸¸Å­ ÇÒ´çµÇ°í µî·Ï °³¼ö´Â 0À¸·Î ÃʱâÈ­ÇÑ´Ù. Áï ÀÌ °´Ã¼°¡ ¸¸µé¾îÁú ¶§ ¸ñ·ÏÀº ºñ¾îÀÖ´Ù. ÆÄÀÏÀÇ °æ·Î´Â MAX_PATH ±æÀÌÀ̸é ÃæºÐÈ÷ ÀúÀåÇÒ ¼ö Àִµ¥ ¿©±â¿¡ 64¸¦ ´õÇÑ ÀÌÀ¯´Â FTP ÆÄÀÏÀÇ °æ¿ì »ç¿ëÀÚ ID, Æнº¿öµå, Æ÷Æ® ¹øÈ£ °°Àº Ãß°¡ÀûÀÎ Á¤º¸°¡ ´õ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.

InitMRU ÇÔ¼ö´Â ÀÌ °´Ã¼°¡ µ¿ÀÛÇϴµ¥ ÇʼöÀûÀÎ ³× °¡Áö ÁÖ¿ä Á¤º¸¸¦ Àü´Þ¹Þ¾Æ MaxMru, hMenu, Key, MenuID ¸â¹ö¿¡ ÀúÀåÇÑ´Ù. ÀÌ Á¤º¸´Â MRU ¸ñ·Ï Ãâ·Â ¹× ÀúÀå¿¡ ¹Ýµå½Ã ÇÊ¿äÇϹǷΠÀÌ °´Ã¼¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº ¹Ýµå½Ã InitMRU ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÃʱâÈ­ÇØ¾ß ÇÑ´Ù. ¸Þ´ºÀÇ ID¿Í ÃÖ´ë °³¼ö´Â ChangeMenu, ChangeMaxMru ÇÔ¼ö·Î ¾ðÁ¦µçÁö º¯°æÇÒ ¼ö ÀÖ´Ù.

LoadMRU ÇÔ¼ö´Â ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÃÖ±Ù ÆÄÀÏ ¸ñ·ÏÀ» Àд´Ù. ÀúÀåµÈ ÆÄÀÏÀÇ °³¼ö¸¦ ¸ÕÀú arMru.num¿¡ ÀоîµéÀÌ°í ±× °³¼ö¸¸Å­ ÆÄÀÏ °æ·Î¸¦ Àоî arMru ¹è¿­¿¡ Á÷Á¢ ´ëÀÔÇÑ´Ù. °¢ ÆÄÀϵéÀÇ °æ·Î´Â File0, File1, File2 µîÀÇ Å°¿¡ ÀúÀåµÈ´Ù. SaveMRU ÇÔ¼ö´Â ¹Ý´ë·Î ¸ñ·ÏÀ» ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÑ´Ù. ÀúÀåÇÒ ¶§µµ °³¼ö¸¦ ¸ÕÀú ÀúÀåÇÏ°í arMru ¹è¿­À» ÀúÀåÇÑ´Ù.

MRU¿¡ »õ ÆÄÀÏÀ» Ãß°¡Çϰųª »èÁ¦ÇÏ´Â °ÍÀº ¾ÆÁÖ ½±´Ù. CHistory °´Ã¼ÀÇ Add, Delete ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. ´Ü, ÆÄÀÏ ¸ñ·Ï¿¡ º¯È­°¡ »ý°åÀ¸¹Ç·Î ArrangeMenu ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸Þ´º¸¦ °»½ÅÇØ¾ß ÇÑ´Ù.

ArrangeMenu ÇÔ¼ö´Â arMru ÆÄÀÏ ¸ñ·ÏÀ» hMenu Æ˾÷¸Þ´º¿¡ Ãâ·ÂÇÑ´Ù. ÀÏ´Ü ±âÁ¸¿¡ µî·ÏµÇ¾î ÀÖ´Â ¸ðµç ¸Þ´ºÇ׸ñÀ» ´Ù Áö¿ì°í AppendMenu ÇÔ¼ö·Î ¸Þ´ºÇ׸ñÀ» Ãß°¡ÇÏ¿´´Ù. °¢ Ç׸ñÀÇ ID´Â ÇÁ·Î±×·¥ÀÌ Á¦°øÇÑ MenuID°ªºÎÅÍ ½ÃÀÛÇÏ¿© ¿¬¼ÓÀûÀ¸·Î Áõ°¡ÇÑ´Ù. ¸¸¾à µî·ÏµÈ ¹®ÀÚ¿­ÀÇ °³¼öÀÎ arMru.numÀÌ 0À̸é Áï, ¸ñ·ÏÀÌ ºñ¾î ÀÖÀ¸¸é ¾Æ¹« °Íµµ ÇÏÁö ¾ÊÀ¸¹Ç·Î ¡®ºñ¾îÀÖÀ½¡¯À̶ó´Â µðÆúÆ® ¸Þ´ºÇ׸ñ¸¸ º¸ÀÌ°Ô µÈ´Ù. °¢ ¸Þ´ºÇ׸ñ¿¡ 1~9, A~Z±îÁö ´ÜÃàÅ°¸¦ ´Þ¾Æ ÁÖ¾ú´Ù.

GetFilePath ÇÔ¼ö´Â arMru °´Ã¼°¡ À¯ÁöÇÏ´Â ¹®ÀÚ¿­ ¹è¿­ÀÇ nIndex ¹ø° Ç׸ñÀ» Àд ÇÔ¼öÀε¥ arMru °´Ã¼°¡ private ¾×¼¼½º ¼Ó¼ºÀ» °¡Áö±â ¶§¹®¿¡ Ŭ·¡½º ¿ÜºÎ¿¡¼­ ÀÐÀ» ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ Á¦°øµÇ´Â ÇÔ¼öÀÌ´Ù.