³ª. ¼³Á¤ ÀúÀå ¹× º¹±¸

¼³Á¤°ªÀ» ÀúÀåÇÒ ¼ö ÀÖ´Â °÷Àº INI ÆÄÀÏÀ̳ª ·¹Áö½ºÆ®¸® µÑ Áß ÇϳªÀε¥ INI ÆÄÀϵµ ½Ã½ºÅÛ ·¹Áö½ºÆ®¸®¸¦ °Çµå¸®Áö ¾Ê´Â´Ù´Â Á¡¿¡¼­ ³ª»Û ¼±ÅÃÀº ¾Æ´ÏÁö¸¸ Win32 ȯ°æ¿¡¼­´Â ·¹Áö½ºÆ®¸®¿¡ Á¤º¸¸¦ ÀúÀåÇÏ´Â °ÍÀÌ ¿©·¯ ¸ð·Î À¯¸®ÇÏ´Ù. ·¹Áö½ºÆ®¸® ÀÔÃâ·ÂÀº ºñ±³Àû ½¬¿î ±â¼ú¿¡ ¼ÓÇϹǷΠÀÌ ½Ç½ÀÀº ÀüÇô ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ÙÀ½ ÇÔ¼öµéÀº Á¤¼ö¿Í ¹®ÀÚ¿­¿¡ ´ëÇÑ ·¹Áö½ºÆ®¸® ÀÔÃâ·Â ±â´ÉÀ» »ç¿ëÇϱ⠽±µµ·Ï ¸¸µé¾î ³õÀº °ÍÀÌ´Ù. Util.h¿¡ ÇÔ¼ö ¿øÇü°ú ¸ÅÅ©·Î »ó¼öµéÀ» ¼±¾ðÇÑ´Ù.

 

#define SHLM HKEY_LOCAL_MACHINE

#define SHCU HKEY_CURRENT_USER

#define SHCR HKEY_CLASSES_ROOT

 

UINT SHRegReadInt(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, INT nDefault);

BOOL SHRegReadString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpDefault,

   LPTSTR lpRet, DWORD nSize);

BOOL SHRegWriteInt(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, UINT nData);

BOOL SHRegWriteString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpData);

 

ÀÚÁÖ »ç¿ëµÇ´Â ·¹Áö½ºÆ®¸® Å°¿¡ ´ëÇØ Á» ´õ ªÀº À̸§ÀÇ ¸ÅÅ©·Î »ó¼ö¸¦ Á¤ÀÇÇصξú´Ù. ÇÔ¼öÀÇ ÄÚµå´Â Util.cpp¿¡ ÀÛ¼ºÇÑ´Ù.

 

UINT SHRegReadInt(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, INT nDefault)

{

     HKEY key;

     DWORD dwDisp;

     UINT Result;

     DWORD Size;

     if (RegCreateKeyEx(hKey, lpKey,0,NULL,

          REG_OPTION_NON_VOLATILE, KEY_READ,NULL,&key,&dwDisp)

          !=ERROR_SUCCESS)

          return 0;

     Size=sizeof(LONG);

     if (RegQueryValueEx(key, lpValue, 0, NULL,(LPBYTE)&Result, &Size)

          !=ERROR_SUCCESS)

          Result=nDefault;

     RegCloseKey(key);

     return Result;

}

 

BOOL SHRegReadString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpDefault,

   LPTSTR lpRet, DWORD nSize)

{

     HKEY key;

     DWORD dwDisp;

     DWORD Size;

     if (RegCreateKeyEx(hKey, lpKey,0,NULL,

          REG_OPTION_NON_VOLATILE, KEY_READ,NULL,&key,&dwDisp)

          !=ERROR_SUCCESS)

          return FALSE;

     Size=nSize;

     if (RegQueryValueEx(key, lpValue, 0, NULL,(LPBYTE)lpRet, &Size)

          !=ERROR_SUCCESS) {

          strcpy(lpRet, lpDefault);

          return FALSE;

     }

     RegCloseKey(key);

     return TRUE;

}

 

BOOL SHRegWriteInt(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, UINT nData)

