¹®¼¸¦ ÀÛ¼ºÇÏ´Ù º¸¸é ÁÙ ³¡¿¡ ºÒÇÊ¿äÇÑ °ø¹éÀÌ »ý±æ ¼ö ÀÖ´Ù. °ø¹éÀ¸·Î¸¸ ä¿öÁø ÁÙÀ̶óµç°¡ ¸¶Áö¸· ¹®ÀÚ ÀÌÈÄ¿¡ °ø¹é¸¸ À̾îÁö´Ù°¡ °³ÇàµÇ´Â °æ¿ì´Â ºÐ¸íÈ÷ ÇÊ¿äÄ¡ ¾ÊÀº °ø¹éÀÌ µé¾î°¡ ÆÄÀÏ ¿ë·®¸¸ Â÷ÁöÇÏ°Ô µÈ´Ù. ¹°·Ð ÀÌ °ø¹éµéÀÌ Á¤¸»·Î ºÒÇÊ¿äÇÑ °ÍÀÎÁö ¾Æ´Ï¸é ´çÀåÀº ¾Èº¸ÀÌÁö¸¸ ÀǹÌÀÖ´Â °ø¹éÀÎÁö´Â ¹®¼¸¦ ÀÛ¼ºÇÏ´Â »ç¶÷¸¸ ¾Ë ¼ö ÀÖ´Ù. ´ÙÀ½ ¹®¼¸¦ º¸ÀÚ. ÀÌ ¹®¼¿¡¼ -´Â °ø¹éÀÌ´Ù.
#include-<losedows.h>
\t\t
if-(Bill==Babo)-{---
\t
}
ÀÌ ¹®¼¿¡¼ µÎ ¹ø° ÁÙÀÇ ÅÇ°ú ¼¼ ¹ø° ÁÙ ³¡¿¡ °ø¹éÀº º¸ÀÌÁö ¾Ê´Â ºÒÇÊ¿äÇÑ ¹®ÀÚÀÌ´Ù. ³× ¹ø° ÁÙÀÇ Åǵµ ´çÀåÀº ºÒÇÊ¿ä ÇÏÁö¸¸ ´ÙÀ½¿¡ ÀÌ ºí·Ï¿¡ ¾î¶² Äڵ带 ÀÛ¼ºÇÑ´Ù¸é ÇÊ¿äÇØÁö´Â ÅÇÀÌ´Ù. °ø¹é Á¤¸® ±â´ÉÀº ÀÌ·± ½ÄÀ¸·Î ´çÀå º¸ÀÌÁö ¾Ê´Â °ø¹éÀ» Á¦°ÅÇÏ¿© ¹®¼¸¦ ³¯¾ÀÇÏ°Ô ¸¸µå´Â ±â´ÉÀÌ´Ù. ƯÈ÷ Åë½Å¸Á¿¡¼ ´Ù¿î¹ÞÀº ¹®¼µéÀº ºó ÁÙÀÌ »ðÀԵǾî ÀÖ°í ºó ÁÙÀÌ °ø¹éÀ¸·Î °¡µæÂ÷ ÀÖ¾î ¹®¼ ¿ë·®ÀÌ ½ÇÁ¦ ¿ë·®º¸´Ù µÎ ¹è³ª µÇ´Â °æ¿ìµµ Àִµ¥ ÀÌ·² ¶§ °ø¹éÀ» Á¤¸®ÇÏ¸é ¿ë·®»óÀÇ ¸¹Àº À̵æÀ» º¼ ¼ö ÀÖ´Ù.
ºÒÇÊ¿äÇÑ °ø¹éÀ» Á¤¸®ÇÏ´Â ¸â¹öÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇϵµ·Ï ÇÏÀÚ. ÀÌ ±â´ÉÀº ÀÏ´ÜÀº ¼±Åÿµ¿ª¿¡ ´ëÇØ °ø¹éÀ» Á¤¸®Ç쵂 ¼±Åÿµ¿ªÀÌ ¾ø´Ù¸é ¹®¼ Àüü¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.
void CApiEdit::RemoveExtraSpace()
{
int SelFirst, SelSecond;
TCHAR *src,*dest;
TCHAR *s,*d;
int len;
int nDiff;
if (SelStart==SelEnd) {
SelFirst=0;
SelSecond=doclen;
} else {
SelFirst=min(SelStart,SelEnd);
SelSecond=max(SelStart,SelEnd);
}
len=SelSecond-SelFirst;
src=(TCHAR *)malloc(len+1);
dest=(TCHAR *)malloc(len+1);
lstrcpyn(src,buf+SelFirst,len+1);
s=src+len;
d=dest+len;
nDiff=0;
for (;;) {
*d=*s;
if (s==src)
break;
d--;
s--;
if (*(s+1)==¡®\r¡¯) {
while (AeIsWhiteSpace(*s) && s!=src) {
s--;
nDiff--;
}
}
}
if (nDiff) {
StartUndoGroup();
Delete(SelFirst,len);
Insert(SelFirst,d);
EndUndoGroup();
SelSecond += nDiff;
if (SelStart==SelEnd) {
off=SelStart=SelEnd=0;
} else if (SelStart < SelEnd) {
off=SelEnd=SelSecond;
} else {
SelStart=SelSecond;
}
Invalidate(SelFirst);
SetCaret();
}
free(src);
free(dest);
}
º¯È¯ ÈÄ¿¡ ¹®¼ÀÇ ±æÀÌ°¡ ´Þ¶óÁú ¼ö ÀÖÀ¸¹Ç·Î ¹öÆÛ´Â src, dest µÎ °³°¡ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ »èÁ¦¸¦ À§ÇÑ µ¿ÀÛÀ» ÇϹǷΠ¿øº»º¸´Ù ´õ Å« °á°ú ¹®ÀÚ¿ÀÌ ¸¸µé¾îÁú ¼ö´Â ¾øÀ¸¸ç ¹öÆÛ´Â µÑ ´Ù ¶È°°Àº Å©±â·Î ÇÒ´çÇÏ¸é µÈ´Ù. destÀÇ Á¤È®ÇÑ ÇÊ¿ä·®Àº srcÀÇ ±æÀÌ-Áö¿öÁú °ø¹é¼ö·Î °è»êÇÒ ¼ö ÀÖ°ÚÁö¸¸ ³²´Â °ÍÀº ¹®Á¦°¡ µÇÁö ¾ÊÀ¸¹Ç·Î ÀÌ °è»êÀ» ±»ÀÌ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. src¿¡ ¼±Åÿµ¿ªÀÇ ¹®ÀÚ¿À» º¹»çÇسõ°í ÀÌ ¹®ÀÚ¿¿¡¼ ºÒÇÊ¿äÇÑ °ø¹éÀ» ã¾Æ dest·Î Àü¼ÛÇÏ¸é µÈ´Ù.
ÀÌ ÇÔ¼ö°¡ ¾Õ¿¡¼ ÀÛ¼ºÇÑ µÎ ÇÔ¼ö¿Í ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é ¿øº» ¹®ÀÚ¿ÀÇ ³¡¿¡¼ºÎÅÍ ¾ÕÂÊÀ¸·Î °Ë»öÀ» ÇØ ³ª°£´Ù´Â Á¡ÀÌ´Ù. ºÒÇÊ¿äÇÑ °ø¹éÀº °³ÇàÄÚµå ÀÌÀü¿¡ ÀÖ´Â °ø¹éÀ¸·Î Á¤ÀǵǴµ¥ °ø¹éÀ» ¸ÕÀú ã°í °³ÇàÄڵ尡 µÚ¿¡ ÀÖ´ÂÁö º¸´Â °Íº¸´Ù´Â °³ÇàÄڵ带 ¸ÕÀú ã°í À̾îÁö´Â °ø¹éÀ» ã´Â °ÍÀÌ ÈξÀ ´õ ½±±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.
¼ø¹æÇâÀ¸·Î °Ë»öÀ» ÇÏ´Ù°¡ °ø¹éÀ» ¸¸³ °æ¿ì ÀÌ °ø¹éÀÌ ºÒÇÊ¿äÇÑ °ø¹éÀÎÁö ¾Æ´ÑÁö ÆÇ´ÜÇÏ·Á¸é °ø¹é ÀÌÈÄ¿¡ ºñ°ø¹é ¹®ÀÚ°¡ ÀÖ´ÂÁö ´ÙÀ½ ¹®ÀÚ¿À» ´õ ÀÐ¾î ºÁ¾ß ÇÑ´Ù. ¸¸¾à °ø¹é ÀÌÈÄ °³ÇàÄÚµå ÀÌÀü¿¡ ´Ù¸¥ ¹®ÀÚ°¡ ÀÖ´Ù¸é ÀÌ °ø¹éÀº ºÒÇÊ¿äÇÑ °ø¹éÀÌ ¾Æ´Ï´Ù. ¡®³ª´Â¡¯ ´ÙÀ½¿¡ ÀÖ´Â °ø¹éÀÇ µÚÂÊÀ¸·Î ¡®¹®¡¯ÀÚ°¡ Àֱ⠶§¹®¿¡ ÀÌ °ø¹éÀº Àǹ̰¡ ÀÖ´Ù. ¡®¹®ÀÚ¿¡¯ ´ÙÀ½ÀÇ °ø¹é ¼ÂÀº ºÐ¸íÈ÷ ºÒÇÊ¿äÇÑ °ø¹éÀε¥ ÀÌ °ø¹éµé µÚ·Î °ø¹é°ú °³ÇàÄڵ常 Àֱ⠶§¹®ÀÌ´Ù. ¼ø¹æÇâ °Ë»öÀº °ø¹éÀ» ¸¸³µÀ» ¶§ µÚÂÊÀ» ´õ ÀÐ¾î ºÁ¾ß ÀÌ °ø¹éÀÇ Æ÷ÇÔ¿©ºÎ¸¦ °áÁ¤ÇÒ ¼ö ÀÖ°í °ø¹éÀ» ¸¸³¯ ¶§¸¶´Ù ÀÌ ÆÇ´ÜÀ» ¹Ýº¹ÇØ¾ß ÇÑ´Ù.
¿ª¹æÇâ °Ë»öÀº ¹®ÀÚ¸¦ Àд Á·Á· ºÒÇÊ¿äÇÑÁö ¾Æ´ÑÁö ¹Ù·Î ¾Ë ¼ö ÀÖ´Ù. °³ÇàÄÚµå \rÀ» ¸¸³ ÀÌÈĺÎÅÍ ³ªÅ¸³ª´Â °ø¹éÀº ¹«Á¶°Ç ºÒÇÊ¿äÇϹǷΠ¾ÕµÚÀÇ ´Ù¸¥ ¹®ÀÚ¸¦ º¼ ÇÊ¿äµµ ¾ø´Ù. srcÀÇ ³¡¿¡¼ºÎÅÍ Çѹ®ÀÚ¾¿ dest·Î º¹»ç¸¦ ÇØ¿À´Ù°¡ °³ÇàÄڵ带 ¸¸³ª¸é, ÀÌÈÄÀÇ °ø¹é¸¸ °Ç³Ê¶Ù¸é ¾ÆÁÖ °£´ÜÇÏ°Ô ºÒÇÊ¿äÇÑ °ø¹éÀ» °È¾î³¾ ¼ö ÀÖ´Ù. °Ë»öÀÇ ¹æÇâ¿¡ µû¶ó ¾Ë°í¸®ÁòÀÇ º¹Àâµµ¿¡ ¾öû³ Â÷ÀÌ°¡ ¹ß»ýÇÔÀ» ¾Ë ¼ö Àִµ¥ ¸¸¾à ¼ø¹æÇâÀ¸·Î °Ë»öÇϵµ·Ï ¼³°è¸¦ Çß´Ù¸é ÄÚµå´Â µÎ ¹è ÀÌ»ó º¹ÀâÇØÁú °ÍÀÌ°í ¼Óµµµµ ´ç¿¬È÷ ´À·ÁÁø´Ù.
ºÒÇÊ¿äÇÑ °ø¹éÀ» Á¤¸®ÇÑ ÈÄ src¸¦ »èÁ¦ÇÏ°í dest¸¦ »ðÀÔÇÏ´Â °ÍÀº ¾ÕÀÇ µÎ ÇÔ¼ö¿¡¼¿Í µ¿ÀÏÇÏ´Ù. ´Ü, ÀÌ °æ¿ì nDiff°¡ 0À̸é Áï, ¾î¶°ÇÑ ¹®ÀÚµµ »èÁ¦µÇÁö ¾Ê¾Ò´Ù¸é ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ °æ¿ì src¿Í dest´Â µ¿ÀÏÇÑ ³»¿ëÀ» °¡Áö¸ç ´ëü¸¦ Çصµ º° »ó°üÀº ¾øÁö¸¸ ±¦È÷ ºÒÇÊ¿äÇÏ°Ô Ãë¼Ò ·¹Äڵ带 µÎ °³³ª ´õ ¾´´Ù´Â Á¡ÀÌ º°·Î ¸¶À½¿¡ µéÁö ¾Ê´Â´Ù. º¯È¯ °á°ú ¼±Åÿµ¿ªÀ» Á¶Á¤ÇÏ´Â ¹æ¹ýÀº ConvertSpaceTab ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù.
ÀÌ ÇÔ¼ö´Â ºñ±³Àû ¿Ïº®ÇÏÁö¸¸ »ç½Ç ÇÑ °¡Áö ³í¸®ÀûÀÎ ¹®Á¦Á¡À» °¡Áö°í Àִµ¥ ¼±Åÿµ¿ªÀÇ ³¡ÀÌ °ø¹éÀÎ °æ¿ì, ÀÌ °ø¹éÀÇ À¯È¿¼ºÀ» ¾Ë ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. ¿Ö³ÄÇÏ¸é ¼±ÅÃµÈ ¹®ÀÚ¿ÀÎ src¿¡¼´Â ÀÌ °ø¹é ´ÙÀ½¿¡ ´Ù¸¥ ¹®ÀÚ°¡ ÀÖ´ÂÁö¸¦ ÆÇ´ÜÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ¹öÆÛÀÇ ³¡¿¡¼ °³Ç๮ÀÚ¸¦ ¸¸³ªÁö ¸øÇßÀ¸¹Ç·Î ÀÌ °ø¹éÀº ½ÇÁ¦·Î ºÒÇÊ¿äÇÏ´õ¶óµµ Á¦°ÅµÇÁö ¾Ê´Â´Ù. ÀÌ ¹®Á¦´Â ¹®´Ü °ü¸® ÇÔ¼ö°¡ ÀÛ¼ºµÇ¸é ÇØ°áÇÒ ¼ö ÀÖ´Ù.
ÀÌ»óÀ¸·Î ¼¼ °³ÀÇ ¹®¼ º¯È¯ ÇÔ¼öµéÀ» ÀÛ¼ºÇߴµ¥ È£½ºÆ®ÀÇ OnCommand¿¡¼ ÆíÁý ¸Þ´ºÀÇ Ç׸ñÀÌ ¼±ÅÃµÉ ¶§ ÅÇ º¯È¯ ÇÔ¼ö¿Í °ø¹é Á¤¸® ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÇÔ¼ö¸¸ È£ÃâÇÏ¸é ¸ðµç ÆíÁý µ¿ÀÛÀº ApiEdit°¡ ¾Ë¾Æ¼ ÇÒ °ÍÀÌ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_EDIT_TOTAB:
pSi->Ae.ConvertSpaceTab(FALSE);
break;
case IDM_EDIT_TOSPACE:
pSi->Ae.ConvertSpaceTab(TRUE);
break;
case IDM_EDIT_REMOVESPACE:
pSi->Ae.RemoveExtraSpace();
break;
Áö±Ý±îÁö ÀÛ¼ºÇÑ ÆíÁý ¸í·É Áß ÀϺδ ¼±Åÿµ¿ªÀÌ ÀÖ¾î¾ß¸¸ »ç¿ëÇÒ ¼ö Àִµ¥ ÀÌ·± ¸í·ÉµéÀº OnInitMenu¿¡¼ ¸Þ´ºÇ׸ñµéÀ» °ü¸®ÇØ¾ß ÇÑ´Ù.
void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
pSi->Ae.GetSelect(s,e);
if (s == e) {
EnableMenuItem(hMenu, IDM_EDIT_CUT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_COPY, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_UPPERSENT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_TOTAB, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu, IDM_EDIT_TOSPACE, MF_BYCOMMAND | MF_GRAYED);
} else {
EnableMenuItem(hMenu, IDM_EDIT_CUT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_COPY, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_UPPERSENT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_TOTAB, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu, IDM_EDIT_TOSPACE, MF_BYCOMMAND | MF_ENABLED);
}
ÅÇ, °ø¹é°£ÀÇ º¯È¯ ¸í·É°ú ¹®Àå óÀ½¸¸ ´ë¹®ÀÚ º¯È¯ ¸í·ÉÀº ¼±Åÿµ¿ªÀÌ ÀÖÀ» ¶§¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸í·ÉÀÇ »óÅ´ º¹»ç, À߶󳻱â¿Í µ¿ÀÏÇÏ°Ô °ü¸®µÇ¹Ç·Î °°Àº ºí·Ï¿¡ Äڵ带 ÀÛ¼ºÇÏ¿´´Ù.