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