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 ¾×¼¼½º ¼Ó¼ºÀ» °¡Áö±â ¶§¹®¿¡ Ŭ·¡½º ¿ÜºÎ¿¡¼ ÀÐÀ» ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ Á¦°øµÇ´Â ÇÔ¼öÀÌ´Ù.