{

     HKEY key;

     DWORD dwDisp;

     if (RegCreateKeyEx(hKey, lpKey,0,NULL,

          REG_OPTION_NON_VOLATILE, KEY_WRITE,NULL,&key,&dwDisp)

          !=ERROR_SUCCESS) {

          return FALSE;

     }

     if (RegSetValueEx(key, lpValue,0,REG_DWORD,(LPBYTE)&nData,sizeof(UINT))

          !=ERROR_SUCCESS)

          return FALSE;

     RegCloseKey(key);

     return TRUE;

}

 

BOOL SHRegWriteString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpData)

{

     HKEY key;

     DWORD dwDisp;

     if (RegCreateKeyEx(hKey, lpKey,0,NULL,

          REG_OPTION_NON_VOLATILE, KEY_WRITE,NULL,&key,&dwDisp)

          !=ERROR_SUCCESS)

          return FALSE;

     if (RegSetValueEx(key, lpValue,0,REG_SZ,(LPBYTE)lpData,strlen(lpData)+1)

          !=ERROR_SUCCESS)

          return FALSE;

     RegCloseKey(key);

     return TRUE;

}

 

·¹Áö½ºÆ®¸®¿¡ ´ëÇÑ ÀϹÝÀûÀÎ À̷аú ÀÌ ÇÔ¼öµé¿¡ ´ëÇÑ ¼³¸í ¹× ±¸Ã¼ÀûÀÎ »ç¿ë¹æ¹ýÀº API Á¤º¹ 26ÀåÀ» Âü°íÇϱ⠹ٶó¸ç ¿©±â¼­´Â »ç¿ë¸¸ Çϱâ·Î ÇÑ´Ù. ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÏ¸é ·¹Áö½ºÆ®¸® ÀÔÃâ·ÂÀ» °£ÆíÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. Dangeun.cppÀÇ ¼±µÎ¿¡ ÀÌ ÇÁ·Î±×·¥ÀÇ Á¤º¸¸¦ ÀúÀåÇÒ ·¹Áö½ºÆ®¸® Å°¸¦ Á¤ÀÇÇÑ´Ù.

 

#define KEY "Software\\Miyoungsoft\\Dangeun\\1.0\\"

 

DangeunÀÇ ·çÆ® ·¹Áö½ºÆ®¸® Å°ÀÌ¸ç ¼³Á¤ ´ëÈ­»óÀÚ¿¡ ÀÖ´Â ´ëºÎºÐÀÇ ¼³Á¤°ªµéÀÌ ÀÌ Å° ¾Æ·¡¿¡ ÀúÀåµÈ´Ù. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ ±Ç°í¾È´ë·Î ·çƮŰ¿¡´Â ȸ»ç¸í, Á¦Ç°¸í, ¹öÀü¸íÀ» ¸í½ÃÇÏ¿´´Ù. ¸¸¾à ´ç±ÙÀÌ »õ·Î¿î ¹öÀüÀ¸·Î ¾÷±×·¹À̵åµÇ¸é ·çÆ® ·¹Áö½ºÆ®¸®ÀÇ Å°¸¦ ¹Ù²Ù°Ô µÇ¸ç µû¶ó¼­ ÇÑ ½Ã½ºÅÛ¿¡ ¿©·¯ ¹öÀüÀÇ ´ç±ÙÀÌ ¼­·Î ¹æÇعÞÁö ¾Ê°í µ¿½Ã¿¡ ½ÇÇàµÉ ¼ö ÀÖ´Ù. ·¹Áö½ºÆ®¸®·ÎºÎÅÍ °ªÀ» ÀÔÃâ·ÂÇÏ´Â ÀÏÀº SOption ±¸Á¶Ã¼ÀÇ Load, Save µÎ ¸â¹öÇÔ¼ö°¡ ÇÑ´Ù. ´ÙÀ½ Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ.

 

void SOption::Load(TCHAR *Key)

