ÀÌ Àå¿¡¼´Â ÀÛÁö¸¸ À¯¿ëÇÑ ÆíÀÇ ±â´ÉµéÀ» ¸¹ÀÌ Ãß°¡ÇÒ °ÍÀÌ´Ù. ÀÌ ±â´ÉµéÀº È£½ºÆ®°¡ Á¦°øÇϹǷΠ´ëºÎºÐÀÇ ÇÔ¼öµéÀÌ È£½ºÆ®¿¡ ÀÛ¼ºµÇ´Âµ¥ ½Ç½ÀÀÇ ÆíÀǸ¦ À§ÇØ Dangeun.h¿¡ ¾ÕÀ¸·Î ÀÛ¼ºÇÒ ÇÔ¼öµé¿¡ ´ëÇÑ ¿øÇüÀ» ¸ÕÀú ¼±¾ðÇØ ³õÀÚ.
BOOL TestNoSaved();
BOOL CALLBACK ConfirmSaveProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK ConfirmReloadProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL ResolveShortCut(TCHAR *ShortCut, TCHAR *Path);
void InsertFile(CApiEditText *pView);
BOOL CALLBACK SpecialDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK DGStringGridProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam);
´ç±Ù »Ó¸¸ ¾Æ´Ï¶ó ¹®¼¸¦ ¸¸µé¾î ³»´Â ÇÁ·Î±×·¥Àº Á¾·á Àü¿¡ ¹ÌÀúÀå ¹®¼¸¦ È®ÀÎÇÏ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. ºÒÀÇÀÇ »ç°í·Î ¹®¼¸¦ ÀÒÀ» °¡´É¼ºÀÌ ÀÖÀ¸¹Ç·Î ²À ÇÊ¿äÇÑ ±â´ÉÀ̱â´Â ÇÏÁö¸¸ ´ç±Ùó·³ ¿©·¯ °³ÀÇ ¹®¼¸¦ ¿©´Â ÇÁ·Î±×·¥¿¡¼´Â ÀÌ ±â´ÉÀÌ ¶§·Î´Â ºÒÆíÇÑ °æ¿ì°¡ ÀÖ´Ù. ¸Å ¹®¼¸¶´Ù °³º°ÀûÀ¸·Î Áú¹®À» ÇϹǷΠ¹«Ã´ ±ÍÂú´Ù. ´Ü¼øÈ÷ Âü°í¿ëÀ¸·Î ¹®¼¸¦ ¿¾î¼ ÁýÀû°Å¸®´Â °æ¿ìµµ Àִµ¥ ÀÌ·² ¶§¸¶´Ù Áú¹®À» ÇϹǷΠ¥ÁõÀÌ ³´Ù.
10°³ Á¤µµÀÇ ¹®¼¸¦ ¿¾î¼ ÀÌ°Í Àú°Í ÆíÁýÇØ ºÃ´Ù¸é 10¹ø ¾Æ´Ï¿À ¶Ç´Â ¿¹ ¹öưÀ» ´·¯¾ß ÇÑ´Ù. ½ÉÇÒ °æ¿ì´Â ¾Æ¿¹ ÀÛ¾÷ °ü¸®ÀÚ¸¦ ¿¾î ÇÁ·Î±×·¥À» Á׿© ¹ö¸®°í ½ÍÀº Ãæµ¿ÀÌ µé±â±îÁö ÇÑ´Ù. ±×·¡¼ °³º° ¹®¼¸¶´Ù ÀÏÀÏÀÌ ÀúÀå ¿©ºÎ¸¦ ¹¯Áö ¸»°í ´ëÈ»óÀÚ¸¦ ÅëÇØ ÇѲ¨¹ø¿¡ Áú¹®ÇÏ¿© ÀüºÎ ÀúÀåÇϵçÁö ÀüºÎ ¹ö¸®µçÁö¸¦ Çѹø¸¸ ÀÀ´äÇÏ°Ô ÇÑ´Ù.
BOOL TestNoSaved()
{
HWND hCloseChild;
SInfo *pSi;
hCloseChild=GetWindow(g_hMDIClient,GW_CHILD);
while (hCloseChild) {
pSi=(SInfo *)GetWindowLong(hCloseChild,0);
if (pSi->Ae.GetModified()) {
return TRUE;
}
hCloseChild=GetWindow(hCloseChild,GW_HWNDNEXT);
}
return FALSE;
}
ÀÌ ÇÔ¼ö´Â ¹ÌÀúÀå ¹®¼°¡ ÀÖ´ÂÁö¸¸ È®ÀÎÇÑ´Ù. OnClose¿Í OnQueryEndSessionÀº ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
BOOL OnClose(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
#ifndef _DEBUG
if (TestNoSaved()) {
return DialogBox(g_hInst,MAKEINTRESOURCE(IDD_CONFIRMSAVE),
g_hFrameWnd,ConfirmSaveProc);
}
#endif
return FALSE;
}
BOOL OnQueryEndSession(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
BOOL Result;
if (TestNoSaved()) {
Result=DialogBox(g_hInst,MAKEINTRESOURCE(IDD_CONFIRMSAVE),
g_hFrameWnd,ConfirmSaveProc);
if (Result) {
return TRUE;
}
}
OnDestroy(hWnd,0,0);
return FALSE;
}
¹Ì ÀúÀå ¹®¼°¡ ÀÖÀ¸¸é ¹Ù·Î Áú¹®ÇÏÁö ¾Ê°í º°µµÀÇ ´ëÈ»óÀÚ¸¦ ¶ç¿î´Ù. ´Ü OnClose´Â µð¹ö±× ¹öÀü¿¡¼ ¹ÌÀúÀå ¹®¼¸¦ È®ÀÎÇÏÁö ¾ÊÀ¸¹Ç·Î °³¹ßÁß¿¡´Â Àá½Ã #ifdef _DEBUG¸¦ ÁÖ¼® ó¸®Çϰí Å×½ºÆ®ÇØ¾ß ÇÑ´Ù.
BOOL CALLBACK ConfirmSaveProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HWND hList;
LVCOLUMN COL;
SInfo *pSi;
HWND hChild;
LVITEM LI;
int count,i,idx;
TCHAR TextBuf[512],Content[1024];
TCHAR Path[MAX_PATH];
TCITEM tie;
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
hList=GetDlgItem(hDlg,IDC_LISTNOSAVED);
COL.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
COL.fmt=LVCFMT_LEFT;
COL.cx=250;
COL.pszText="ÆÄÀϸí";
COL.iSubItem=0;
ListView_InsertColumn(hList,0,&COL);
COL.cx=250;
COL.pszText="³»¿ë";
COL.iSubItem=1;
ListView_InsertColumn(hList,1,&COL);
ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
// ÆÄÀÏ ÅÇÀÇ ¼ø¼´ë·Î º¸¿©ÁØ´Ù.
count=TabCtrl_GetItemCount(hFileTab);
for (i=0,idx=0;i<count;i++) {
tie.mask=TCIF_PARAM;
TabCtrl_GetItem(hFileTab,i,&tie);
hChild=FindChildWithFile((TCHAR *)tie.lParam);
pSi=(SInfo *)GetWindowLong(hChild,0);
if (pSi->Ae.GetModified()) {
LI.mask=LVIF_TEXT | LVIF_PARAM;
LI.iItem=idx;
LI.iSubItem=0;
LI.pszText=pSi->NowFile;
LI.lParam=(LPARAM)hChild;
ListView_InsertItem(hList,&LI);
memset(TextBuf,0,512);
pSi->Ae.GetText(TextBuf,500);
ReplaceCtrlString(TextBuf,512,Content,1024);
ListView_SetItemText(hList,idx,1,Content);
idx++;
}
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_BTNSAVEALL:
case IDC_BTNSAVECHECKED:
hList=GetDlgItem(hDlg,IDC_LISTNOSAVED);
for (idx=0;idx<ListView_GetItemCount(hList);idx++) {
if (LOWORD(wParam)==IDC_BTNSAVECHECKED) {
if (ListView_GetCheckState(hList,idx)==FALSE) {
continue;
}
}
LI.mask=LVIF_PARAM | LVIF_TEXT;
LI.iItem=idx;
LI.iSubItem=0;
LI.pszText=Path;
LI.cchTextMax=MAX_PATH;
ListView_GetItem(hList,&LI);
// ´ë»ó ÆÄÀÏÀ» ¼±ÅÃÇØ ÁØ´Ù.
ListView_SetItemState(hList,-1,0,LVIS_SELECTED | LVIS_FOCUSED);
ListView_SetItemState(hList,idx,
LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
SendMessage(g_hMDIClient,WM_MDIACTIVATE,(WPARAM)LI.lParam,0);
TabCtrl_SetCurSel(hFileTab,FindFileTab(Path));
// ½ÇÆÐ ¶Ç´Â Ãë¼Ò½Ã Á¾·á ÀÚü¸¦ Ãë¼ÒÇÑ´Ù.
if (Save((HWND)LI.lParam)==FALSE) {
EndDialog(hDlg,TRUE);
return TRUE;
}
}
EndDialog(hDlg,FALSE);
return TRUE;
case IDC_BTNDISCARDALL:
EndDialog(hDlg,FALSE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,TRUE);
return TRUE;
}
return FALSE;
}
return FALSE;
}
¸®½ºÆ® ºä ÄÁÆ®·Ñ¿¡ ¹ÌÀúÀå ¹®¼ÀÇ ¸ñ·ÏÀ» º¸¿© ÁØ´Ù. À̶§ ¹Ýµå½Ã ÆÄÀÏ ÅÇÀÇ ¼ø¼´ë·Î º¸¿© ÁÖ´Â °ÍÀÌ ÁÁ´Ù. À̸§À» ¾ÆÁ÷ ÁÖÁö ¾ÊÀº ÆÄÀÏÀº ÆÄÀϸíÀ¸·Î ³»¿ëÀ» ÆÄ¾ÇÇÒ ¼ö ¾ø±â ´ë¹®¿¡ ³»¿ëµµ ÀϺΠǥ½ÃÇß´Ù. °³Çà ÄÚµå, ÅÇ µîÀº º¸±â ÁÁ°Ô º¯È¯ÇÑ ÈÄ Ãâ·ÂÇÑ´Ù. ¸®½ºÆ® ºäÀÇ lParam¿¡´Â ÆíÁýâÀÇ ÇÚµéÀ» ³Ö¾î µÐ´Ù.

