¹®¼°¡ º¯°æµÉ ¶§ ¾î¶² ºÎºÐÀÌ ´Ù½Ã ±×·ÁÁ®¾ß ÇÏ´ÂÁö º¸ÀÚ. °¡±ÞÀûÀÌ¸é ²À ÇÊ¿äÇÑ ºÎºÐ¸¸ ´Ù½Ã ±×·Á¾ß ÇϹǷΠÃÖ¼ÒÇÑ Á¼Àº ¿µ¿ª¸¸ ±×¸®µµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÏ´Ü ´ÙÀ½ ±×¸²À» º¸¾Æ¶ó.
ù ÁÙÀÇ ¡®±¹¡¯ÀÚ¿¡ ij·µÀÌ Àִµ¥ ÀÌ »óÅ¿¡¼ <Del>Å°¸¦ ´©¸£¸é ÀÌ ±ÛÀÚ°¡ »èÁ¦µÇ°í ±× ÀÚ¸®·Î ¡®°¡¡¯ÀÚ°¡ ¿À°Ô µÉ °ÍÀÌ´Ù. µû¶ó¼ ù ¹ø° ÁÙÀº ¹Ýµå½Ã ´Ù½Ã ±×·Á¾ß ÇÑ´Ù. ÇÏÁö¸¸ µÎ ¹ø° ÁÙ ÀÌÇϴ ù ¹ø° ÁÙÀÇ º¯È¿Í ÀüÇô »ó°üÀÌ ¾øÀ¸¹Ç·Î ´Ù½Ã ±×¸± ÇÊ¿ä°¡ ¾ø´Ù. ¡®±¹¡¯ÀÚ ¾Õ¿¡ ´Ù¸¥ ±ÛÀÚ¸¦ ÀÔ·ÂÇÒ ¶§µµ ¸¶Âù°¡Áö·Î ù ¹ø° ÁÙ¸¸ ´Ù½Ã ±×·ÁÁÖ¸é µÈ´Ù. ÇÏÁö¸¸ ´ÙÀ½°ú °°Àº °æ¿ì´Â Á» ´Ù¸£´Ù.
³× ¹ø° ÁÙÀÇ ¡®°¡¯ÀÚ¿¡ ij·µÀÌ Àִµ¥ ÀÌ »óÅ¿¡¼ <Del>Å°¸¦ ´©¸£¸é ¾Æ·§ÁÙÀÇ ¡®¼¼¡¯ÀÚ°¡ ÀÁÙ·Î ¿Ã¶ó¿Í¾ß ÇÏ°í ÀÌÈÄÀÇ Áٵ鵵 ¿¬¼ÓÀûÀ¸·Î ÇÑ Ä¾¿ À§·Î À̵¿µÇ¾î¾ß ÇÑ´Ù. À̶§´Â »ðÀÔ, »èÁ¦°¡ ÀÏ¾î³ ÁÙ »Ó¸¸ ¾Æ´Ï¶ó ±× ÀÌÈÄÀÇ Áٵ鵵 ´Ù½Ã ±×·ÁÁ®¾ß ÇϹǷΠÆíÁýµÈ ÁÙ ÀÌÇÏÀÇ ¸ðµç ÁÙÀÌ ¹«È¿¿µ¿ªÀÌ µÇ¾î¾ß ÇÑ´Ù. À§ ±×¸²ÀÇ °æ¿ì ³× ¹ø° ÁÙ ¡®¹«±ÃÈ~¡¯ ÀÌÈĺÎÅÍ ´Ù½Ã ±×·Á¾ß ÇÏ¸ç ±× ÀÌÀü ÁÙÀº ´Ù½Ã ±×¸± ÇÊ¿ä°¡ ¾ø´Ù. ¹®¼ÀÇ ÇÑ ºÎºÐÀ» ÆíÁýÇßÀ» ¶§ ±× ÀÌÈÄ ºÎºÐÀº ¾î¶² º¯È°¡ ÀÖÀ» ¼öµµ ÀÖ°í ¾øÀ» ¼öµµ ÀÖÁö¸¸ ±× ÀÌÀü ºÎºÐÀº º¯ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. °ú¿¬ Ç×»ó ±×·²±î? ´ÙÀ½ÀÇ °æ¿ì¸¦ º¸ÀÚ.
ÇѱÛÀº ±ÛÀÚ Á¤·ÄµÇ¾î ÀÖ°í ¿µ¹®Àº ´Ü¾î Á¤·ÄµÇ¾î ÀÖÀ¸¸ç PÀÚ¿¡ ij·µÀÌ ÀÖ´Ù. ÀÌ »óÅ¿¡¼ P¸¦ »èÁ¦Çϸé Reaint¶ó´Â ´Ü¾î°¡ ÀÁÙ·Î ¿Ã¶ó°¡ ºÙ´Â´Ù. RePaint´Â ÀÁÙ ¿©¹é¿¡ ¾È µé¾î°¡±â ¶§¹®¿¡ °Á¦ °³ÇàµÇ¾úÁö¸¸ ÇÑ ±ÛÀÚ°¡ »èÁ¦µÊÀ¸·Î½á Á¤·Ä »óÅ°¡ ¹Ù²ï °ÍÀÌ´Ù. º¸´Ù½ÃÇÇ ÆíÁýµÈ ÁÙÀÇ ÀÌÀü ÁÙµµ º¯È°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ´Ü, ÀÌ °æ¿ìµµ °°Àº ¹®´Ü ³»¿¡¼¸¸ º¯È°¡ ÀÖÀ» »Ó ¼¼ ¹ø° ÁÙ ÀÌÀüÀº ÀüÇô º¯È°¡ ¾ø´Ù.
Á¤¸®ÇÏÀÚ¸é ¹®¼ÆíÁý¿¡ ÀÇÇØ ¹«È¿ÈµÇ¾î¾ß ÇÒ °¡Àå ÀÛ°íµµ ¾ÈÀüÇÑ ¿µ¿ªÀº ÆíÁýµÈ À§Ä¡°¡ ¼ÓÇÑ ¹®´Ü ÀÌÈĺÎÅÍ È¸é ¾Æ·¡±îÁöÀÌ´Ù. ¿¹·Î º¸ÀÎ ±×¸²Àº ÆíÁý ȸéÀÌ À۾Ƽ º° ¼Óµµ Çâ»ó È¿°ú°¡ ¾øÀ» °Íó·³ º¸ÀÌÁö¸¸ ¹®¼¸¦ ÀÔ·ÂÇÒ ¶§ ij·µÀº ´ëºÎºÐ È¸é ¾Æ·¡ÂÊ¿¡ ÀÖÀ¸¹Ç·Î ÀÌ Á¤µµ·Î¸¸ ¹«È¿¿µ¿ªÀ» Á¼°Ô ¸¸µé¾îµµ ´ë´ÜÇÑ ¼Óµµ Çâ»ó È¿°ú°¡ ÀÖ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ¹«È¿¿µ¿ª ¼³Á¤À» À§ÇÑ µµ¿ì¹Ì ÇÔ¼öÀÌ´Ù.
int FindParaStart(int nPos)
{
int n;
if (nPos==0) {
return 0;
}
for (n=nPos-1;n!=0;n--) {
if (buf[n]==¡®\r¡¯ && buf[n+1]==¡®\n¡¯) {
n+=2;
break;
}
}
return n;
}
nPos¸¦ ÁÖ¸é ÀÌ ¿ÀÇÁ¼ÂÀÌ ¼ÓÇØ ÀÖ´Â ¹®´ÜÀÇ ¼±µÎ ¿ÀÇÁ¼ÂÀ» ã¾ÆÁØ´Ù. Áï ÀÌ ÇÔ¼ö°¡ ã¾Æ ÁÖ´Â ¿ÀÇÁ¼Â ÀÌÈĺÎÅÍ ¹«È¿ÈÇÏ¸é ¾ÈÀüÇÏ´Ù. ±×·³ ÀÌÁ¦ ¹®¼ÆíÁý½Ã¿¡ ¹«È¿¿µ¿ªÀ» ½ÇÁ¦·Î Àû¿ëÇغ¸µµ·Ï ÇÏÀÚ. ¸ÕÀú »èÁ¦ÇÒ ¶§ÀÎ VK_DELETE, VK_BACKÀÇ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
case VK_DELETE:
....
Invalidate(FindParaStart(off));
SetCaret();
return;
case VK_BACK:
....
Invalidate(FindParaStart(off));
SetCaret();
return;
Å« º¯È´Â ¾ø°í InvalidateRect(hWnd,NULL,TRUE)°¡ Invalidate(FindParaStart(off))·Î ¹Ù²î±â¸¸ Çß´Ù. ÀÛ¾÷¿µ¿ª Àüü¸¦ ´Ù ¹«È¿È½ÃÅ°´Â °ÍÀÌ ¾Æ´Ï¶ó »èÁ¦µÈ ¿ÀÇÁ¼ÂÀÌ ¼ÓÇÑ ¹®´ÜÀÇ Ã¹ ÁÙ ÀÌÈĺÎÅÍ È¸é ³¡±îÁö ¹«È¿ÈµÈ´Ù. ¾Õ¿¡¼ ¼³¸íÇÑ´ë·Î ÆíÁýÀÌ ÀÏ¾î³ À§Ä¡¿¡¼ º¯È°¡ »ý±æ °¡´É¼ºÀÌ ÀÖ´Â °¡Àå Á¼Àº ¿µ¿ªÀ» ¹«È¿¿µ¿ªÀ¸·Î ¼³Á¤ÇÑ °ÍÀÌ´Ù.
´ÙÀ½Àº ¹®ÀÚ¸¦ »ðÀÔÇÒ ¶§ÀÇ ¹«È¿¿µ¿ª °ü¸®¸¦ º¸ÀÚ. »èÁ¦´Â ÇÑ ±ºµ¥¼ ÀϾÁö¸¸ »ðÀÔÀº ¿©·¯ °÷¿¡¼ ÀϾÙ. ¼¼ ±ºµ¥°¡ ÀÖ´Ù.
void OnChar(HWND hWnd, TCHAR ch, int cRepeat)
{
....
Invalidate(FindParaStart(off-lstrlen(szChar)));
SetCaret();
}
LRESULT OnImeChar(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
....
Invalidate(FindParaStart(off-lstrlen(szChar)));
SetCaret();
return 0;
}
LRESULT OnImeComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
....
Invalidate(FindParaStart(off-len));
SetCaret();
}
return DefWindowProc(hWnd,WM_IME_COMPOSITION,wParam,lParam);
}
º¸´Ù½ÃÇÇ InvalidateRect(hWnd,NULL,TRUE)¸¦ Á» ´õ Áö´ÉÀûÀÎ Invalidate·Î ¹Ù²Û °Í¿¡ ºÒ°úÇÏ´Ù. »ðÀÔÇÒ ¶§ÀÇ ±âÁØ À§Ä¡´Â »ðÀÔ ÈÄÀÇ ¿ÀÇÁ¼ÂÀÌ ¾Æ´Ï¶ó »ðÀÔÇϱâ ÀüÀÇ ¿ÀÇÁ¼ÂÀÌ ±âÁØÀÌ´Ù. ¸¸¾à »ðÀÔ ÈÄÀÇ ¿ÀÇÁ¼ÂÀ» ±âÁØÀ¸·Î ÇÑ´Ù¸é ÁÙ Áß°£¿¡¼ ¿£ÅÍÄڵ尡 ÀԷµǾúÀ» ¶§ Àß·Á ³»·Á°£ ÁÙÀº Á¦´ë·Î Ãâ·ÂµÇÁö¸¸ ÀÁÙÀº °»½ÅµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.
¸í½ÃÀûÀÎ »ðÀÔ°ú »èÁ¦ ¿Ü¿¡ ¹®¼¸¦ ÆíÁýÇÏ´Â ºÎºÐÀ¸·Î À߶󳻱â¿Í ºÙ¿©³Ö±â°¡ ÀÖ´Ù. ÀÌ µÎ ºÎºÐµµ ÀÛ¾÷¿µ¿ª Àüü¸¦ ¹«È¿ÈÇÒ ÇÊ¿ä¾øÀÌ º¯È°¡ ÀÖ´Â ºÎºÐ¸¸ ¹«È¿ÈÇß´Ù.
case IDM_AE_CUT:
if (SelStart != SelEnd) {
SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDM_AE_COPY,0),0);
DeleteSelection();
Invalidate(FindParaStart(off));
SetCaret();
}
return;
case IDM_AE_PASTE:
if (IsClipboardFormatAvailable(CF_TEXT)) {
DeleteSelection();
OpenClipboard(hWnd);
hmem=GetClipboardData(CF_TEXT);
ptr=(TCHAR *)GlobalLock(hmem);
Insert(off,ptr);
GlobalUnlock(hmem);
CloseClipboard();
Invalidate(FindParaStart(off));
off += lstrlen(ptr);
SetCaret();
}
return;
À߶󳻱âÀÇ °æ¿ì DeleteSelection ÇÔ¼ö¿¡ ÀÇÇØ ¼±Åÿµ¿ªÀÇ Ã¹ ºÎºÐÀÌ ÇöÀç À§Ä¡°¡ µÇ¾î ÀÖÀ¸¹Ç·Î ÇöÀç À§Ä¡ ÀÌÈĺÎÅÍ ¹«È¿È¸¦ ÇÏ¸é µÈ´Ù. ºÙ¿©³Ö±â¸¦ ÇÒ ¶§´Â ºÙ¿©³Ö±â ÀüÀÇ ÇöÀç À§Ä¡ºÎÅÍ ¹«È¿È½ÃÄÑ¾ß ÇÑ´Ù.
¹®¼¸¦ º¯°æÇÏ´Â ÇÔ¼öµéÀ» ¼öÁ¤ÇÏ¿© ¹«È¿ÈµÇ´Â ¿µ¿ªÀ» °¡±ÞÀûÀ̸é Á¼°Ô ¼³Á¤ÇÏ°í Àִµ¥ ÀÚÄ© À߸ø °è»êÇÏ¸é ºÎÀÛ¿ëÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¹«È¿¿µ¿ªÀ» Á¼°Ô ÇÏ´Ù º¸¸é ¹Ýµå½Ã ±×·Á¾ß ÇÒ ºÎºÐÀÌ ¹«È¿¿µ¿ª¿¡¼ Á¦¿ÜµÇ¹ö¸®´Â °æ¿ì°¡ Àִµ¥ ÀÌ·¸°Ô µÇ¸é ȸéÀÇ Ãâ·Â ³»¿ëÀÌ ¹®¼ÀÇ »óŸ¦ Á¤È®ÇÏ°Ô º¸¿©ÁÖÁö ¸øÇÏ°Ô µÈ´Ù. ¾Õ¼ ÀÛ¼ºÇÑ ÇÔ¼öµéÀº ÀÚ½ÅÀÌ º¯°æÇÑ ºÎºÐ¿¡ ´ëÇؼ´Â ¾ÈÀüÇÑ ¹üÀ§ÀÇ ¹«È¿¿µ¿ªÀ» Á¤È®ÇÏ°Ô ¼³Á¤ÇÏ°í ÀÖÁö¸¸ ¿¹¿Ü Äڵ忡 ÀÇÇØ ¹«È¿¿µ¿ªÀÇ ºÒÀÏÄ¡°¡ ¹ß»ýÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ¾î¶² °æ¿ìÀΰ¡ ÇÏ¸é »èÁ¦¿¡ ÀÇÇØ °Á¦ ½ºÅ©·ÑµÉ ¶§ÀÌ´Ù.
void CApiEdit::UpdateScrollInfo()
{
....
if (si.nMax < (int)si.nPage) {
yPos=0;
Invalidate(-1);
}
ÀÌ ÄÚµå´Â ApiEdit3¿¡¼ ÀÛ¼ºÇß´ø ¿¹¿Ü ó¸®ÄÚµåÀε¥ »èÁ¦ ÈÄ ½ºÅ©·Ñ¹Ù°¡ µð½º¿¡À̺íµÇ¸é °Á¦·Î À§·Î ½ºÅ©·Ñ½ÃÄÑ ¹®¼ Àüü°¡ º¸À̵µ·Ï ÇÑ´Ù. ÀÌ °æ¿ì Delete ÇÔ¼ö°¡ ãÀº ¹«È¿¿µ¿ªÀº ½ºÅ©·ÑÀ» ¹Ìó °è»êÇÏÁö ¸øÇÑ °ÍÀ̹ǷΠÀüü ¹«È¿È¸¦ ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿¹¿ÜÀûÀÎ »óȲÀ» ó¸®ÇÏ°í Àֱ⠶§¹®¿¡ ¹«È¿¿µ¿ª ¼³Á¤¿¡ ´ëÇؼµµ ¿ª½Ã ¿¹¿Ü󸮸¦ ÇØ¾ß ÇÑ´Ù.