{

     TCHAR szKey[MAX_PATH];

 

     lstrcpy(szKey,Key);

     lstrcat(szKey,"Setting");

 

     StartAction=SHRegReadInt(SHCU,szKey,"StartAction",0);

     bExplorerPopup=SHRegReadInt(SHCU,szKey,"bExplorerPopup",0);

     bMaxFirstChild=SHRegReadInt(SHCU,szKey,"bMaxFirstChild",0);

     MaxMru=SHRegReadInt(SHCU,szKey,"MaxMru",0);

     SHRegReadString(SHCU,szKey,"DefExt","",DefExt,12);

     Hangul=SHRegReadInt(SHCU,szKey,"Hangul",0);

     bInitFind=SHRegReadInt(SHCU,szKey,"InitFind",0);

     bInitNextFind=SHRegReadInt(SHCU,szKey,"InitNextFind",0);

     bShowOutput=SHRegReadInt(SHCU,szKey,"bShowOutput",0);

     OutputHeight=SHRegReadInt(SHCU,szKey,"OutputHeight",0);

     bShowToolBar=SHRegReadInt(SHCU,szKey,"bShowToolBar",0);

     bShowStatus=SHRegReadInt(SHCU,szKey,"bShowStatus",0);

     bShowFileWnd=SHRegReadInt(SHCU,szKey,"bShowFileWnd",0);

     bShowFileTab=SHRegReadInt(SHCU,szKey,"bShowFileTab",0);

     FileWndWidth=SHRegReadInt(SHCU,szKey,"FileWndWidth",0);

     bShowHidden=SHRegReadInt(SHCU,szKey,"bShowHidden",0);

     FilterIndex=SHRegReadInt(SHCU,szKey,"FilterIndex",0);

     bToolBarBig=SHRegReadInt(SHCU,szKey,"bToolBarBig",0);

     bToolBarText=SHRegReadInt(SHCU,szKey,"bToolBarText",0);

     bBrowseMode=SHRegReadInt(SHCU,szKey,"bBrowseMode",0);

     bSoundFindFail=SHRegReadInt(SHCU,szKey,"bSoundFindFail",0);

     bWatchChange=SHRegReadInt(SHCU,szKey,"bWatchChange",0);

     bReloadNoAsk=SHRegReadInt(SHCU,szKey,"bReloadNoAsk",0);

     bReloadProject=SHRegReadInt(SHCU,szKey,"bReloadProject",0);

 

     LineRatio=SHRegReadInt(SHCU,szKey,"LineRatio",0);

     bWrap=SHRegReadInt(SHCU,szKey,"bWrap",0);

     nWrap=SHRegReadInt(SHCU,szKey,"nWrap",0);

     HideSelType=SHRegReadInt(SHCU,szKey,"HideSelType",0);

     nShowCurLine=SHRegReadInt(SHCU,szKey,"nShowCurLine",0);

     bShowMargin=SHRegReadInt(SHCU,szKey,"bShowMargin",0);

     bShowLineNum=SHRegReadInt(SHCU,szKey,"bShowLineNum",0);

     bShowEnter=SHRegReadInt(SHCU,szKey,"bShowEnter",0);

     bShowTab=SHRegReadInt(SHCU,szKey,"bShowTab",0);

     bShowSpace=SHRegReadInt(SHCU,szKey,"bShowSpace",0);   

     TabWidth=SHRegReadInt(SHCU,szKey,"TabWidth",0);

     bNoFirstSpace=SHRegReadInt(SHCU,szKey,"bNoFirstSpace",0);

     RightWrap=SHRegReadInt(SHCU,szKey,"RightWrap",0);

     ColMark=SHRegReadInt(SHCU,szKey,"ColMark",0);  

     MarColor1=SHRegReadInt(SHCU,szKey,"MarColor1",0);

     MarColor2=SHRegReadInt(SHCU,szKey,"MarColor2",0);

     NumColor=SHRegReadInt(SHCU,szKey,"NumColor",0);

     MarkColor=SHRegReadInt(SHCU,szKey,"MarkColor",0);

     ShowTabType=SHRegReadInt(SHCU,szKey,"ShowTabType",0);

     ShowEnterType=SHRegReadInt(SHCU,szKey,"ShowEnterType",0);

     ShowSpaceType=SHRegReadInt(SHCU,szKey,"ShowSpaceType",0);

     CodeColor=SHRegReadInt(SHCU,szKey,"CodeColor",0);

     CurColor=SHRegReadInt(SHCU,szKey,"CurColor",0);

     cBack=SHRegReadInt(SHCU,szKey,"cBack",0);

     cFore=SHRegReadInt(SHCU,szKey,"cFore",0);

     cSelFore=SHRegReadInt(SHCU,szKey,"cSelFore",0);

     cSelBack=SHRegReadInt(SHCU,szKey,"cSelBack",0);

     bUseLineEnd=SHRegReadInt(SHCU,szKey,"UseLineEnd",0);

     bAllowDrag=SHRegReadInt(SHCU,szKey,"AllowDrag",0);

     CaretWidth=SHRegReadInt(SHCU,szKey,"CaretWidth",0);

     bHideCurLine=SHRegReadInt(SHCU,szKey,"HideCurLine",0);

     bCalcTabWithAvg=SHRegReadInt(SHCU,szKey,"bCalcTabWithAvg",0);

     UndoLimit=SHRegReadInt(SHCU,szKey,"UndoLimit",0);

     SHRegReadString(SHCU,szKey,"FaceName","",logfont.lfFaceName,32);

     logfont.lfPitchAndFamily=SHRegReadInt(SHCU,szKey,"PitchAndFamily",0);

     logfont.lfCharSet=SHRegReadInt(SHCU,szKey,"CharSet",0);

     logfont.lfHeight=SHRegReadInt(SHCU,szKey,"FontHeight",0);

     bSpaceForTab=SHRegReadInt(SHCU,szKey,"bSpaceForTab",0);

     bAutoIndent=SHRegReadInt(SHCU,szKey,"bAutoIndent",0);

     bBlockIndentWithTab=SHRegReadInt(SHCU,szKey,"bBlockIndentWithTab",0);

     bHomeToFirstChar=SHRegReadInt(SHCU,szKey,"bHomeToFirstChar",0);

     FindDlgPos=SHRegReadInt(SHCU,szKey,"FindDlgPos",0);

}

 