ÀÌ ´ëÈ»óÀÚ¿¡¼ »ç¿ëÀÚ´Â ÇѲ¨¹ø¿¡ ÀúÀå, ¸ðµÎ ¹ö¸²À» ¼±ÅÃÇϰųª ¾Æ´Ï¸é ¸®½ºÆ® ºäÀÇ Ã¼Å© ¹Ú½º¸¦ »ç¿ëÇÏ¿© ÀϺΠÆÄÀϸ¸ ÀúÀåÇÒ ¼ö ÀÖ´Ù. Ãë¼ÒÇÒ °æ¿ì EndDialog(hDlg,TRUE)·Î Á¾·á ÀÚü¸¦ Ãë¼ÒÇØ¾ß ÇÑ´Ù. ÀÌ ´ëÈ»óÀÚ°¡ TRUE¸¦ ¸®ÅÏÇϸé OnClose´Â ÇÁ·Î±×·¥ Á¾·á ÀÚü¸¦ Ãë¼ÒÇÑ´Ù.
ÆÄÀÏÀ» ÀúÀåÇÒ ¶§´Â ÀúÀå ´ë»ó ÆÄÀÏÀÌ ¾î¶² ÆÄÀÏÀÎÁö¸¦ ºÐ¸íÈ÷ º¸¿© ÁÖ¾î¾ß ÇÑ´Ù. ¸®½ºÆ® ºä¿¡ ÇØ´ç ÆÄÀÏÀ» ¼±ÅÃÇÏ°í ÆíÁýâÀ» Ȱ¼ºÈÇϴµ¥ À̸§ÀÌ ÁÖ¾îÁöÁö ¾ÊÀº »õ ÆÄÀÏÀ» ÀúÀåÇÒ ¶§´Â »ç¿ëÀÚ°¡ ÆÄÀÏÀÇ ³»¿ëÀ» ºÁ¾ß¸¸ Àû´çÇÑ À̸§À» ÁÙ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
ÇÁ·Î±×·¥ Á¾·á, ¶Ç´Â ½Ã½ºÅÛ Á¾·á½Ã¿¡ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÃÖ¼ÒȵǾî ÀÖÀ¸¸é ´ëÈ»óÀÚ°¡ º¸ÀÌÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ±×·¯³ª ´ç±ÙÀÇ ´ëÈ»óÀÚ°¡ È£ÃâÇÏ´Â MoveToParentCenter ÇÔ¼ö´Â ºÎ¸ð°¡ ÃÖ¼ÒȵǾî ÀÖÀ» ¶§ ºÎ¸ð¸¦ º¹±¸½ÃŰ¹Ç·Î ÀÌ·± °ÆÁ¤ÀÌ ¾ø´Ù. Áú¹®À̳ª È®ÀÎ ´ëÈ»óÀÚ¸¦ ¶ç¿ï ¶§ ºÎ¸ð À©µµ¿ì°¡ º¸ÀÌ´Â »óÅ¿©¾ß ´©°¡ Ãâ·ÂÇÑ ¸Þ½ÃÁöÀÎÁö ¾Ë ¼ö ÀÖ´Ù.
¿©·¯¹ø Áú¹®ÇÏ´Â ¶Ç ´Ù¸¥ °æ¿ì´Â ¿ÜºÎ ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÆíÁýÁßÀÌ ÆÄÀÏÀÌ º¯°æµÇ¾úÀ» ¶§Àε¥ À̶§ ¼öÁ¤µÈ ÆÄÀÏÀ» ´Ù½Ã ÀÐÀ» °ÍÀÎÁö¸¦ Áú¹®ÇÑ´Ù. ÀÌ °æ¿ìµµ ¸Å ¹®¼¸¶´Ù Áú¹®ÇÏÁö ¸»°í ÇѲ¨¹ø¿¡ Áú¹®ÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. ÀÌ ±â´ÉÀ» ÀÛ¼ºÇÏ¸é¼ ´õºÒ¾î 1.0ÀÇ ¹ö±×¿Í ¹®Á¦Á¡±îÁö °°ÀÌ ÇØ°áÇÒ °ÍÀÌ´Ù. OnActivateApp ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù.
void OnActivateApp(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
TCHAR Mes[512];
BOOL bSetTimer=FALSE;
....
if (wParam) {
if (Option.bWatchChange && pEditings) {
for (idx=0;pEditings[idx].hWnd!=NULL;) {
pSi=(SInfo *)GetWindowLong(pEditings[idx].hWnd,0);
hFile=CreateFile(pSi->NowFile,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE) {
size=GetFileSize(hFile,NULL);
GetFileTime(hFile,NULL,NULL,&st);
if (pEditings[idx].size!=size ||
CompareFileTime(&pEditings[idx].st,&st)!=0) {
if (Option.bReloadNoAsk) {
RevertFile(pEditings[idx].hWnd);
} else {
SetTimer(hWnd,2,1,NULL);
bSetTimer=TRUE;
CloseHandle(hFile);
break;
}
}
CloseHandle(hFile);
}
idx++;
}
if (bSetTimer==FALSE) {
free(pEditings);
pEditings=NULL;
}
}
} else {
SaveEditings();
}
}
º¯°æµÈ ÆÄÀÏÀÌ ÀÖ´ÂÁö È®Àθ¸ Çϰí ÀÖÀ¸¸é ŸÀÌ¸Ó ¼³Ä¡Çϰí ÀÏ´Ü ¸®ÅÏÇÑ´Ù. Ȱ¼ºÈµÇ´Â Áï½Ã ´ëÈ»óÀÚ¸¦ ¶ç¿ï ¼ö´Â ¾ø¾î ÀÏȸ¿ë ŸÀ̸Ӹ¦ »ç¿ëÇß´Ù. À̶§ ¾î¶² ÆÄÀÏÀÌ ¼öÁ¤µÇ¾ú´ÂÁö¸¦ ±â¾ïÇÏ´Â pEditings ¹è¿Àº ´ëÈ»óÀÚ¿¡¼ »ç¿ëÇØ¾ß ÇϹǷΠ´çºÐ°£ »èÁ¦ÇÏÁö ¾Ê°í ±×´ë·Î µÐ´Ù. º¯°æ ÆÄÀÏ È®ÀÎ ÀÛ¾÷Àº OnTimer¿¡¼ ÇÑ´Ù.
void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case 2:
KillTimer(hWnd,2);
DialogBox(g_hInst,MAKEINTRESOURCE(IDD_CONFIRMRELOAD),
g_hFrameWnd,ConfirmReloadProc);
break;
ÀÏȸ¿ë ŸÀ̸ÓÀ̹ǷΠÁï½Ã Á¦°ÅÇÏ°í º¯°æÈ®ÀÎ ´ëÈ»óÀÚ¸¦ ¶ç¿î´Ù.
BOOL CALLBACK ConfirmReloadProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HWND hList;
LVCOLUMN COL;
SInfo *pSi;
LVITEM LI;
int i,idx;
TCHAR TextBuf[512],Content[1024];
TCHAR Path[MAX_PATH];
HANDLE hFile;
DWORD size;
FILETIME st;
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
hList=GetDlgItem(hDlg,IDC_LISTNOSAVED);
COL.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
COL.fmt=LVCFMT_LEFT;
COL.cx=250;
COL.pszText="ÆÄÀϸí";
COL.iSubItem=0;
ListView_InsertColumn(hList,0,&COL);
COL.cx=250;
COL.pszText="³»¿ë";
COL.iSubItem=1;
ListView_InsertColumn(hList,1,&COL);
ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
// º¯°æµÈ ÆÄÀÏ ¸ñ·ÏÀ» º¸¿© ÁØ´Ù.
for (i=0,idx=0;pEditings[i].hWnd!=NULL;i++) {
pSi=(SInfo *)GetWindowLong(pEditings[i].hWnd,0);
hFile=CreateFile(pSi->NowFile,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE) {
size=GetFileSize(hFile,NULL);
GetFileTime(hFile,NULL,NULL,&st);
if (pEditings[i].size!=size ||
CompareFileTime(&pEditings[i].st,&st)!=0) {
LI.mask=LVIF_TEXT | LVIF_PARAM;
LI.iItem=idx;
LI.iSubItem=0;
LI.pszText=pSi->NowFile;
LI.lParam=(LPARAM)pEditings[i].hWnd;
ListView_InsertItem(hList,&LI);
memset(TextBuf,0,512);
pSi->Ae.GetText(TextBuf,500);
ReplaceCtrlString(TextBuf,512,Content,1024);
ListView_SetItemText(hList,idx,1,Content);
idx++;
}
}
CloseHandle(hFile);
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_BTNSAVEALL:
case IDC_BTNSAVECHECKED:
hList=GetDlgItem(hDlg,IDC_LISTNOSAVED);
for (idx=0;idx<ListView_GetItemCount(hList);idx++) {
if (LOWORD(wParam)==IDC_BTNSAVECHECKED) {
if (ListView_GetCheckState(hList,idx)==FALSE) {
continue;
}
}
LI.mask=LVIF_PARAM | LVIF_TEXT;
LI.iItem=idx;
LI.iSubItem=0;
LI.pszText=Path;
LI.cchTextMax=MAX_PATH;
ListView_GetItem(hList,&LI);
RevertFile((HWND)LI.lParam);
}
// no break;
case IDCANCEL:
free(pEditings);
pEditings=NULL;
EndDialog(hDlg,TRUE);
return TRUE;
}
return FALSE;
}
return FALSE;
}
¹ÌÀúÀå ¹®¼ È®ÀÎ ´ëÈ»óÀÚ¿Í °ÅÀÇ À¯»çÇÏ´Ù. pEditings ¹è¿¿¡¼ º¯°æµÈ ÆÄÀÏ ¸ñ·ÏÀ» ±¸ÇØ ¸®½ºÆ® ºä¿¡ º¸¿© ÁØ´Ù. ´Ù½Ã ÀÐÀ» ¶§´Â RevertFile ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. Ãë¼Ò´Â ó¸®ÇÏÁö ¾ÊÀ¸¹Ç·Î ¾î¶² ¹öưÀ» ´©¸£µçÁö ´ëÈ»óÀÚ¸¦ Á¾·áÇϱ⸸ ÇÏ¸é µÈ´Ù.
´ÙÀ½Àº Ȱ¼ºÈ¿Í °ü·ÃµÈ 1.0 ¹öÀüÀÇ ¹ö±×µéÀ» ¼öÁ¤ÇÏÀÚ. ºäÀÇ OnLButtonDown¿¡´Â ´ÙÀ½ Äڵ尡 ºÒÇÊ¿äÇÏ´Ù. Çí»ç ºäµµ ¸¶Âù°¡ÁöÀÌ´Ù.
void CApiEditText::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
int toff;
BOOL bShift, bControl;
int r,c;
int nr;
int SelFirst, SelSecond;
POINT pt;
RECT crt;
GetClientRect(hWnd,&crt);
GetCursorPos(&pt);
ScreenToClient(hWnd,&pt);
if (pt.x != x || pt.y != y) {
return;
}
Áö³ ¹öÀüÀÇ ²Ç¼ö¿´´Âµ¥ ÀÌÁ¦´Â ºÒÇÊ¿äÇϹǷΠ»èÁ¦ÇÑ´Ù. ÀÌ Äڵ带 ÀÛ¼ºÇß´ø ÀÌÀ¯´Â Ȱ¼ºÈ ÅëÁö ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ´ëÈ»óÀÚ¸¦ ¶ç¿ì´Â °ÍÀÌ ¹®Á¦°¡ ÀÖ¾ú±â ¶§¹®ÀÌ´Ù. ¸¶¿ì½º·Î Ŭ¸¯ÇÏ¿© Ȱ¼ºÈÇßÀ» ¶§ ´ëÈ»óÀÚ¸¦ ¶ç¿ì¸é ´ëÈ»óÀÚ°¡ ´ÝÈù ÈÄ¿¡ WM_LBUTTONDOWNÀÌ Àü´ÞµÇ´Â ¹®Á¦°¡ ÀÖ´Ù. À̶§ WM_LBUTTONDOWN¿¡¼ ¸¶¿ì½º¸¦ ĸóÇÏ¸ç ¹öưÀÌ ´·¯Á® ÀÖÁö ¾ÊÁö¸¸ ¼±Åà ºí·ÏÀÌ È®ÀåµÇ´Â ¹®Á¦°¡ ÀÖ¾ú´Ù.
±×·¡¼ WM_LBUTTONDOWN ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÇöÀç Ä¿¼ À§Ä¡°¡ lParam°ú ´Ù¸£´Ù¸é Áß°£¿¡ ´ëÈ»óÀÚ°¡ ³¢¾îµç °ÍÀ¸·Î ÆÇ´ÜÇϰí ÀÌ ¸Þ½ÃÁö¸¦ ¹«½ÃÇß´ø °ÍÀÌ´Ù. ±×·¯³ª ´ÙÀ½ Äڵ带 »ç¿ëÇϸé Á» ´õ ±ò²ûÇÏ°Ô Á¤¼®´ë·Î ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
LRESULT CApiEditText::OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
case WM_CANCELMODE:
bCapture=FALSE;
break;
LRESULT CApiEditHexa::OnMessage(UINT iMessage,WPARAM wParam,LPARAM lParam)
{
....
case WM_CANCELMODE:
bCapture=FALSE;
break;
´ëÈ»óÀÚ°¡ ¿¸®¸é ĸó´Â ÀÚµ¿À¸·Î Ç®¸®Áö¸¸ bCapture º¯¼ö´Â ¿©ÀüÈ÷ TRUE·Î ³²¾ÆÀֱ⠶§¹®¿¡ ¹®Á¦°¡ µÇ´Â °ÍÀÌ´Ù. ĸó°¡ Ç®¸± ¶§ WM_CANCELMODE ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸ç ¿©±â¼ bCapture¸¦ FALSE·Î º¯°æÇÏ¸é µÈ´Ù. »ç½Ç bCapture º¯¼ö´Â ²À ÇÊ¿äÄ¡µµ ¾Ê´Ù. Â÷¶ó¸® GetCapture() ÇÔ¼ö·Î ĸó ¿©ºÎ¸¦ ½Ç½Ã°£ Á¶»çÇß´Ù¸é ÀÌ·± ¹®Á¦´Â ¾ø¾úÀ» °ÍÀÌ´Ù. ÀÌ ¸Þ½ÃÁö´Â ¿·¯ ÀÖ´Â ¸Þ´º¸¦ ´Ý°Å³ª ½ºÅ©·Ñ ¹Ù ÀԷ ó¸®¸¦ Ãë¼ÒÇÏ´Â ÀÛ¾÷µµ ÇϹǷΠDefWindowProcÀ¸·Î ´Ù½Ã º¸³»´Â °ÍÀÌ ÁÁ´Ù.
º¯°æ È®ÀΠâ¿¡¼ ´Ù½Ã Àб⸦ ¼±ÅÃÇϸé RevertFile ÇÔ¼ö·Î µð½ºÅ©ÀÇ ¼öÁ¤µÈ ¹®¼¸¦ ´Ù½Ã ÀоîµéÀδÙ. À̶§ »óŶõÀÇ ÅØ½ºÆ®°¡ ¹Ù²î°í ÆÄÀÏ ÅÇÀÇ À̹ÌÁöµµ Àß ¹Ù²îÁö¸¸ ºñȰ¼ºÈµÈ â¿¡ ´ëÇØ¼´Â ÀÌ·± 󸮰¡ µÇÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ´Ù. ReverFile ÇÔ¼ö¿¡¼ »õ·Î ÀÐÀº ÆÄÀÏÀÇ ÅÇ »ö»óÀ» Á÷Á¢ º¯°æÇØ¾ß ÇÑ´Ù.
void RevertFile(HWND hChild)
{
SInfo *pSi;
TCITEM tie;
int idx;
pSi=(SInfo *)GetWindowLong(hChild,0);
OpenFileToChild(hChild,pSi->NowFile);
if (GetFileAttributes(pSi->NowFile) & FILE_ATTRIBUTE_READONLY) {
pSi->Ae.SetReadOnly(TRUE);
}
tie.mask=TCIF_IMAGE;
tie.iImage=0;
idx=FindFileTab(pSi->NowFile);
TabCtrl_SetItem(hFileTab,idx,&tie);
}
Á÷Á¢ ÆÄÀÏÅÇÀÇ À̹ÌÁö¸¦ º¯°æÇß´Ù. ÀÌ Ã³¸®¸¦ »ý·«ÇØ ¹ö¸®¸é ¹ÌÀúÀå ¹®¼ÀÓ¿¡µµ ÆÄÀÏÅÇÀÇ ¾ÆÀÌÄÜÀÌ »¡°£»öÀ¸·Î Ç¥½ÃµÇ¾î »ç¿ëÀÚ¿¡°Ô È¥¶õÀ» ÁØ´Ù.