ÆíÁý Á¤º¸¶õ ij·µÀÇ À§Ä¡³ª ¼±Åà ¿µ¿ª, ºÏ¸¶Å© »óÅ µîÀÇ Á¤º¸¸¦ ÀǹÌÇϴµ¥ ÀÌ Á¤º¸¸¦ ÀúÀåÇß´Ù°¡ ÆÄÀÏÀ» ¿ ¶§ ´Ù½Ã ÀÐ¾î ¿À¸é ÆíÁýÇÏ´ø ¸ðµç »óŸ¦ ±×´ë·Î º¹¿øÇÒ ¼ö ÀÖ´Ù. ½ÉÁö¾î Ãë¼Ò ·¹ÄÚµå±îÁö º¹±¸ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¾îÁ¦ ÀÛ¾÷ÇÏ´ø ¹®¼¸¦ ¿À´Ã ¿¾î¼ Ãë¼ÒÇÏ´Â °Íµµ °¡´ÉÇØÁø´Ù. ¸ÚÁø ±â´ÉÀ̱â´Â Çѵ¥ ±¸ÇöÇϱâ´Â ´Ù¼Ò º¹ÀâÇÏ´Ù.
ÅؽºÆ® ÆÄÀÏÀº ´ç±ÙÀÇ °íÀ¯ Æ÷¸ËÀÌ ¾Æ´Ï¶ó ÀÓÀÇÀÇ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â °ø¿ë Æ÷¸ËÀ̱⠶§¹®¿¡ ÆÄÀÏÀÇ µÚÂÊ¿¡ ÆíÁý Á¤º¸¸¦ µ¡ºÙ¿©¼ ÀÛ¼ºÇÒ ¼ö´Â ¾ø´Ù. ÅؽºÆ® ÆÄÀÏÀº ¼ø¼öÇÑ ÅؽºÆ®¸¸ °¡Á®¾ß ÇÑ´Ù. ±×·¡¼ °¢ ÆÄÀϺ°·Î º°µµÀÇ ÆíÁý Á¤º¸ ÆÄÀÏÀ» ¸¸µé¾î¼ ÀúÀåÇØ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù. ÆíÁý Á¤º¸¿Í °ü·ÃµÈ ¿É¼Ç º¯¼ö´Â SOption ±¸Á¶Ã¼¿¡ ÀÌ¹Ì ¼±¾ðµÇ¾î ÀÖ´Ù.
º¯¼ö |
¼³¸í |
bMakeEditInfo |
ÆíÁý Á¤º¸ ÆÄÀÏÀ» ¸¸µé °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. |
EditInfoFolder |
ÆíÁý Á¤º¸ ÆÄÀÏÀ» ¸¸µé À§Ä¡. ""ÀÌ¸é ¹®¼ ÆÄÀÏ°ú °°Àº Æú´õ¿¡ ÀúÀåµÈ´Ù. |
EditInfoMask |
Æ÷Ç﵃ Á¤º¸ÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. |
bUseEditInfo |
ÆíÁý Á¤º¸ ÆÄÀÏÀ» »ç¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ¸¸µé±â¸¸ ÇÏ°í »ç¿ëÇÏÁö´Â ¾ÊÀ» ¼öµµ ÀÖ´Ù. |
ÆíÁý Á¤º¸ÀÇ Á¾·ù´Â ´ÙÀ½°ú °°Àºµ¥ ¿©·¯ °¡Áö Á¤º¸¸¦ µ¿½Ã¿¡ ÁöÁ¤Çϱâ À§ÇØ 2ÀÇ °Åµì½ÂÀ¸·Î ºñÆ®º° Àǹ̸¦ ÇÒ´çÇß´Ù. Option.h¿¡ ÀÌ ¸ÅÅ©·Î »ó¼ö¸¦ ¼±¾ðÇÑ´Ù.
#define EI_OFFSET 1
#define EI_SELECTION 2
#define EI_BOOKMARK 4
#define EI_UNDORECORD 8
#define EI_SETTING 0x10
Å×½ºÆ®¸¦ À§ÇØ EditInfoMaskÀÇ °ª¿¡ ¸ðµç Ç÷¡±×¸¦ ¼³Á¤ÇØ µÎ¾ú´Âµ¥ SOption::Init¿¡¼ 0x1f·Î ÃʱâÈÇØ µÎ¾ú´Ù. ÃÖÁ¾ ¿É¼Ç Á¶Á¤½Ã¿¡ ÀûÀýÇÑ Ç÷¡±× Á¶ÇÕÀ¸·Î º¯°æÇÒ °ÍÀÌ´Ù. ÆíÁý Á¤º¸¸¦ ÆÄÀÏ·Î ÀúÀåÇÏ·Á¸é È£½ºÆ®°¡ ÄÁÆ®·ÑÀÇ ÆíÁý Á¤º¸¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¼ Ãë¼Ò ·¹ÄÚµå, ºÐÇÒ »óÅ µî¿¡ ´ëÇÑ ¸â¹öµéÀ» public ¿µ¿ª¿¡ ¼±¾ðÇØ µÎ¾ú´Ù. Ãë¼Ò ·¹ÄÚµå´Â ±¸Á¶°¡ º¹ÀâÇϱ⠶§¹®¿¡ È£½ºÆ®°¡ ¸â¹ö¸¦ Á÷Á¢ ¾×¼¼½ºÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. Áß¿äÇÑ ¸â¹ö¸¦ °ø°³ÇØ ¹ö¸®¸é ÇÁ·Î±×·¡¸Ó°¡ ½Ç¼öÇÒ À§ÇèÀÌ ´Ù¼Ò ÀÖ¾î Á¤º¸ ÀºÆó ¿øÄ¢¿¡´Â ¾î±ß³ª´Â ¼ÀÀÌÁö¸¸ Äڵ带 °£ÆíÇÏ°Ô ÀÛ¼ºÇϱâ À§ÇØ ÀÏ´Ü ÀÌ·¸°Ô ÀÛ¼ºÇß´Ù. ºä¿¡´Â ºÏ¸¶Å©¸¦ Á¶»ç ¹× º¯°æÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
class CApiEditText : public CWindow
{
....
virtual int *GetBookmark() { return arMark; }
virtual void SetBookmark(int *aMark);
};
void CApiEditText::SetBookmark(int *aMark)
{
memcpy(arMark,aMark,sizeof(int)*MAXBOOKMARK);
Invalidate(-1);
}
GetBookmark ÇÔ¼ö´Â arMark ¹è¿ÀÇ Æ÷ÀÎÅ͸¸ ¸®ÅÏÇÏ¸é µÈ´Ù. SetBookmark ÇÔ¼ö´Â Àμö·Î Àü´ÞµÈ ºÏ¸¶Å© ¹è¿À» ³»ºÎ ¸â¹ö¿¡ º¹»çÇÏ°í ȸ鸸 ´Ù½Ã ±×¸°´Ù. ¼±Åà ¿µ¿ªÀ» Á¶»çÇÏ´Â GetSelect ÇÔ¼öµµ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù. ÇÁ·¹ÀÓ°ú ºä ¸ðµÎ ¼öÁ¤ÇØ¾ß ÇÏ¸ç ¿øÇü»óÀÇ º¯È°¡ ÀÖÀ¸¹Ç·Î Çì´õ ÆÄÀϵµ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
void CApiEdit::GetSelect(int &s, int &e, BOOL bRegular/*=TRUE*/)
{
GetActiveView()->GetSelect(s,e,bRegular);
}
void CApiEditText::GetSelect(int &s, int &e,BOOL bRegular/*=TRUE*/)
{
if (bRegular) {
s=min(SelStart,SelEnd);
e=max(SelStart,SelEnd);
} else {
s=SelStart;
e=SelEnd;
}
}
¼±Åà ¹æÇâ±îÁö °°ÀÌ ÀúÀåÇϱâ À§ÇØ Á¤±ÔÈ ¿©ºÎ¸¦ ¸¶Áö¸· Àμö·Î Àü´Þ¹Þ´Â´Ù. ±âÁ¸ Äڵ尡 ¿µÇâÀ» ¹ÞÁö ¾Ê¾Æ¾ß ÇϹǷΠÃß°¡µÈ Àμö´Â µðÆúÆ®·Î TRUE°ªÀ» °¡Áø´Ù. ÆíÁý Á¤º¸ ÆÄÀÏÀº ÀÏ´ÜÀº ±¸Á¶Ã¼ÀÌ´Ù. Dangeun.h ¿¡ ´ÙÀ½ ±¸Á¶Ã¼¿Í ÀÌ ±¸Á¶Ã¼¸¦ °ü¸®ÇÏ´Â ÇÔ¼öÀÇ ¿øÇüÀ» ¼±¾ðÇÑ´Ù.
struct EditInfo
{
TCHAR Text[64];
int Ver;
TCHAR FilePath[MAX_PATH];
DWORD FileSize;
FILETIME FileTime;
int EditInfoMask;
int HorzRatio,VertRatio;
int arViewType[4];
int ActiveView;
int BookMark[4][MAXBOOKMARK];
int off[4];
int SelStart[4];
int SelEnd[4];
BOOL bWrap[4];
int LineRatio[4];
LOGFONT logfont[4];
};
....
BOOL GetEiPath(TCHAR *Path, TCHAR *EiPath);
BOOL MakeEditInfo(CApiEdit &Ae, TCHAR *Path, EditInfo &ei);
void UpdateEditInfo(CApiEdit &Ae, TCHAR *Path);
void SaveEditInfo(CApiEdit &Ae, TCHAR *Path);
void LoadEditInfo(CApiEdit &Ae, TCHAR *Path);
EditInfo ±¸Á¶Ã¼¿¡´Â °£´ÜÇÑ ¼³¸í ¹®ÀÚ¿°ú ¹öÀü Á¤º¸, ´ë»ó ÆÄÀÏÀÇ À̸§°ú Å©±â, ½Ã°£ µîÀÌ ÀúÀåµÇ¸ç ¼³Á¤ »óÅÂ¿Í ºÏ¸¶Å©, ¼±Åà ¿µ¿ªÀÇ Á¤º¸µµ °°ÀÌ ÀúÀåµÈ´Ù. ´Ü, Ãë¼Ò ·¹ÄÚµå´Â ±æÀÌ°¡ °¡º¯ÀûÀ̱⠶§¹®¿¡ ÀÌ ±¸Á¶Ã¼ µÚ¿¡ º°µµ·Î ÀÛ¼ºÇϱâ·Î ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ÇÔ¼ö´Â ÆíÁý Á¤º¸ ÆÄÀÏÀÇ °æ·Î¸¦ ÀÛ¼ºÇÑ´Ù.
// ÆíÁý Á¤º¸ ÆÄÀÏÀÇ À§Ä¡¸¦ ±¸ÇÑ´Ù.
BOOL GetEiPath(TCHAR *Path, TCHAR *EiPath)
{
TCHAR Drive[_MAX_DRIVE];
TCHAR Dir[_MAX_DIR];
TCHAR Name[MAX_PATH];
TCHAR Ext[_MAX_EXT];
_splitpath(Path,Drive,Dir,Name,Ext);
if (lstrcmpi(Ext,".dgx")==0)
return FALSE;
if (lstrlen(Option.EditInfoFolder)==0 || _access(Option.EditInfoFolder,0)!=0) {
wsprintf(EiPath,"%s%s%s.dgx",Drive,Dir,Name);
} else {
wsprintf(EiPath,"%s\\%s.dgx",Option.EditInfoFolder,Name);
}
return TRUE;
}
EditInfoFolder¿É¼Ç°ú ÇöÀç ¹®¼ÀÇ °æ·Î¸¦ ¹ÙÅÁÀ¸·Î ÆíÁý Á¤º¸ ÆÄÀÏÀ» ÀÛ¼ºÇÒ À§Ä¡¸¦ ±¸Çϴµ¥ ÆíÁý Á¤º¸ ÆÄÀÏÀ» ÀÛ¼ºÇÒ Æú´õ°¡ ÁöÁ¤µÇ¾î ÀÖ°í À¯È¿Çϸé ÀÌ Æú´õ¿¡ ÀÛ¼ºÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¹®¼¿Í °°Àº Æú´õ¸¦ »ç¿ëÇÑ´Ù. ¹®¼ ÆÄÀÏ°ú °°Àº À̸§À» »ç¿ëÇÏµÇ È®ÀåÀÚ dgx¸¦ »ç¿ëÇÑ´Ù. °°Àº À̸§À» »ç¿ëÇϸç È®ÀåÀÚ¸¸ ´Ù¸£±â ¶§¹®¿¡ ¹®¼ À̸§¸¸ ¾Ë¸é ÆíÁý Á¤º¸ ÆÄÀϵµ ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù.
´Ü, dgx ÆÄÀÏÀ» ÆíÁýÇßÀ» ¶§´Â ÆíÁý Á¤º¸ ÆÄÀÏÀ» ¸¸µéÁö ¾Ê´Â´Ù. ÀÌ ÆÄÀÏÀº ´ç±ÙÀÇ °íÀ¯ ÆÄÀÏÀε¥´Ù ÀÚ±â ÀڽŰú ÆíÁý Á¤º¸ ÆÄÀÏÀÇ À̸§ÀÌ °°±â ¶§¹®¿¡ ÆíÁý Á¤º¸ ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö°¡ ¾ø´Ù. º°µµÀÇ À̸§ ±ÔÄ¢À» ¸¶·ÃÇÏ¸é °¡´ÉÀÌ¾ß ÇÏ°ÚÁö¸¸ ±×·² ÇÊ¿ä±îÁö´Â ¾øÀ» °Í °°´Ù. ÆíÁý Á¤º¸ ÆÄÀÏÀº ´ç±ÙÀÌ ³»ºÎÀûÀ¸·Î »ç¿ëÇÏ´Â ÆÄÀÏÀ̹ǷΠÁ÷Á¢ ÆíÁýÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ´ÙÀ½Àº ÆíÁý Á¤º¸ ÆÄÀÏÀ» ÀÛ¼ºÇÏ´Â ÇÔ¼öµéÀÌ´Ù.
// Ãë¼Ò ·¹Äڵ带 Á¦¿ÜÇÑ ÆíÁý Á¤º¸¸¦ ±¸Á¶Ã¼¿¡ ÀÛ¼ºÇÑ´Ù.
BOOL MakeEditInfo(CApiEdit &Ae, TCHAR *Path, EditInfo &ei)
{
HANDLE hFile;
int i;
if (Option.EditInfoMask == 0) {
return FALSE;
}
// Çì´õ¸¦ ÀÛ¼ºÇÑ´Ù. °æ·Î, Å©±â, ½Ã°£ µîÀ» ±â·ÏÇÑ´Ù.
memset(&ei,0,sizeof(EditInfo));
lstrcpy(ei.Text,"´ç±Ù ÆíÁý Á¤º¸ ÆÄÀÏÀÔ´Ï´Ù");
ei.Ver=120;
lstrcpy(ei.FilePath,Path);
hFile=CreateFile(Path,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
return FALSE;
}
ei.FileSize=GetFileSize(hFile,NULL);
GetFileTime(hFile,NULL,NULL,&ei.FileTime);
CloseHandle(hFile);
ei.EditInfoMask=Option.EditInfoMask;
// ºÐÇÒ »óŸ¦ ÀúÀåÇÏ°í °¢ ºäÀÇ À§Ä¡, ¼±Åà ¿µ¿ª, ºÏ¸¶Å©, ¼³Á¤À» ±â·ÏÇÑ´Ù.
ei.VertRatio=Ae.VertRatio;
ei.HorzRatio=Ae.HorzRatio;
ei.ActiveView=Ae.ActiveView;
for (i=0;i<4 && Ae.arView[i];i++) {
ei.arViewType[i]=Ae.arView[i]->ViewType;
if (ei.EditInfoMask & EI_OFFSET) {
ei.off[i]=Ae.arView[i]->GetOffset();
}
if (ei.EditInfoMask & EI_SELECTION) {
Ae.arView[i]->GetSelect(ei.SelStart[i], ei.SelEnd[i], FALSE);
}
if (ei.EditInfoMask & EI_BOOKMARK) {
memcpy(ei.BookMark[i],Ae.arView[i]->GetBookmark(),sizeof(int)*MAXBOOKMARK);
}
if (ei.EditInfoMask & EI_SETTING) {
ei.bWrap[i]=Ae.GetWrap()==0 ? FALSE:TRUE;
ei.LineRatio[i]=Ae.GetLineRatio();
Ae.GetFont(&ei.logfont[i]);
}
}
return TRUE;
}
// ÆíÁý Á¤º¸¿¡¼ Ãë¼Ò ·¹Äڵ带 Á¦¿ÜÇÑ ºÎºÐ¸¸ ÀÛ¼ºÇÑ´Ù.
void UpdateEditInfo(CApiEdit &Ae, TCHAR *Path)
{
EditInfo ei;
HANDLE hFile;
TCHAR EiPath[MAX_PATH];
DWORD dwWritten;
DWORD dwCreate;
if (MakeEditInfo(Ae,Path,ei) == FALSE) {
return;
}
if (GetEiPath(Path,EiPath)==FALSE) {
return;
}
if (_access(EiPath,0)==0) {
dwCreate=OPEN_EXISTING;
} else {
dwCreate=CREATE_ALWAYS;
}
hFile=CreateFile(EiPath,GENERIC_WRITE,0,NULL,
dwCreate,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
return;
}
// ÆíÁý Á¤º¸¸¸ ´Ù½Ã ±â·ÏÇÑ´Ù.
WriteFile(hFile,&ei,sizeof(EditInfo),&dwWritten,NULL);
CloseHandle(hFile);
}
// ÆíÁý Á¤º¸¿Í Ãë¼Ò ·¹ÄÚµå±îÁö ÀÛ¼ºÇÏ¿© ÆÄÀÏ·Î Ãâ·ÂÇÑ´Ù.
void SaveEditInfo(CApiEdit &Ae, TCHAR *Path)
{
EditInfo ei;
HANDLE hFile;
TCHAR EiPath[MAX_PATH];
DWORD dwWritten;
UndoRecord *p;
int datasize;
if (MakeEditInfo(Ae,Path,ei) == FALSE) {
return;
}
if (GetEiPath(Path,EiPath)==FALSE) {
return;
}
hFile=CreateFile(EiPath,GENERIC_WRITE,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
return;
}
// ÆíÁý Á¤º¸ Ãâ·Â
WriteFile(hFile,&ei,sizeof(EditInfo),&dwWritten,NULL);
// Ãë¼Ò ·¹ÄÚµå ÀúÀå ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é Ãë¼Ò ·¹Äڵ嵵 Ãâ·Â
if (ei.EditInfoMask & EI_UNDORECORD) {
WriteFile(hFile,&Ae.nowur,sizeof(int),&dwWritten,NULL);
p=Ae.pUR;
// Ãë¼Ò ·¹Äڵ带 ¼øȸÇÑ´Ù. Á¦ÀÏ µÚÀÇ UR_NONEµµ Æ÷ÇԵȴÙ.
for (;;p++) {
// ·¹ÄÚµå ¸ÕÀú Ãâ·Â
WriteFile(hFile,p,sizeof(UndoRecord),&dwWritten,NULL);
if (p->action == UR_NONE) {
datasize=0;
} else {
datasize=_msize(p->data);
}
// ·¹ÄÚµåÀÇ µ¥ÀÌÅÍ Ãâ·Â
WriteFile(hFile,&datasize,sizeof(int),&dwWritten,NULL);
WriteFile(hFile,p->data,datasize,&dwWritten,NULL);
if (p->action == UR_NONE) {
break;
}
}
}
CloseHandle(hFile);
}
MakeEditInfo ÇÔ¼ö´Â ÁöÁ¤ÇÑ ÆÄÀÏÀÇ ÆíÁý Á¤º¸¸¦ Àμö·Î Àü´ÞµÈ ±¸Á¶Ã¼¿¡ ÀÛ¼ºÇÑ´Ù. ±¸Á¶Ã¼ ¾ÕÂÊÀÇ Çì´õ¿¡ ¼³¸í ¹®ÀÚ¿, ¹öÀü Á¤º¸ µîÀ» ÀÛ¼ºÇÏ°í ÆíÁý Á¤º¸ ÆÄÀÏÀÇ À¯È¿¼º Á¡°ËÀ» À§ÇØ ´ë»ó ÆÄÀÏÀÇ Å©±â¿Í ³¯Â¥ µîµµ ±â·ÏÇß´Ù. ¸¸¾à ¿ÜºÎ¿¡¼ ÅؽºÆ® ÆÄÀÏÀ» ¼öÁ¤ÇÑ´Ù¸é ÆíÁý Á¤º¸ ÆÄÀÏÀº ¹«È¿À̹ǷΠÀû¿ëÇؼ´Â ¾ÈµÈ´Ù. ÆÄÀÏÀÇ ³¯Â¥º¸´Ù´Â CRC¸¦ ¾²´Â °ÍÀÌ ´õ Á¤È®ÇÏ°ÚÁö¸¸ ÃßÃ⠽ð£ÀÌ ¿À·¡ °É·Á Àû¿ëÇÏÁö ¾Ê¾Ò´Ù. Çì´õ¸¦ ÀÛ¼ºÇÑ ÈÄ ºäÀÇ ºÐÇÒ »óÅÂ¿Í °¢ ºäÀÇ ¼³Á¤ »óŸ¦ ÀúÀåÇ쵂 ¸¶½ºÅ©°¡ ÁöÁ¤ÇÏ´Â Á¤º¸¸¸ ÀúÀåÇÏ¸é µÈ´Ù.
ÀÌ ÇÔ¼ö´Â ·ÎÄà ³×Æ®¿öÅ©¿¡ ÀÖ´Â ÆÄÀÏ¿¡ ´ëÇؼµµ ÆíÁý Á¤º¸¸¦ ÀÛ¼ºÇÑ´Ù. ±×·¯³ª FTP¿¡ ÀÖ´Â ÆÄÀÏ¿¡ ´ëÇؼ´Â ÆíÁý Á¤º¸¸¦ ÀÛ¼ºÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé FTP ¼¹ö¿¡ ÆíÁý Á¤º¸ ÆÄÀÏÀ» ¾÷·Îµå ÇÑ´Ù´Â °Íµµ ¾î·Æ°í ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÀÓÀÇÀÇ ÆÄÀÏÀ» ¿ø°ÝÁö¿¡ ¿Ã¸®´Â °Íµµ ¹Ù¶÷Á÷ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¶ÇÇÑ ¿ø°ÝÁö¿¡ ÀÖ´Â ÆÄÀÏÀÇ Å©±â¿Í ³¯Â¥¸¦ Á¤È®ÇÏ°Ô ±¸Çϱ⵵ ¾î·Á¿ö ÆíÁý Á¤º¸ÀÇ À¯È¿¼ºÀ» Á¡°ËÇÏ´Â °Íµµ ½±Áö ¾Ê´Ù. FTP ÆÄÀÏ¿¡ ´ëÇÑ Ã³¸®´Â º°µµ·Î ÇÏÁö ¾Ê¾Æµµ CreateFileÀÌ ½ÇÆÐÇϹǷΠÀÚ¿¬È÷ ¸®ÅϵȴÙ.
SaveEditInfo ÇÔ¼ö´Â ÆíÁý Á¤º¸»Ó¸¸ ¾Æ´Ï¶ó Ãë¼Ò ·¹ÄÚµå±îÁöµµ °°ÀÌ ÀÛ¼ºÇÏ¿© ÆÄÀÏ·Î Ãâ·ÂÇÑ´Ù. ÆíÁý Á¤º¸´Â MakeEditInfo ÇÔ¼ö°¡ ÀÛ¼ºÇÑ ·¹Äڵ带 ÆÄÀÏ·Î Ãâ·ÂÇϱ⸸ ÇÏ¸é µÇÁö¸¸ Ãë¼Ò ·¹ÄÚµå´Â Á÷Á¢ Á¶»çÇÏ¿© Ãâ·ÂÇÑ´Ù. ¼±µÎ¿¡ ÇöÀç Ãë¼Ò ·¹ÄÚµåÀÇ À妽º¸¦ ¸ÕÀú Ãâ·ÂÇÏ°í pUR ¹è¿À» ¼øȸÇÏ¸é¼ UR_NONEÀÌ ³ª¿Ã ¶§±îÁö Ãë¼Ò ·¹ÄÚµå¿Í ±× µ¥ÀÌÅ͸¦ ÆÄÀÏ·Î ¹Ýº¹ Ãâ·ÂÇÑ´Ù. pUR ¹è¿°ú °ü·Ã º¯¼öµéÀ» ¸ðµÎ ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù°í º¸¸é µÈ´Ù. ´Ü, URSize´Â ·±Å¸ÀÓÀÇ ¹öÆÛ Å©±âÀ̹ǷΠµû·Î Ãâ·ÂÇÏÁö ¾Ê¾Æµµ Ãâ·ÂµÈ ·¹ÄÚµåÀÇ ±æÀ̸¦ ¼¼ º¸¸é ¾Ë ¼ö ÀÖ´Ù.
UpdateEditInfo ÇÔ¼ö´Â ÆíÁý Á¤º¸ ÆÄÀÏ¿¡¼ Ãë¼Ò ·¹Äڵ带 Á¦¿ÜÇÑ ºÎºÐ¸¸ ´Ù½Ã ÀÛ¼ºÇÑ´Ù. ÆíÁý Á¤º¸¸¦ ÀÛ¼ºÇÏ´Â ÇÔ¼ö°¡ ÀÌ·¸°Ô ³ª´©¾îÁ® ÀÖ´Â ÀÌÀ¯´Â ÆÄÀÏÀÇ ÆíÁý ¿©ºÎ¿¡ µû¶ó ´Ù½Ã ÀÛ¼ºÇØ¾ß ÇÒ Á¤º¸µéÀÌ Á¶±Ý¾¿ ´Ù¸£±â ¶§¹®Àε¥ Àá½Ã ÈÄ ÇÔ¼öµéÀÌ È£ÃâµÇ´Â ºÎºÐÀ» º¸¸é ÀÌÇØ°¡ °¥ °ÍÀÌ´Ù. ´ÙÀ½Àº ÆíÁý ÆíÁý Á¤º¸ ÆÄÀÏÀ» Àоî¿Í Àû¿ëÇÏ´Â ÇÔ¼öÀÌ´Ù.
// ÆíÁý Á¤º¸¸¦ Àоî Àû¿ëÇÑ´Ù.
void LoadEditInfo(CApiEdit &Ae, TCHAR *Path)
{
EditInfo ei;
HANDLE hFile=INVALID_HANDLE_VALUE;
HANDLE hDoc=INVALID_HANDLE_VALUE;
TCHAR EiPath[MAX_PATH];
TCHAR Drive[_MAX_DRIVE];
TCHAR Dir[_MAX_DIR];
TCHAR Name[MAX_PATH];
DWORD dwRead;
FILETIME FileTime;
int i;
int urnum;
int datasize;
UndoRecord UR;
// ¹®¼ Æú´õ¿¡¼ ¸ÕÀú ã°í ÁöÁ¤µÈ Æú´õµµ ã¾Æ º»´Ù.
_splitpath(Path,Drive,Dir,Name,NULL);
wsprintf(EiPath,"%s%s%s.dgx",Drive,Dir,Name);
if (_access(EiPath,0)!=0) {
if (lstrlen(Option.EditInfoFolder)!=0) {
wsprintf(EiPath,"%s\\%s.dgx",Option.EditInfoFolder,Name);
}
}
// ÆíÁý Á¤º¸ ÆÄÀÏÀÌ ¾øÀ¸¸é Àû¿ëÇÒ ¼ö ¾ø´Ù.
hFile=CreateFile(EiPath,GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
goto end;
}
// ¹öÀüÀÌ Æ²¸®°Å³ª ´ë»ó ÆÄÀÏÀÌ Æ²·Áµµ Àû¿ëÇÒ ¼ö ¾ø´Ù.
ReadFile(hFile,&ei,sizeof(EditInfo),&dwRead,NULL);
if (ei.Ver != 120 || lstrcmp(ei.FilePath,Path) != 0 || ei.EditInfoMask == 0) {
goto end;
}
// ¹®¼ ÆÄÀÏÀÇ ³¯Â¥¿Í Å©±âµµ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù.
hDoc=CreateFile(Path,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hDoc==INVALID_HANDLE_VALUE) {
goto end;
}
GetFileTime(hDoc,NULL,NULL,&FileTime);
if ((ei.FileSize != GetFileSize(hDoc,NULL) ||
(CompareFileTime(&FileTime,&ei.FileTime) != 0))) {
goto end;
}
// ºÐÇҵǾî ÀÖÀ¸¸é ºÐÇÒ »óŸ¦ º¹¿øÇÏ°í °¢ ºäÀÇ Å¸ÀÔµµ ±×´ë·Î º¹¿øÇÑ´Ù.
if (ei.VertRatio) {
Ae.SplitView(AESPLIT_VERT,ei.VertRatio);
}
if (ei.HorzRatio) {
Ae.SplitView(AESPLIT_HORZ,ei.HorzRatio);
}
for (i=0;i<4 && Ae.arView[i];i++) {
Ae.ChangeViewType(i,ei.arViewType[i]);
}
// °¢ ºäÀÇ ¼³Á¤ »óŸ¦ ÀÐ¾î º¹±¸ÇÑ´Ù.
for (i=0;i<4 && Ae.arView[i];i++) {
if (ei.EditInfoMask & EI_OFFSET) {
Ae.arView[i]->SetOffset(ei.off[i]);
}
if (ei.EditInfoMask & EI_SELECTION) {
if (ei.SelStart[i] != ei.SelEnd[i]) {
Ae.arView[i]->SetSelect(ei.SelStart[i], ei.SelEnd[i], FALSE);
}
}
if (ei.EditInfoMask & EI_BOOKMARK) {
Ae.arView[i]->SetBookmark(ei.BookMark[i]);
}
if (ei.EditInfoMask & EI_SETTING) {
Ae.arView[i]->SetWrap(ei.bWrap[i] ? Option.nWrap:0);
Ae.arView[i]->SetLineRatio(ei.LineRatio[i]);
Ae.arView[i]->SetFont(&ei.logfont[i]);
}
}
Ae.ActiveView=ei.ActiveView;
SetFocus(Ae.hWnd);
// Ãë¼Ò ·¹Äڵ尡 ±â·ÏµÇ¾î ÀÖÀ¸¸é º¹±¸ÇÑ´Ù.
if (ei.EditInfoMask & EI_UNDORECORD) {
ReadFile(hFile,&Ae.nowur,sizeof(int),&dwRead,NULL);
// ´õ ÀÌ»ó ÀÐÀ» ³»¿ëÀÌ ¾ø°Å³ª UR_NONEÀ» ¸¸³¯ ¶§±îÁö °è¼Ó Àд´Ù.
for (urnum=0;;urnum++) {
ReadFile(hFile,&UR,sizeof(UndoRecord),&dwRead,NULL);
if (dwRead==0) {
break;
}
// ÇÊ¿ä½Ã Ãë¼Ò ·¹Äڵ带 ÀçÇÒ´çÇÑ´Ù.
if (urnum==Ae.URSize-1) {
Ae.URSize+=640;
Ae.pUR=(UndoRecord *)realloc(Ae.pUR,sizeof(UndoRecord)*Ae.URSize);
memset(Ae.pUR+Ae.URSize-640,0,sizeof(UndoRecord)*640);
}
// ·¹ÄÚµåÀÇ µ¥ÀÌÅ͸¦ Àд´Ù.
ReadFile(hFile,&datasize,sizeof(int),&dwRead,NULL);
if (datasize) {
UR.data=(TCHAR *)malloc(datasize);
ReadFile(hFile,UR.data,datasize,&dwRead,NULL);
}
Ae.pUR[urnum]=UR;
if (UR.action == UR_NONE) {
break;
}
}
Ae.SaveModified();
}
end:
if (hDoc!=INVALID_HANDLE_VALUE) CloseHandle(hDoc);
if (hFile!=INVALID_HANDLE_VALUE) CloseHandle(hFile);
}
¹®¼°¡ ÀÖ´Â Æú´õ¸¦ ¸ÕÀú ã¾Æ º¸°í ¾øÀ¸¸é ÁöÁ¤ Æú´õ¸¦ ã´Â´Ù. ÆíÁý Á¤º¸ ÆÄÀÏÀ» ¾îµð´Ù ÀÛ¼ºÇÒ °ÍÀΰ¡´Â ¿É¼ÇÀ¸·Î ÁöÁ¤ÇÏÁö¸¸ ÆÄÀÏÀ» ãÀ» ¶§´Â Ç×»ó ¾çÂÊÀ» ´Ù µÚÁ® ºÁ¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé ÆíÁý Á¤º¸¸¦ ÀÛ¼ºÇÑ ÈÄ ¿É¼ÇÀ» ¹Ù²Ü ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. À̶§ ¿ì¼± ¼øÀ§ÀÇ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö Àִµ¥ Ç×»ó ¹®¼ Æú´õ¿¡ ÀÖ´Â ÆÄÀÏÀÌ ¿ì¼±ÀÌ´Ù. ¾çÂÊ ´Ù ¾øÀ¸¸é ÆíÁý Á¤º¸´Â ¹«½ÃµÈ´Ù. ÆíÁý Á¤º¸ ÆÄÀÏÀÌ ÀÖ´Ù¸é ´ÙÀ½À¸·Î À¯È¿¼ºÀ» Á¡°ËÇÑ´Ù. ¹öÀüÀÌ ´Ù¸£°Å³ª ´ë»ó ÆÄÀÏÀÌ ´Ù¸£¸é Á¦´ë·Î µÈ ÆíÁý Á¤º¸ ÆÄÀÏÀÌ ¾Æ´Ï´Ù. ¶ÇÇÑ ÆíÁý Á¤º¸ ÆÄÀÏ¿¡ ±â·ÏµÈ ¹®¼ ÆÄÀÏÀÇ ½Ã°£°ú Å©±â°¡ ´Þ¶óµµ ¾ÈµÈ´Ù. ¿ÜºÎ¿¡¼ ÀÌ ÆÄÀÏÀ» ÆíÁýÇß´Ù¸é ´ç±ÙÀÌ ÃÖÈÄ·Î ÀÛ¼ºÇÑ ÆíÁý Á¤º¸´Â ¸ðµÎ ¹«È¿ÀÌ´Ù.
À¯È¿ÇÑ Á¤º¸ ÆÄÀÏÀÌ¸é ±â·ÏµÈ ¸¶½ºÅ©°ª¿¡ µû¶ó Á¤º¸¸¦ Àоî¿Í ApiEdit¿¡ Àû¿ëÇÑ´Ù. ºÐÇҵǾî ÀÖ¾ú´Ù¸é ºÐÇÒµÈ »óŸ¦ ±×´ë·Î º¹¿øÇÏ°í °¢ ºäÀÇ ¿ÀÇÁ¼Â, ¼±Åà ¿µ¿ª, ºÏ¸¶Å© µîµµ ÃÖÈÄ ÀúÀåÇÒ ¶§ÀÇ »óÅÂ¿Í ¶È°°ÀÌ ¸¸µç´Ù. Ãë¼Ò ·¹ÄÚµå´Â È£½ºÆ®°¡ ¸Þ¸ð¸® ÇÒ´ç±îÁö ÇØ °¡¸é¼ Á÷Á¢ ¸¸µé¾î¾ß ÇÑ´Ù. °ü·Ã ÇÔ¼ö¸¦ ´Ù ¸¸µé¾î µÎ¾úÀ¸¹Ç·Î ÀÌÁ¦ ÇÊ¿äÇÒ ¶§ ÇÔ¼ö¸¦ ºÎ¸£±â¸¸ ÇÏ¸é µÈ´Ù. ÆíÁý Á¤º¸¸¦ ÀÛ¼ºÇÒ ½ÃÁ¡Àº ÆÄÀÏ ÀúÀå¿¡ ¼º°øÇßÀ» ¶§ÀÌ´Ù.
BOOL SaveToFile(HWND hChild,TCHAR *Path)
{
....
if (Result) {
lstrcpy(pSi->NowFile,Path);
pSi->Ae.SetModified(FALSE);
// ÆíÁý Á¤º¸ ÆÄÀÏÀ» ÀÛ¼ºÇÑ´Ù.
if (Option.bMakeEditInfo) {
SaveEditInfo(pSi->Ae,Path);
}
tie.mask=TCIF_IMAGE;
tie.iImage=0;
idx=FindFileTab(pSi->NowFile);
TabCtrl_SetItem(hFileTab,idx,&tie);
}
free(TextBuf);
return Result;
}
SaveEditInfo ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸¶½ºÅ©¿¡ ÁöÁ¤µÈ ¸ðµç ÆíÁý Á¤º¸¸¦ ÀÛ¼ºÇÏ¿© ÆÄÀÏ·Î ±â·ÏÇÑ´Ù. ¹®¼Ã¢À» ´ÝÀ» ¶§´Â ÆíÁý ±â·ÏÀ» °»½ÅÇϱ⸸ ÇÏ¸é µÈ´Ù.
LRESULT CALLBACK DGChildProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
case WM_DESTROY:
//
ÆíÁý Á¤º¸¸¦ °»½ÅÇÑ´Ù.
if
(Option.bMakeEditInfo && Option.bUpdateEditInfo &&
strncmp(pSi->NowFile,"À̸§¾øÀ½",8)
&&
pSi->Ae.GetModified()==FALSE)
{
UpdateEditInfo(pSi->Ae,pSi->NowFile);
}
DeleteFileTab(pSi->NowFile);
DestroyWindow(pSi->Ae.hWnd);
ºñ·Ï ¹®¼¸¦ ÆíÁýÇÑ ÈÄ ÀúÀåÇÏÁö ¾Ê¾Ò´õ¶óµµ ÆíÁý Á¤º¸´Â °»½ÅÇÑ´Ù. ±×·¡¼ ¹®¼¸¦ ¿¾ú´Ù°¡ ij·µ À§Ä¡¸¸ ¿Å±â°í ´Ù½Ã ´Ý¾Æµµ ÆíÁý Á¤º¸°¡ °»½ÅµÈ´Ù. À̶§´Â Ãë¼Ò ·¹ÄÚµå´Â ÀúÀåÇÒ ÇÊ¿ä°¡ ¾ø°í ÆíÁý Á¤º¸¸¸ ÀúÀåÇÏ¸é µÈ´Ù. Ãë¼Ò ·¹ÄÚµå´Â ±×´ë·Î À¯ÁöÇϱâ À§ÇØ Á¤º¸ ÆÄÀÏÀÌ ÀÌ¹Ì ÀÖÀ¸¸é OPEN_EXISTING Ç÷¡±×·Î ÆÄÀÏÀ» ¿¾î ±â·ÏÇÑ´Ù. ¹°·Ð ¾øÀ¸¸é ´Ù½Ã ¸¸µç´Ù.
¹®¼¸¦ Á¶±ÝÀÌ¶óµµ ÆíÁýÇßÀ¸¸é ÆíÁý Á¤º¸¸¦ °»½ÅÇÏÁö ¾Ê´Â´Ù. À̶§´Â ÆíÁý ÈÄ ÆíÁý °á°ú¸¦ ¹ö¸®´Â °ÍÀ̸ç À̶§ÀÇ ÆíÁý Á¤º¸´Â ÆÄÀÏÀ» ´Ù½Ã ¿¾úÀ» ¶§ »ç¿ëÇÒ ¼ö ¾ø´Ù. MakeEditInfo´Â ApiEdit °´Ã¼ÀÇ ÆíÁý Á¤º¸¸¦ ÃëÇϴµ¥ ºñÇØ ÀÌ ¹®¼°¡ ÀúÀåµÇÁö ¾Ê¾Ò´Ù¸é Á¶»çµÈ ÆíÁý Á¤º¸´Â ¹«È¿ÀÎ °ÍÀÌ´Ù. ¿©±â¼ ÆíÁý Á¤º¸¸¦ °»½ÅÇÏ´Â °ÍÀº ¹®¼´Â ÆíÁýµÇÁö ¾Ê¾Ò´Âµ¥ ij·µ À̵¿, ºÏ¸¶Å© Á¶Á¤, ºä ºÐÇÒ »óÅ º¯°æ µî¸¸ ´Ù½Ã ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù.
ÆíÁý Á¤º¸¸¦ ´Ù½Ã Àоî¿Ã ½ÃÁ¡Àº ÆÄÀÏÀ» Àоî¿Ã ¶§Àε¥ bUseEditInfo ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ» ¶§ ÆíÁý Á¤º¸¸¦ ºÒ·¯¿Í ÃÖÈÄ ÆíÁýÇÏ´ø »óÅ·Π¸¸µç´Ù. ¸¸¾à ÀÌ ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾Ê´Ù¸é ÆíÁý Á¤º¸°¡ ÀÖ´õ¶óµµ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
BOOL OpenFileToChild(HWND hChild, TCHAR *Path)
{
....
pSi->Ae.SetModified(FALSE);
lstrcpy(pSi->NowFile,Path);
EncodePath(Path,EncPath);
SetWindowText(hChild,EncPath);
// ÆíÁý Á¤º¸¸¦ Àоî Àû¿ëÇÑ´Ù.
if (Option.bUseEditInfo) {
LoadEditInfo(pSi->Ae,Path);
}
return TRUE;
}
ÆíÁý Á¤º¸ ÆÄÀÏ¿¡ ±â·ÏµÈ ´ë·Î ÆíÁý »óÅ°¡ ±×´ë·Î º¹±¸µÇ¸ç ÀúÀåÇϱâ ÀüÀÇ »óÅÂ¿Í ¿ÏÀüÈ÷ ¶È°°Àº »óÅ·Π´ÙÀ½ ÀÛ¾÷À» °è¼ÓÇÒ ¼ö ÀÖ´Ù.
Áö±Ý±îÁö ¸¸µç ±â´Éµé¿¡ ´ëÇÑ ¿É¼Ç Á¶Á¤ ´ëÈ»óÀÚ¸¦ ÀÛ¼ºÇÑ´Ù. ´ëÈ»óÀÚ´Â ¸®¼Ò½º¿¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç ºñ·Ï ºñ¾î ÀÖÁö¸¸ ´ëÈ»óÀÚ ÇÁ·Î½ÃÀúµµ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Ù. ³»¿ë¸¸ ä¿ì¸é µÈ´Ù. ÆÄÀÏ ¿É¼Ç ´ëÈ»óÀÚÀÇ ÇÁ·Î½ÃÀú´Â ´ÙÀ½°ú °°´Ù.
BOOL CALLBACK FileDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HWND hCon;
int i;
TCHAR szTemp[MAX_PATH];
TCHAR Folder[MAX_PATH];
TCHAR Drive[_MAX_DRIVE];
TCHAR Dir[_MAX_DIR];
switch(iMessage) {
case WM_INITDIALOG:
hCon=GetDlgItem(hDlg,IDC_BACKUPLEVEL);
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"0(¹é¾÷ÇÏÁö ¾ÊÀ½)");
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"1(ÇÑ ´Ü°è¸¸ ¹é¾÷)");
for (i=2;i<32;i++) {
wsprintf(szTemp,"%d´Ü°è ¹é¾÷",i);
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)szTemp);
}
hCon=GetDlgItem(hDlg,IDC_BACKUPNAMING);
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹®¼.txt -> ¹®¼.bak");
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹®¼.txt -> ¹®¼_bak.txt");
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹®¼.txt -> ¹®¼_¹é¾÷.txt");
SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹®¼.txt -> ¹®¼.txt.bak");
SendDlgItemMessage(hDlg,IDC_SPINAUTOSAVE,UDM_SETRANGE,0,MAKELPARAM(1440,0));
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_BRBACKUPFOLDER:
GetWindowText(GetDlgItem(hDlg,IDC_BACKUPFOLDER),szTemp,MAX_PATH);
if (BrowseFolder(hDlg,"¹é¾÷ ÆÄÀÏÀ» ÀúÀåÇÒ Æú´õ¸¦ ¼±ÅÃÇϽʽÿÀ.",
szTemp,Folder)==TRUE) {
SetDlgItemText(hDlg,IDC_BACKUPFOLDER,Folder);
}
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
case IDC_BRDGBACKUP:
GetModuleFileName(g_hInst,Folder,MAX_PATH);
_splitpath(Folder,Drive,Dir,NULL,NULL);
wsprintf(Folder,"%s%sBackUp",Drive,Dir);
if (_access(Folder,0) != 0) {
if (MessageBox(hDlg,"ÀÌ Æú´õ¸¦ Áö±Ý ¸¸µå½Ã°Ú½À´Ï±î?",
"Áú¹®",MB_YESNO)==IDNO)
break;
CreateDirectory(Folder,NULL);
}
SetDlgItemText(hDlg,IDC_BACKUPFOLDER,Folder);
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
case IDC_BREDITINFOFOLDER:
GetWindowText(GetDlgItem(hDlg,IDC_EDITINFOFOLDER),szTemp,MAX_PATH);
if (BrowseFolder(hDlg,"ÆíÁý Á¤º¸ ÆÄÀÏÀ» ÀúÀåÇÒ Æú´õ¸¦ ¼±ÅÃÇϽʽÿÀ.",
szTemp,Folder)==TRUE) {
SetDlgItemText(hDlg,IDC_EDITINFOFOLDER,Folder);
}
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
case IDC_BRDGEDITINFO:
GetModuleFileName(g_hInst,Folder,MAX_PATH);
_splitpath(Folder,Drive,Dir,NULL,NULL);
wsprintf(Folder,"%s%sEditInfo",Drive,Dir);
if (_access(Folder,0) != 0) {
if (MessageBox(hDlg,"ÀÌ Æú´õ¸¦ Áö±Ý ¸¸µå½Ã°Ú½À´Ï±î?",
"Áú¹®",MB_YESNO)==IDNO)
break;
CreateDirectory(Folder,NULL);
}
SetDlgItemText(hDlg,IDC_EDITINFOFOLDER,Folder);
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
case IDC_MAKEEDITINFO:
AdjustDlgUI(8,hDlg);
case IDC_UPDATEEDITINFO:
case IDC_EIOFFSET:
case IDC_EISELECTION:
case IDC_EIBOOKMARK:
case IDC_EIUNDORECORD:
case IDC_EISETTING:
case IDC_USEEDITINFO:
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
}
return TRUE;
case WM_NOTIFY:
LPNMHDR hdr;
hdr=(LPNMHDR)lParam;
switch (hdr->code) {
case PSN_SETACTIVE:
g_StartPage=8;
SendDlgItemMessage(hDlg,IDC_BACKUPLEVEL,CB_SETCURSEL,NewOption.BackupLevel,0);
SendDlgItemMessage(hDlg,IDC_BACKUPNAMING,CB_SETCURSEL,NewOption.BackupNaming,0);
SetDlgItemText(hDlg,IDC_BACKUPFOLDER,NewOption.BackupFolder);
SetDlgItemInt(hDlg,IDC_AUTOSAVE,NewOption.AutoSaveInterval,FALSE);
CheckDlgButton(hDlg,IDC_MAKEEDITINFO,NewOption.bMakeEditInfo);
CheckDlgButton(hDlg,IDC_UPDATEEDITINFO,NewOption.bUpdateEditInfo);
CheckDlgButton(hDlg,IDC_USEEDITINFO,NewOption.bUseEditInfo);
CheckDlgButton(hDlg,IDC_EIOFFSET,NewOption.EditInfoMask & EI_OFFSET);
CheckDlgButton(hDlg,IDC_EISELECTION,NewOption.EditInfoMask & EI_SELECTION);
CheckDlgButton(hDlg,IDC_EIBOOKMARK,NewOption.EditInfoMask & EI_BOOKMARK);
CheckDlgButton(hDlg,IDC_EIUNDORECORD,NewOption.EditInfoMask & EI_UNDORECORD);
CheckDlgButton(hDlg,IDC_EISETTING,NewOption.EditInfoMask & EI_SETTING);
SetDlgItemText(hDlg,IDC_EDITINFOFOLDER,NewOption.EditInfoFolder);
AdjustDlgUI(8,hDlg);
return TRUE;
case PSN_APPLY:
ApplyNow();
return TRUE;
case PSN_KILLACTIVE:
NewOption.BackupLevel=SendDlgItemMessage(hDlg,IDC_BACKUPLEVEL,CB_GETCURSEL,0,0);
NewOption.BackupNaming=SendDlgItemMessage(hDlg,IDC_BACKUPNAMING,CB_GETCURSEL,0,0);
GetDlgItemText(hDlg,IDC_BACKUPFOLDER,NewOption.BackupFolder,MAX_PATH);
NewOption.AutoSaveInterval=GetDlgItemInt(hDlg,IDC_AUTOSAVE,NULL,FALSE);
NewOption.bMakeEditInfo=IsDlgButtonChecked(hDlg,IDC_MAKEEDITINFO);
NewOption.bUpdateEditInfo=IsDlgButtonChecked(hDlg,IDC_UPDATEEDITINFO);
NewOption.bUseEditInfo=IsDlgButtonChecked(hDlg,IDC_USEEDITINFO);
NewOption.EditInfoMask=0;
if (IsDlgButtonChecked(hDlg,IDC_EIOFFSET)) NewOption.EditInfoMask |= EI_OFFSET;
if (IsDlgButtonChecked(hDlg,IDC_EISELECTION)) NewOption.EditInfoMask |= EI_SELECTION;
if (IsDlgButtonChecked(hDlg,IDC_EIBOOKMARK)) NewOption.EditInfoMask |= EI_BOOKMARK;
if (IsDlgButtonChecked(hDlg,IDC_EIUNDORECORD)) NewOption.EditInfoMask |= EI_UNDORECORD;
if (IsDlgButtonChecked(hDlg,IDC_EISETTING)) NewOption.EditInfoMask |= EI_SETTING;
GetDlgItemText(hDlg,IDC_EDITINFOFOLDER,NewOption.EditInfoFolder,MAX_PATH);
return TRUE;
}
break;
}
return FALSE;
}
Áö±Ý±îÁö ¸¸µé¾î¿Ô´ø ´ëÈ»óÀÚ ÇÁ·Î½ÃÀú¿Í °ÅÀÇ µ¿ÀÏÇÏ´Ù. AdjustDlgUI¿¡¼ ÆíÁý ±â·Ï°ú °ü·ÃÇÑ ÄÁÆ®·ÑÀÇ »óŸ¦ °ü¸®ÇØ¾ß ÇÑ´Ù.
void AdjustDlgUI(int Page,HWND hDlg)
{
switch (Page) {
....
case 8:
if (IsDlgButtonChecked(hDlg,IDC_MAKEEDITINFO) == BST_CHECKED) {
EnableWindow(GetDlgItem(hDlg,IDC_UPDATEEDITINFO),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_EIOFFSET),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_EISELECTION),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_EIBOOKMARK),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_EIUNDORECORD),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_EISETTING),TRUE);
} else {
EnableWindow(GetDlgItem(hDlg,IDC_UPDATEEDITINFO),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_EIOFFSET),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_EISELECTION),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_EIBOOKMARK),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_EIUNDORECORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_EISETTING),FALSE);
}
break;
}
}
ApplyNow¿¡¼ ÀÚµ¿ ÀúÀå °£°ÝÀÌ º¯°æµÇ¾úÀ» ¶§ÀÇ Ã³¸®¸¦ ÇÑ´Ù. ´Ù¸¥ ¿É¼ÇÀº °ü·Ã ÇÔ¼ö¿¡¼ ÇÊ¿äÇÒ ¶§¸¶´Ù ÂüÁ¶ÇϹǷΠÁï½Ã Àû¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
void ApplyNow()
{
....
if (Option.AutoSaveInterval != NewOption.AutoSaveInterval) {
if (Option.AutoSaveInterval) {
SetTimer(g_hFrameWnd,1,Option.AutoSaveInterval*1000*60,NULL);
} else {
KillTimer(g_hFrameWnd,1);
}
}
hChild=GetWindow(g_hMDIClient,GW_CHILD);
while (hChild) {
....
ÀÚµ¿ ÀúÀå ÁֱⰡ º¯°æµÇ¾ú°í 0ÀÌ ¾Æ´Ò ¶§ ŸÀ̸Ӹ¦ ´Ù½Ã ¼³Ä¡ÇÑ´Ù. 0À¸·Î º¯°æµÇ¾úÀ¸¸é ŸÀ̸Ӹ¦ ÇØÁ¦ÇÑ´Ù. ¿¬°á »óÅ´ ´Ù¼Ò º¹ÀâÇϹǷΠº°µµÀÇ ÆäÀÌÁö¸¦ µû·Î ¸¸µç´Ù.
BOOL CALLBACK AssociateDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
int i;
FILETIME FileTime;
TCHAR szTemp[MAX_PATH];
TCHAR lpSubKey[MAX_PATH];
LONG Result;
HKEY key;
DWORD Size;
switch(iMessage) {
case WM_INITDIALOG:
RegOpenKeyEx(SHCR,NULL,0,KEY_READ,&key);
Result=ERROR_SUCCESS;
for (i=0;Result==ERROR_SUCCESS;i++) {
Size=MAX_PATH;
Result=RegEnumKeyEx(key,i,lpSubKey,&Size,NULL,NULL,NULL,&FileTime);
if (Result==ERROR_SUCCESS) {
if (lpSubKey[0]=='.') {
SendDlgItemMessage(hDlg,IDC_EXTENSIONS,CB_ADDSTRING,0,(LPARAM)lpSubKey);
}
}
}
Result=ERROR_SUCCESS;
for (i=0;Result==ERROR_SUCCESS;i++) {
Size=MAX_PATH;
Result=RegEnumKeyEx(key,i,lpSubKey,&Size,NULL,NULL,NULL,&FileTime);
if (Result==ERROR_SUCCESS) {
if (strncmp(lpSubKey,"Dangeun.",8)==0) {
SendDlgItemMessage(hDlg,IDC_ASSOEXTENSION,LB_ADDSTRING,0,(LPARAM)lpSubKey+7);
}
}
}
RegCloseKey(key);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_EXTENSIONS:
switch (HIWORD(wParam)) {
case CBN_SELCHANGE:
i=SendDlgItemMessage(hDlg,IDC_EXTENSIONS,CB_GETCURSEL,0,0);
SendDlgItemMessage(hDlg,IDC_EXTENSIONS,CB_GETLBTEXT,i,(LPARAM)lpSubKey);
SHRegReadString(SHCR,lpSubKey,NULL,"",szTemp,MAX_PATH);
SetDlgItemText(hDlg,IDC_EXTDESC,szTemp);
break;
}
break;
case IDC_MAKEASSOCIATE:
GetDlgItemText(hDlg,IDC_EXTENSIONS,lpSubKey,MAX_PATH);
GetDlgItemText(hDlg,IDC_EXTDESC,szTemp,MAX_PATH);
if (lpSubKey[0]=='.') {
MakeAssociate(lpSubKey,szTemp);
SendDlgItemMessage(hDlg,IDC_ASSOEXTENSION,LB_ADDSTRING,0,(LPARAM)lpSubKey);
}
break;
case IDC_UNASSOCIATE:
i=SendDlgItemMessage(hDlg,IDC_ASSOEXTENSION,LB_GETCURSEL,0,0);
if (i != -1) {
SendDlgItemMessage(hDlg,IDC_ASSOEXTENSION,LB_GETTEXT,i,(LPARAM)szTemp);
UnAssociate(szTemp);
SendDlgItemMessage(hDlg,IDC_ASSOEXTENSION,LB_DELETESTRING,i,0);
}
break;
}
return TRUE;
case WM_NOTIFY:
LPNMHDR hdr;
hdr=(LPNMHDR)lParam;
switch (hdr->code) {
case PSN_SETACTIVE:
g_StartPage=9;
return TRUE;
case PSN_APPLY:
ApplyNow();
return TRUE;
case PSN_KILLACTIVE:
return TRUE;
}
break;
}
return FALSE;
}
ÀÌ ¿É¼ÇÀº ´Ù¸¥ ¿É¼Ç°ú´Â ´Þ¸® ¹öÆ°À» ´©¸£´Â Áï½Ã Àû¿ëµÈ´Ù. ¿¬°á °ü°è´Â ´ç±ÙÀÌ ±â¾ïÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ½Ã½ºÅÛ ·¹Áö½ºÆ®¸®¿¡ ±â·ÏµÇ´Â °ÍÀ̱⠶§¹®¿¡ Çѹø ¿¬°á »óŸ¦ ¹Ù²Ù¸é ´Ù½Ã ¿ø·¡´ë·Î µ¹·Á ÁÖÁö ¾Ê´Â ÇÑ Ãë¼ÒÇÒ ¼ö ¾ø´Ù. Å×½ºÆ®°¡ ³¡³µÀ¸¹Ç·Î ¿É¼ÇÀ» ´Ù½Ã Á¶Á¤ÇÑ´Ù.
void SOption::Init()
{
....
BackupLevel=0;
lstrcpy(BackupFolder,"");
BackupNaming=1;
AutoSaveInterval=0;
bMakeEditInfo=FALSE;
bUpdateEditInfo=TRUE;
lstrcpy(EditInfoFolder,"");
EditInfoMask=0x1f;
bUseEditInfo=FALSE;
}
¹é¾÷, ÀÚµ¿ ÀúÀå, ÆíÁý Á¤º¸ ÀÛ¼º, »ç¿ë µîÀÇ ¿É¼ÇÀ» ¸ðµÎ ÇØÁ¦Çß´Ù. ¾Ö½á ¸¸µç ±â´ÉµéÀ̱â´Â ÇÏÁö¸¸ ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î ¹º°¡¸¦ ÇÏ´Â ¼ºñ½º´Â ÀÏ´ÜÀº ÇÏÁö ¾Ê´Â °ÍÀ¸·Î ¼³Á¤ÇØ ³õ°í »ç¿ëÀÚ°¡ ÇÊ¿ä·Î ÇÒ ¶§¸¸ ¼±ÅÃÀûÀ¸·Î ¾µ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ç±ÙÀ» ¸Þ¸ðÀå ¼öÁØÀ¸·Î ¾²°í ½ÍÀº »ç¶÷µéÀº ¹é¾÷ÀÌ´Ï ÆíÁý Á¤º¸´Ï ÇÏ´Â ±â´ÉµéÀ» ±ÍÂú°Ô ¿©±æ °ÍÀÌ¸ç »ç½Ç ´ëºÎºÐÀÇ »ç¿ëÀÚµéÀÌ ±×·¸´Ù.