void SOption::Save(TCHAR *Key)

{

     TCHAR szKey[MAX_PATH];

 

     lstrcpy(szKey,Key);

     lstrcat(szKey,"Setting");

 

     SHRegWriteInt(SHCU,szKey,"StartAction",StartAction);

     SHRegWriteInt(SHCU,szKey,"bExplorerPopup",bExplorerPopup);

     SHRegWriteInt(SHCU,szKey,"bMaxFirstChild",bMaxFirstChild);

     SHRegWriteInt(SHCU,szKey,"MaxMru",MaxMru);

     SHRegWriteString(SHCU,szKey,"DefExt",DefExt);

     SHRegWriteInt(SHCU,szKey,"Hangul",Hangul);

     SHRegWriteInt(SHCU,szKey,"InitFind",bInitFind);

     SHRegWriteInt(SHCU,szKey,"InitNextFind",bInitNextFind);

     SHRegWriteInt(SHCU,szKey,"bShowOutput",bShowOutput);

     SHRegWriteInt(SHCU,szKey,"OutputHeight",OutputHeight);

     SHRegWriteInt(SHCU,szKey,"bShowToolBar",bShowToolBar);

     SHRegWriteInt(SHCU,szKey,"bShowStatus",bShowStatus);

     SHRegWriteInt(SHCU,szKey,"bShowFileWnd",bShowFileWnd);

     SHRegWriteInt(SHCU,szKey,"bShowFileTab",bShowFileTab);

     SHRegWriteInt(SHCU,szKey,"FileWndWidth",FileWndWidth);

     SHRegWriteInt(SHCU,szKey,"bShowHidden",bShowHidden);

     SHRegWriteInt(SHCU,szKey,"FilterIndex",FilterIndex);

     SHRegWriteInt(SHCU,szKey,"bToolBarBig",bToolBarBig);

     SHRegWriteInt(SHCU,szKey,"bToolBarText",bToolBarText);

     SHRegWriteInt(SHCU,szKey,"bBrowseMode",bBrowseMode);

     SHRegWriteInt(SHCU,szKey,"bSoundFindFail",bSoundFindFail);

     SHRegWriteInt(SHCU,szKey,"bWatchChange",bWatchChange);

     SHRegWriteInt(SHCU,szKey,"bReloadNoAsk",bReloadNoAsk);

     SHRegWriteInt(SHCU,szKey,"bReloadProject",bReloadProject);

 

     SHRegWriteInt(SHCU,szKey,"LineRatio",LineRatio);

     SHRegWriteInt(SHCU,szKey,"bWrap",bWrap);

     SHRegWriteInt(SHCU,szKey,"nWrap",nWrap);

     SHRegWriteInt(SHCU,szKey,"HideSelType",HideSelType);

     SHRegWriteInt(SHCU,szKey,"nShowCurLine",nShowCurLine);

     SHRegWriteInt(SHCU,szKey,"bShowMargin",bShowMargin);

     SHRegWriteInt(SHCU,szKey,"bShowLineNum",bShowLineNum);

     SHRegWriteInt(SHCU,szKey,"bShowEnter",bShowEnter);

     SHRegWriteInt(SHCU,szKey,"bShowTab",bShowTab);

     SHRegWriteInt(SHCU,szKey,"bShowSpace",bShowSpace);

     SHRegWriteInt(SHCU,szKey,"TabWidth",TabWidth);

     SHRegWriteInt(SHCU,szKey,"bNoFirstSpace",bNoFirstSpace);

     SHRegWriteInt(SHCU,szKey,"RightWrap",RightWrap);

     SHRegWriteInt(SHCU,szKey,"ColMark",ColMark);

     SHRegWriteInt(SHCU,szKey,"MarColor1",MarColor1);

     SHRegWriteInt(SHCU,szKey,"MarColor2",MarColor2);

     SHRegWriteInt(SHCU,szKey,"NumColor",NumColor);

     SHRegWriteInt(SHCU,szKey,"MarkColor",MarkColor);

     SHRegWriteInt(SHCU,szKey,"ShowTabType",ShowTabType);

     SHRegWriteInt(SHCU,szKey,"ShowEnterType",ShowEnterType);

     SHRegWriteInt(SHCU,szKey,"ShowSpaceType",ShowSpaceType);

     SHRegWriteInt(SHCU,szKey,"CodeColor",CodeColor);

     SHRegWriteInt(SHCU,szKey,"CurColor",CurColor);

     SHRegWriteInt(SHCU,szKey,"cBack",cBack);

     SHRegWriteInt(SHCU,szKey,"cFore",cFore);

     SHRegWriteInt(SHCU,szKey,"cSelFore",cSelFore);

     SHRegWriteInt(SHCU,szKey,"cSelBack",cSelBack);

     SHRegWriteInt(SHCU,szKey,"UseLineEnd",bUseLineEnd);

     SHRegWriteInt(SHCU,szKey,"AllowDrag",bAllowDrag);

     SHRegWriteInt(SHCU,szKey,"CaretWidth",CaretWidth);

     SHRegWriteInt(SHCU,szKey,"HideCurLine",bHideCurLine);

     SHRegWriteInt(SHCU,szKey,"bCalcTabWithAvg",bCalcTabWithAvg);

     SHRegWriteInt(SHCU,szKey,"UndoLimit",UndoLimit);

     SHRegWriteString(SHCU,szKey,"FaceName",logfont.lfFaceName);

     SHRegWriteInt(SHCU,szKey,"PitchAndFamily",logfont.lfPitchAndFamily);

     SHRegWriteInt(SHCU,szKey,"CharSet",logfont.lfCharSet);

     SHRegWriteInt(SHCU,szKey,"FontHeight",logfont.lfHeight);

     SHRegWriteInt(SHCU,szKey,"bSpaceForTab",bSpaceForTab);

     SHRegWriteInt(SHCU,szKey,"bAutoIndent",bAutoIndent);

     SHRegWriteInt(SHCU,szKey,"bBlockIndentWithTab",bBlockIndentWithTab);

     SHRegWriteInt(SHCU,szKey,"bHomeToFirstChar",bHomeToFirstChar);

     SHRegWriteInt(SHCU,szKey,"FindDlgPos",FindDlgPos);

}

 

