GetLineSub ÇÔ¼ö´Â ÁÙ ³¡¿¡ ´ê¾ÒÀ» ¶§ Á¤·Ä¹æ½Ä¿¡ ¸Â°Ô ¹«Á¶°Ç ÁÙÀ» ÀÚ¸£¸ç À߸®´Â À§Ä¡ÀÇ ¹®ÀÚ°¡ ¹«¾ùÀÎÁö´Â »ó°üÇÏÁö ¾Ê´Â´Ù. ÀÌ·¯´Ù º¸´Ï °ø¹éÀÌ ÀÖ´Â À§Ä¡¿¡¼µµ ÁÙÀÌ À߸± ¼ö ÀÖ°Ô µÇ°í µû¶ó¼ Á٠óÀ½¿¡ °ø¹éÀÌ ¿Ã ¼ö ÀÖ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.
µÎ ¹ø° ÁÙÀ» º¸¸é ¡®ÇÏ´À´ÔÀÌ¡¯ ´ÙÀ½¿¡ °ø¹é Çϳª°¡ µé¾î°¥ ÀÚ¸®°¡ ¾ø¾î °ø¹é À§Ä¡¿¡¼ °³ÇàµÇ¾ú°í µû¶ó¼ µÎ ¹ø° ÁÙÀÇ Ã¹ ¹®ÀÚ´Â °ø¹éÀÌ´Ù. Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó Á¤·ÄÀ» ÇÏ´Ùº¸´Ï ÀÌ·¸°Ô µÇ´Â °ÍÀÌ ´ç¿¬ÇÏ°í ¾ÆÁÖ ÀÚ¿¬½º·¯¿î Çö»óÀÌ´Ù. ÇÏÁö¸¸ ¹®Á¦´Â º¸±â°¡ ½È´Ù´Â °ÍÀÌ´Ù. ¹®ÀåÀÇ ¿ÞÂÊ ³¡ÀÌ °¡Áö·±ÇؾßÁö °ø¹éÀ¸·Î ÀÎÇØ µéÂß³¯ÂßÇÏ¸é ¹®¼ÀÇ ¸ð¾çÀÌ º¸±â¿¡ ½â ÁÁÁö ¸øÇÏ´Ù.
±×·¡¼ Á٠óÀ½ÀÇ °ø¹é ¹®ÀÚ¿¡ ´ëÇؼ¸¸ ±ÝÄ¢ 󸮸¦ Çغ¸µµ·Ï ÇÏÀÚ. ±ÝÄ¢ 󸮶õ ƯÁ¤ÇÑ ¹®ÀÚ°¡ ƯÁ¤ À§Ä¡¿¡ ¿ÀÁö ¸øÇϵµ·Ï ÇÏ´Â °ÍÀε¥ ¾Õ±ÝÄ¢°ú µÞ±ÝÄ¢ÀÌ ÀÖ´Ù. ¾Õ±ÝÄ¢ ¹®ÀÚ´Â Á٠óÀ½¿¡ ¸ø ¿À´Â ¹®ÀÚÀÌ¸ç °ø¹é, ´Ý´Â °ýÈ£, ½°Ç¥, ¸¶Ä§Ç¥ µîÀÇ ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù. µÞ±ÝÄ¢ ¹®ÀÚ´Â ÁÙ µÚ¿¡ ¿Ã ¼ö ¾ø´Â ¹®ÀÚÀÌ¸ç ¿©´Â °ýÈ£, µû¿ÈÇ¥, ÈÆó´ÜÀ§ µîÀÌ ÀÖ´Ù. ÅؽºÆ® ÆíÁý±â°¡ ÀÌ·± º¹ÀâÇÑ ±ÝÄ¢ 󸮸¦ ´Ù ÇÒ ÇÊ¿ä´Â ¾øÀ» °Í °°°í °ø¹é¿¡ ´ëÇÑ ¾Õ±ÝÄ¢ 󸮸¸ Çغ¸µµ·Ï ÇÏÀÚ.
±ÝÄ¢ 󸮸¦ ÇÏ´Â °¡Àå Å« ÀÌÀ¯´Â º¸±â ½È±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ÀÚ¿¬½º·¯¿î Á¤·Ä ±ÔÄ¢À» ¾î±ä´Ù´Â Á¡¿¡ ÀÖ¾î¼ ±ÝÄ¢ 󸮰¡ ¹®¼ÆíÁý¿¡ ¹æÇØ°¡ µÉ ¼öµµ ÀÖÀ¸¹Ç·Î ¹«Á¶°Ç ±ÝÄ¢ 󸮸¦ ÇÏ´Â °Í º¸´Ù´Â ¿É¼ÇÀ» ¸¸µé¾î µÎ°í ¿øÇÏ´Â »ç¶÷¸¸ ÀÌ Ã³¸®¸¦ Çϵµ·Ï ¸¸µå´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½ Àü¿ªº¯¼ö¸¦ Ãß°¡ÇÏ°í OnCreate¿¡¼ TRUE·Î ÃʱâÈÇÑ´Ù.
BOOL bNoFirstSpace;
BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
....
bNoFirstSpace=TRUE;
return TRUE;
}
±×·¸´Ù¸é ¾î¶»°Ô Á٠óÀ½¿¡ °ø¹éÀÌ ¿ÀÁö ¸øÇϵµ·Ï ÇÒ ¼ö ÀÖÀ»±î? ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀº Àû¾îµµ ¼ö¹é °¡Áö´Â ÀÖ´Ù. ¿©·¯ºÐÀÌ Á÷Á¢ ÀÌ ¹®Á¦¿¡ ºÎ´ÚÃÆ´Ù¸é ¾î¶»°Ô °ø¹éÀ» ±ÝÁöÇÒ °ÍÀÎÁö ¸ÕÀú »ý°¢Çغ¸µµ·Ï ÇÏÀÚ. ¹®¼»ó¿¡ ¾ö¿¬È÷ Á¸ÀçÇÏ´Â °ø¹éÀ» ¾ø¾Ö ¹ö¸± ¼ö´Â ¾ø´Â ³ë¸©ÀÌ°í ±×·¸´Ù°í ¾Õ ÁÙ¿¡ °ø¹éÀ» ³ÖÀ» °ø°£µµ ¾ø´Âµ¥ ¾ïÁö·Î ³¢¿ö³ÖÀ» ¼öµµ ¾ø´Ù. °ø¹éÀº ¾îÂ÷ÇÇ ¾È º¸À̴µ¥ µÞÁÙ ³¡¿¡ »ì¦ ºÙ¿© ³õ¾Æµµ µÇÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢ÀÌ µé±âµµ Çϴµ¥ ½ÇÁ¦·Î Çغ¸¸é ¹®Á¦°¡ ¾ÆÁÖ ¸¹´Ù. ij·µÀÌ °ø¹é µÚ¿¡ ¼û¾î¼ ¾È º¸ÀÌ´Â ¹®Á¦µµ ÀÖ°í ºÒÇÊ¿äÇÑ ¼öÆò½ºÅ©·ÑÀÌ ¹ß»ýÇϱ⵵ ÇÑ´Ù. ¶Ç Á¦¾îÄÚµå º¸±â ±â´ÉÀ» ¸¸µé¸é µÚÂÊ¿¡ ¼û¾î ÀÖ´Â °ø¹éÀÌ º¸ÀÏ ¼öµµ ÀÖ´Ù.
ÁÙ ¾Õ¿¡ ¿À´Â °ø¹éÀÇ ¹®ÀÚÆøÀ» Àӽ÷Π0À¸·Î ¸¸µå´Â ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼öµµ Àִµ¥ ÀÌ·¸°Ô µÇ¸é ij·µÀ̵¿ÀÌ °ñÄ¡¾ÆÆÄÁø´Ù. ¾È º¸ÀÌ´Â °ø¹éÀ» °Ç³Ê ¶Ù±â À§ÇØ Ãß°¡ ÄÚµå ÀÛ¼ºÀÌ ÇÊ¿äÇϸç Á¤·Ä »óÅ°¡ ¹Ù²î¸é ¾ø´ø °ø¹éÀÌ °©Àڱ⠻ý°Ü³ °Íó·³ º¸ÀÏ ¿ì·Áµµ ÀÖ´Ù. ÀÌ¿Ü¿¡µµ ¾ÆÁÖ ´Ù¾çÇÑ ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼ö Àִµ¥ ¿©±â¼ ¾²´Â ¹æ¹ýÀº À̸¥¹Ù ¡®¹°±Í½Å ÀÛÀü¡¯ÀÌ´Ù. ÁÙ ¾Õ¿¡ °ø¹éÀÌ ¿Ã °Í °°À¸¸é ±× ¾Õ¿¡ ÀÖ´Â ºñ°ø¹é ¹®ÀÚ(¶Ç´Â ´Ü¾î)¸¦ Çϳª ´õ °¡Áö°í ³»·Á ¿À´Â °ÍÀÌ´Ù. ÀÌ ¹æ½Ä´ë·Î¶ó¸é ¾Õ ÁÙÀÇ ³¡ÀÌ Á¶±Ý ºñ´Â µíÇÑ ´À³¦ÀÌ ÀÖÁö¸¸ °ø¹é ¹®ÀÚÀÇ ÆøÀÌ À۱⠶§¹®¿¡ ½±°Ô ´«Ä¡Ã¤±â ¾î·Æ´Ù.
¹°±Í½Å ÀÛÀüÀ» ¾²·Á¸é ¹°±Í½Å¿¡ Èñ»ýµÉ Èĺ¸ ¹®ÀÚ³ª ´Ü¾îÀÇ À§Ä¡¸¦ Ç×»ó ±â¾ïÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¾ß Á٠óÀ½¿¡ °ø¹éÀ» ¸¸³µÀ» ¶§ ÀÚ¸¦ À§Ä¡¸¦ ¿©ºÐÀÇ ÄÚµå¾øÀÌ ¼±Á¤ÇÒ ¼ö ÀÖ´Ù. GetLineSub ÇÔ¼ö¿¡ ºñ°ø¹é ¹®ÀÚÀÇ Èĺ¸ À§Ä¡¸¦ ±â¾ïÇÏ´Â º¯¼ö EndPosNoSpace¸¦ Ãß°¡ÇÏ°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ¼öÁ¤ÇÑ´Ù.
int GetLineSub(TCHAR *&p)
{
TCHAR *EndPosNoSpace=NULL;
....
for (acwidth=0;;) {
if (IsDBCS(p-buf)) {
len=2;
if (nWrap==2 || (nWrap==3 && IsPrevDBCS==FALSE)) {
EndPos=p;
if (*EndPos != ¡® ¡®) {
EndPosNoSpace=EndPos;
}
}
IsPrevDBCS=TRUE;
} else {
len=1;
if (IsPrevDBCS==TRUE) {
EndPos=p;
if (*EndPos != ¡® ¡®) {
EndPosNoSpace=EndPos;
}
}
IsPrevDBCS=FALSE;
}
acwidth+=GetCharWidth(hdc,p,len);
....
if (*p == ¡® ¡® || *p==¡®\t¡¯) {
EndPos=p+1;
if (*EndPos != ¡® ¡®) {
EndPosNoSpace=EndPos;
}
}
p+=len;
}
}
ReleaseDC(hWndMain,hdc);
if (nWrap == 1 || EndPos == NULL) {
p=p;
} else {
p=EndPos;
}
if (bNoFirstSpace && *p==¡® ¡® && EndPosNoSpace!=NULL) {
p=EndPosNoSpace;
}
return ret;
}
EndPos¿¡ Èĺ¸ À§Ä¡¸¦ ±â¾ï½Ãų ¶§¸¶´Ù ÀÌ ÀÚ¸®ÀÇ ¹®ÀÚ°¡ °ø¹éÀÎÁö º¸°í °ø¹éÀÌ ¾Æ´Ï¶ó¸é EndPosNoSpace¿¡µµ À§Ä¡¸¦ °°ÀÌ ±â¾ï½ÃÄÑ µÐ´Ù. ·çÇÁÀÇ Áß°£¿¡¼´Â ºñ°ø¹é ¹®ÀÚÀÇ À§Ä¡¸¸ ±â¾ïÇϵµ·Ï ÇÏ°í ±ÝÄ¢ 󸮴 Á¤·ÄÀÌ ¿ÏÀüÈ÷ ³¡³ ÈÄ µû·Î ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¡¼ GetLineSub´Â ¸®ÅÏÇϱâ Á÷Àü¿¡ ±ÝÄ¢ 󸮸¦ ÇÑ´Ù.
bNoFirstSpace ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ°í ÇöÀç °³ÇàµÉ À§Ä¡°¡ °ø¹éÀÌ¸é ¹Ì¸® ±â¾ïÇØ µÐ ºñ°ø¹é Èĺ¸ À§Ä¡¸¦ ÁÙ ³¡ À§Ä¡·Î ÃëÇÏ¸é µÈ´Ù. À̶§µµ ¿¹¿Ü 󸮰¡ ÇÊ¿äÇѵ¥ ¸¸¾à ºñ°ø¹é Èĺ¸ À§Ä¡°¡ ¾ø´Ù¸é, Áï ÁÙ Àüü°¡ °ø¹éÀΠƯ¼öÇÑ »óȲÀ» ¸¸³ª¸é ¾î¿ ¼ö ¾øÀÌ ´ÙÀ½ Á٠óÀ½¿¡µµ °ø¹éÀÌ ¿Ã ¼ö¹Û¿¡ ¾ø´Ù. ÀÌ·¸°Ô Äڵ带 ¼öÁ¤ÇÑ ÈÄ Å×½ºÆ®Çغ¸¸é °ø¹éÀÌ Á٠óÀ½¿¡ ¿ÀÁö ¾ÊÀ» °ÍÀÌ´Ù.
ù ÁÙÀÇ ³¡¿¡ ¡®ÀÌ¡¯ÀÚ°¡ µé¾î°¥ ÃæºÐÇÑ °ø°£ÀÌ ÀÖÁö¸¸ ±× µÚÀÇ °ø¹é±îÁö °°ÀÌ ³ÖÀ» ¸¸ÅÀÇ ¿©À¯°¡ ¾øÀ¸¹Ç·Î ¾Æ¿¹ °°ÀÌ ´ÙÀ½ ÁÙ·Î ³»·Á¿Í ¹ö·È´Ù. °ø¹éÀ̶ó´Â ¹°±Í½ÅÀÌ ¡®ÀÌ¡¯ÀÚ¸¦ Àâ¾Æ ¸ÔÀº °ÍÀÌ´Ù. °ø¹éÀÌ Ã³À½¿¡ ÀÖ´Â °Íº¸´Ù´Â ÀÌ ¹æ½ÄÀÌ ÈξÀ ´õ º¸±â¿¡´Â ÁÁ´Ù. GetLineSubÀÇ °ø¹é ±ÝÁö ÄÚµå´Â º¹¼ö °³ÀÇ °ø¹é¿¡ ´ëÇؼµµ µ¿ÀÛÇÑ´Ù. Á» ´õ Á¤¹ÐÇÏ°Ô ÀÛ¼ºÇÑ´Ù¸é ÇϳªÀÇ °ø¹é¸¸ ±ÝÁöÇÏ°í µÑ ÀÌ»óÀÏ ¶§´Â Çã¿ëÇÏ´Â ¹æ½ÄÀ» ÃëÇÒ ¼öµµ ÀÖ´Ù.
°ø¹é ¾Õ±ÝÄ¢ 󸮴 ÀÖÀ¸¸é ÁÁÀº ±â´ÉÀÌÁö¸¸ ¾ø¾îµµ º° »ó°üÀº ¾ø°í ÅؽºÆ® ÆíÁý±â¿¡°Ô´Â ´Ù¼Ò »çÄ¡½º·¯¿î ±â´ÉÀÌ´Ù. ±×·¡¼ ÀÌ ¿É¼ÇÀÇ µðÆúÆ®°ªÀº FALSE·Î ÃʱâÈÇÏ´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù. OnCreate¸¦ ´Ù½Ã ¼öÁ¤Çؼ ÀÌ º¯¼öÀÇ ÃʱⰪÀ» FALSE·Î ¹Ù²ã ³õµµ·Ï ÇÏÀÚ. Áï ApiEdit´Â °ø¹é ±ÝÁö ±â´ÉÀ» °¡Áö°í´Â ÀÖÁö¸¸ µðÆúÆ®·Î ¼±ÅÃÇÏÁö ¾Ê´Â´Ù. ¹®¼ÀÇ °¡µ¶¼ºº¸´Ù´Â ÀÚ¿¬½º·¯¿ò¿¡ ´õ ¹«°Ô¸¦ µÎ°Ú´Ù´Â Á¤Ã¥ÀÌ´Ù.