Äڵ差ÀÌ Á» ¸¹±â´Â ÇÏÁö¸¸ ¸ðµÎ ´Ü¼øÇÑ ·¹Áö½ºÆ®¸® ÀÔÃâ·Â¹®µéÀÏ »ÓÀÌ´Ù. SOption ±¸Á¶Ã¼¸¦ Åë°·Î ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÑ´Ù°í º¼ ¼ö ÀÖ´Ù. ÀÌ·± Å« ±¸Á¶Ã¼´Â °¢ ¸â¹ö¸¶´Ù ÀÏÀÏÀÌ Å°¸¦ ¸¸µé¾î ÀúÀåÇÏ´Â ¹æ¹ý ´ë½Å ÀÌÁø Æ÷¸Ë(REG_BINARY)À¸·Î ÀúÀåÇÏ¸é ´Ü ÇÑ ¹øÀÇ ÇÔ¼ö È£Ãâ·Î ÀÔÃâ·ÂÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ·¹Áö½ºÆ®¸® ÆíÁý±â·Î Á÷Á¢ ·¹Áö½ºÆ®¸®¸¦ ÆíÁýÇÏ´Â °í±Þ »ç¿ëÀÚµéÀ» À§ÇØ, ±×¸®°í °³¹ßÁßÀÇ Å×½ºÆ® ÆíÀǸ¦ À§ÇØ ¿É¼Ç Çϳª´ç ÇϳªÀÇ Å°¸¦ ÇÒ´çÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù. ¸ðµç ¼³Á¤»óÅÂÀÇ ÀúÀå°ú º¹±¸´Â ÀÌ µÎ ÇÔ¼ö¿¡¼­¸¸ ÇϹǷΠÂ÷ÈÄ¿¡ ¿É¼ÇÀÌ ´Ã¾î³ª°Å³ª ¿É¼ÇÀÇ Æ÷¸ËÀÌ º¯°æµÇ´õ¶óµµ ÀÌ µÎ ÇÔ¼ö¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù.

Á¦¾îÄÚµå º¸±â ¹æ½ÄÀ» ÁöÁ¤ÇÏ´Â ShowTabType, ShowEnterType, ShowSpaceType ¿É¼ÇµéÀº Á» Ư¼öÇÏ°Ô ´Ù·ç¾îÁö°í ÀÖ´Ù. ÀÌ °ªµéµµ ·¹Áö½ºÆ®¸®¿¡ ÀúÀå ¹× º¹±¸¸¦ ÇÏÁö¸¸ ¼³Á¤ ´ëÈ­»óÀÚ¿¡´Â ÀÌ °ªµéÀ» º¸¿©Áְųª º¯°æÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º°¡ ¾ø´Ù. ±×·¡¼­ »ç¿ëÀÚµéÀº ÀÌ ¿É¼Ç¿¡ ´ëÇؼ­´Â ¸¶À½¿¡ µå´Â ¸ð¾çÀ» ¼±ÅÃÇÒ ¼ö ¾øÀ¸¸ç DangeunÀÇ µðÆúÆ® ¼³Á¤´ë·Î¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù. ´Ù¸¸ ·¹Áö½ºÆ®¸® ÆíÁý±â·Î Á÷Á¢ ÀÌ °ªÀ» º¯°æÇÏ´Â °ÍÀº Çã¿ëµÈ´Ù.

ÀÚÁÖ »ç¿ëµÇÁö ¾Ê´Â ¿É¼ÇÀº ÀÌ·± ½ÄÀ¸·Î UI¸¦ ¼û±â´Â Á¤Ã¥À» »ç¿ëÇÒ ¼ö Àִµ¥ ¿î¿µÃ¼Á¦µµ ÀÌ·± ¼û°ÜÁø ¿É¼ÇÀ» ¸¹ÀÌ °¡Áö°í ÀÖ´Ù. µðÆúÆ®°ªÀÌ ¹«³­Çؼ­ Ưº°È÷ ¹Ù²Ü ÇÊ¿ä°¡ ¾ø´Ù°Å³ª ¿É¼ÇÀÇ Àǹ̸¦ ¼³¸íÇϱâ Èûµé ¶§, ¶Ç´Â ¿É¼Ç º¯°æÀÇ È¿°ú°¡ º¸¾ÈÀ̳ª Àü¹ÝÀûÀÎ ¼º´É¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¶§´Â Â÷¶ó¸® ¿É¼ÇÀ» ¼û±â´Â °ÍÀÌ ´õ ³ªÀ» ¼öµµ ÀÖ´Ù. ±×·¡µµ °íÁ¤µÈ ¿É¼Ç(Hard Coding)º¸´Ù´Â ÀÏ´Ü ¼û±â°í Á÷Á¢ ¼öÁ¤À» Çã¿ëÇÏ´Â °ÍÀÌ °í±Þ »ç¿ëÀÚ¸¦ À§Çؼ­ ´õ ÁÁÀº Á¤Ã¥ÀÌ´Ù.

Load, Save µÎ ÇÔ¼ö¿¡ ÀÇÇØ SOptionÀÇ ¸â¹öµéÀº ¿µ±¸ Á¤º¸·Î ±× °ÝÀÌ ½Â°ÝµÇ¸ç ¿µ¿øÇÑ »ý¸íÀ» º¸Àå¹Þ°Ô µÈ´Ù. Àü¿ªº¯¼ö´Â ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ Ç×»ó ±× °ªÀ» À¯ÁöÇÏ´Â ±ä Áö¼Ó¼ºÀ» °¡Áö´Âµ¥ ºñÇØ ÀÌ Á¤º¸µéÀº ÇÁ·Î±×·¥ ¼³Ä¡ ÈÄ ¾ðÀνºÅçµÉ ¶§±îÁö ±× °ªÀ» À¯ÁöÇÏ´Â ¿µ±¸ Á¤º¸(Persistent)°¡ µÇ´Â °ÍÀÌ´Ù. º¯¼öÀÇ Áö¼Ó¼ºÀÌ Àü¿ªº¯¼öº¸´Ùµµ ÈξÀ ´õ ±ä ¼ÀÀÌ´Ù.

·¹Áö½ºÆ®¸® ÀÔÃâ·ÂÇÔ¼ö¸¦ ¸¸µé¾úÀ¸´Ï ÀÌÁ¦ ¿É¼ÇÀ» ÇÑ ¹ø¸¸ ¹Ù²ã ³õÀ¸¸é ÀÌ ¼³Á¤»óŸ¦ ±×´ë·Î ÀúÀåÇß´Ù°¡ ´ÙÀ½ ¹ø ½ÇÇàÇÒ ¶§ µ¿ÀÏÇÑ ¼³Á¤»óÅ·Π½ÃÀÛÇÒ ¼ö ÀÖ´Ù. °ªÀ» ÀúÀåÇÏ´Â ½ÃÁ¡Àº ÇÁ·Î±×·¥À» Á¾·áÇϱâ Á÷ÀüÀÎ OnDestroyÀÌ´Ù.

 

void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

    Option.Save(KEY);

 

     if (arFont)

          free(arFont);

     PostQuitMessage(0);

}

 

ÇÔ¼ö¸¦ ¸¸µé¾î ³ùÀ¸´Ï ºÒ·¯ Áֱ⸸ ÇÏ¸é µÈ´Ù. Àü¿ª ±¸Á¶Ã¼ Option¿¡ ±â¾ïµÇ¾î ÀÖ´Â ¼³Á¤»óÅ°¡ °í½º¶õÈ÷ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÉ °ÍÀÌ´Ù. ÇÁ·Î±×·¥ÀÌ ¸í½ÃÀûÀ¸·Î Á¾·áµÉ ¶§ ¿Ü¿¡µµ ¼³Á¤À» °­Á¦·Î ÀúÀåÇØ¾ß ÇÒ °÷ÀÌ ÇÑ ±ºµ¥ ´õ ÀÖ´Ù.

 

BOOL OnQueryEndSession(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     HWND hCloseChild;

     hCloseChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hCloseChild) {

          if (ConfirmSave(hCloseChild)==IDCANCEL)

              return TRUE;

          hCloseChild=GetWindow(hCloseChild,GW_HWNDNEXT);

     }

    OnDestroy(hWnd,0,0);

     return FALSE;

}

 

½Ã½ºÅÛÀÌ Á¾·áµÉ ¶§´Â ½ÇÇàÁßÀÎ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸ÞÀÎ À©µµ¿ì¸¦ ÀÏÀÏÀÌ Æı«ÇÏÁö ¾Ê±â ¶§¹®¿¡ °­Á¦·Î ¼³Á¤ ÀúÀå ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ¹°·Ð ½Ã½ºÅÛ Á¾·á¸¦ Ãë¼ÒÇßÀ¸¸é ±×·² ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ·¸°Ô ÀúÀåµÈ ¼³Á¤»óŸ¦ ´Ù½Ã Àоî¿À´Â ½ÃÁ¡Àº ¹°·Ð OnCreateÀÌ´Ù.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     g_hMDIClient=CreateWindowEx(WS_EX_CLIENTEDGE,"MDICLIENT", NULL,

          WS_CHILD | WS_CLIPCHILDREN |    WS_VISIBLE,

          0,0,0,0,hWnd,(HMENU)NULL, g_hInst, (LPSTR)&ccs);

     SetTimer(hWnd,100,1,NULL);

 

    if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {

    } else {

        Option.Load(KEY);

    }

     ....

 

Option.Load ÇÔ¼ö¿¡ ÀÇÇØ ÀÌÀüÀÇ ¼³Á¤»óŸ¦ Àоî¿Àµµ·Ï ÇÏ¿´´Ù. ´Ü, ÃÖÃÊ ½ÇÇà½Ã¿¡´Â ÀúÀåµÈ ¼³Á¤Á¤º¸°¡ ¾ø±â ¶§¹®¿¡ Load ÇÔ¼ö¸¦ È£ÃâÇصµ °ªÀ» ÀÐÀ» ¼ö°¡ ¾ø´Ù. StartActionÀÇ °ªÀ» ´ëÇ¥ÀûÀ¸·Î ÀоµÇ µðÆúÆ®¸¦ 1000À¸·Î ÁöÁ¤ÇÏ¿© ÀÐÇôÁø °ªÀÌ ±×´ë·Î 1000À̶ó¸é ·¹Áö½ºÆ®¸®¿¡ Á¤º¸°¡ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜÇÑ´Ù. ÀÌ °æ¿ì´Â ¾Æ¹« °Íµµ ÇÏÁö ¾ÊÀ¸¸ç SOption::Init¿¡¼­ ÃʱâÈ­ÇÑ È£½ºÆ® µðÆúÆ® ¼³Á¤À» ±×´ë·Î »ç¿ëÇϵµ·Ï ÇÏ¿´´Ù.

if¹®ÀÇ ÇüÅ°¡ Á» ¸¶À½¿¡ ¾È µéµµ·Ï µÇ¾î Àִµ¥ Áö±ÝÀº ÃÖÃÊ ½ÇÇà½Ã ÇÒ ÀÏÀÌ ¾øÁö¸¸ °Ë»ö ±â´É, ¹®¹ý°­Á¶ ±â´ÉÀÌ µé¾î°¡¸é ÀÌ ºí·Ï¿¡¼­ ÇÒ ÀÏÀÌ ÀÖÀ¸¹Ç·Î ÀÏ´Ü ÀÌ·¸°Ô ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. ÀÌÁ¦ ¼³Á¤»óŸ¦ ¹Ù²Û ÈÄ Á¾·áÇß´Ù°¡ ´Ù½Ã ½ÇÇàÇغ¸¸é º¯°æµÈ ¼³Á¤ÀÌ ±×´ë·Î º¹±¸µÉ °ÍÀÌ´Ù. Á¾·áÇÒ ¶§ ÀúÀåÇÏ°í ´Ù½Ã ½ÃÀÛÇÒ ¶§ ÀúÀåµÈ °ªÀ» Àоî¿À¹Ç·Î ´ç¿¬ÇÏ´Ù.