¿ ¸ðµå(Column Mode)¶õ Á÷»ç°¢Çü ÇüÅ·Π¼±ÅÃÇÏ´Â ¸ðµåÀÌ´Ù. ºñ½ÁÇÏ°Ô ¹Ýº¹µÇ´Â ¾Æ·¡ ÀÁÙÀ» °°ÀÌ ¼±ÅÃÇؼ Áö¿ì°Å³ª º¹»çÇÏ°í ½ÍÀ» ¶§ ¿ ¸ðµå¸¦ »ç¿ëÇÑ´Ù. Åë»óÀÇ ¼±Åà ¸ðµå¿Í´Â ´Þ¸® Á÷»ç°¢Çü ÇüÅ·Π¼±ÅõǹǷΠ¸ðµå¸¦ ±â¾ïÇÏ´Â º°µµÀÇ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù. ±âº» ºä¿¡ ¼±Åà ¸ðµå¿Í ¿ ¸ðµåÀÏ ¶§ÀÇ ¼±Åà ¿µ¿ªÀ» ±â¾ïÇÏ´Â ¸â¹ö º¯¼ö¸¦ ¼±¾ðÇÑ´Ù.
class CApiEditText : public CWindow
{
....
BOOL bColumnMode;
int SelExtraX;
public:
virtual BOOL GetColumnMode() { return bColumnMode; }
virtual void SetColumnMode(int aMode);
virtual void GetSelInLine(int Line,int &s,int &e);
};
bColumnMode´Â ¸» ±×´ë·Î ¼±Åà ¸ðµåÀÎÁö¸¦ ±â¾ïÇÏ´Â º¯¼öÀ̸ç ÀÌ °ªÀÌ TRUEÀÌ¸é ¿ ¸ðµå »óÅÂÀÌ´Ù. ¼±Åà ¸ðµå°¡ µÎ °¡Áö¹Û¿¡ ¾øÀ¸¹Ç·Î BOOLÇüÀÇ º¯¼ö·Î ¸ðµå¸¦ ±¸ºÐÇÑ´Ù. SelExtraX´Â SelEndÀÌÈÄÀÇ ÃÊ°úºÐÀε¥ Á÷»ç°¢Çü ÇüÅÂÀÇ ¼±Åà ºí·ÏÀ» ±â¾ïÇÏ·Á¸é SelStart, SelEnd¸¸À¸·Î ºí·ÏÀÇ ¹üÀ§¸¦ Á¤È®ÇÏ°Ô Ç¥ÇöÇÒ ¼ö ¾ø±â ¶§¹®¿¡ Ãß°¡ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù. ÀÌ º¯¼ö´Â InitView¿¡¼ 0À¸·Î ÃʱâÈÇÑ´Ù.
void CApiEditText::InitView()
{
....
SelExtraX=0;
Invalidate(-1);
}
¼±Åà ¸ðµå¸¦ Á¶»çÇÏ´Â Get ÇÔ¼ö´Â ÀζóÀÎÀ¸·Î ÀÛ¼ºÇßÀ¸¸ç Set ÇÔ¼ö´Â ¸ðµå°¡ ¹Ù²ð ¶§ ¿©·¯ °¡Áö ÀϵéÀ» ÇØ¾ß ÇϹǷΠÀÏ¹Ý ÇÔ¼ö·Î ÀÛ¼ºÇÑ´Ù.
void CApiEditText::SetColumnMode(int aMode)
{
bColumnMode=aMode;
if (bColumnMode==FALSE) {
if (SelStart != SelEnd) {
if (ExtraX != 0) {
ExtraX=0;
SetCaret();
}
SelExtraX=0;
}
}
if (SelStart != SelEnd) {
Invalidate(-1);
}
}
¿ ¸ðµå°¡ Ç®¸± ¶§ ¼±Åà ¿µ¿ªÀÌ ÀÖ°í °¡»ó À§Ä¡¿¡ ij·µÀÌ ÀÖÀ¸¸é ÁÙ ³¡À¸·Î ij·µÀ» º¸³»¾ß ÇÑ´Ù. ÀÌ ¶§ ij·µÀÌ °¡»ó À§Ä¡¿¡¼ ½ÇÁ¦ À§Ä¡·Î °Á¦ À̵¿ÇϹǷΠSelExtraX´Â ¹«Á¶°Ç 0ÀÌ µÈ´Ù. bColumnModeÀÇ µðÆúÆ®°ªÀº FALSEÀÌµÇ ´çÀå Å×½ºÆ®¸¦ ÇØ¾ß ÇϹǷΠÀÏ´Ü TRUE·Î ÃʱâÈÇÑ´Ù. bVirtualPos´Â Å×½ºÆ®°¡ ³¡³µÀ¸¹Ç·Î FALSE·Î ¹Ù²Û´Ù.
void CApiEditText::SetDefaultSetting()
{
....
bVirtualPos=FALSE;
bColumnMode=TRUE;
}
¿ ¸ðµå¿¡¼´Â ¼±Åà ¿µ¿ªÀ» Ç¥½ÃÇÏ´Â ¹æ¹ýÀÌ ´Þ¶óÁö´Âµ¥ Á÷»ç°¢Çü ¸ð¾çÀ¸·Î ¼±Åà ¿µ¿ªÀ» Ç¥½ÃÇÑ´Ù. DrawLine ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
int CApiEditText::DrawLine(HDC hdc, int Line)
{
....
if (bColumnMode == FALSE) {
SelFirst=min(SelStart,SelEnd);
SelSecond=max(SelStart,SelEnd);
} else {
GetSelInLine(Line,SelFirst,SelSecond);
}
ÀÏ¹Ý ¼±Åà ¸ðµå¿¡¼´Â ¼±ÅÃÀÇ ½ÃÀÛÁ¡°ú ³¡Á¡¸¸ Á¶»çÇϸé ƯÁ¤ ¿ÀÇÁ¼ÂÀÌ ¼±Åà ¿µ¿ªÀÇ ¾ÈÀÎÁö ¾Æ´ÑÁö¸¦ ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¿ ¸ðµå´Â ´Ü¼øÈ÷ ½ÃÀÛ À§Ä¡¿Í ³¡ À§Ä¡¸¸À¸·Î ±¸¼ºµÇÁö ¾ÊÀ¸¸ç ¼±Åà ¿µ¿ªÀÌ ¿©·¯ ÁÙ¿¡ °ÉÄ¥ ¼ö ÀÖ´Ù. GetSelInLine ÇÔ¼ö´Â ¿ ¸ðµå¿¡¼ LineÁÙÀÇ ¼±Åà ½ÃÀÛÁ¡°ú ³¡Á¡À» ±¸ÇÑ´Ù.
void CApiEditText::GetSelInLine(int Line,int &s,int &e)
{
int SelFirst, SelSecond;
int sx,sy;
int ex,ey;
int left,right;
int BkExtraX;
s=e=0;
if (SelStart == SelEnd) {
return;
}
SelFirst=min(SelStart,SelEnd);
SelSecond=max(SelStart,SelEnd);
if (SelFirst > pLine[Line].End || SelSecond <= pLine[Line].Start) {
return;
}
BkExtraX=ExtraX;
ExtraX=0;
ignoreVirt++;
GetXYFromOff(SelStart,sx,sy);
GetXYFromOff(SelEnd,ex,ey);
ex+=SelExtraX*arChWidth[' '];
left=min(sx,ex);
right=left+abs(sx-ex);
s=GetOffFromXY(left,Line*LineHeight);
e=GetOffFromXY(right,Line*LineHeight);
ignoreVirt--;
ExtraX=BkExtraX;
}
Á¶»çÇÒ ÁÙ ¹øÈ£ LineÀ» Àμö·Î Àü´Þ¹ÞÀ¸¸ç ¿ ¸ðµåÀÇ ¼±Åà ¿µ¿ªÀÌ ÀÌ ÁÙ³»ÀÇ ¾îµðÂë¿¡ °ÉÃÄ ÀÖ´ÂÁö¸¦ Ãâ·Â¿ë Àμö s, e¿¡ ´ëÀÔÇÏ´Â °ÍÀÌ ÀÌ ÇÔ¼öÀÇ ÀÓ¹«ÀÌ´Ù. ÀÏ´Ü s, e´Â ¼±Åà ¿µ¿ªÀÌ ¾ø´Â »óÅ·ΠÃʱâÈÇÑ´Ù. ±×¸®°í SelStart¿Í SelEnd°ªÀ» ¿ì¼±ÀûÀ¸·Î Á¡°ËÇÏ¿© ¼±Åà ¿µ¿ªÀÌ ¾ø´Ù¸é ±×´ë·Î ¸®ÅÏÇÑ´Ù. ¼±Åà ¿µ¿ªÀÌ ¾ø´Ù¸é ¿ ¸ðµåÀÌ°Ç ¾Æ´Ñ°Ç ÀÌ ÁÙ ³»¿¡ ¼±ÅÃµÈ ¿µ¿ªÀÌ ÀÖÀ»¸® ¸¸¹«ÇÏ´Ù.
¼±Åà ¿µ¿ªÀÌ ÀÖ´Ù¸é ÀÌ ÁÙ¿¡ ¼±Åà ¿µ¿ªÀÌ °ÉÃÄ ÀÖ´ÂÁö Á¡°ËÇϴµ¥ ¼±Åà ½ÃÀÛÀÌ ÁÙ ¼±µÎº¸´Ù µÚ¿¡ Àְųª ¼±Åà ³¡ÀÌ ÁÙ ³¡º¸´Ù ¾ÕÂÊ¿¡ ÀÖ´Ù¸é ¼±Åà ¿µ¿ªÀº ÀÌ ÁÙ¿¡´Â °ÉÃÄ ÀÖÁö ¾Ê´Ù. À̶§µµ ±×³É ¸®ÅÏÇϱ⸸ Çϸé s, e°¡ ¸ðµÎ 0ÀÎ »óÅ·Πµ¹¾Æ°£´Ù. ¼±Åà ºí·ÏÀÇ ÀϺΰ¡ ÀÌ ÁÙ¿¡ °ÉÃÄ ÀÖ´Ù¸é ÁÙ ³»ÀÇ ¼±Åà ½ÃÀÛÁ¡°ú ³¡Á¡À» ±¸ÇÑ´Ù.
¼±Åà ºí·ÏÀÇ Á»ó´Ü°ú ¿ìÇÏ´ÜÀÇ ÁÂÇ¥¸¦ °¢°¢ ±¸ÇÑ ÈÄ xÁÂÇ¥ÀÇ ÀÛÀº °ªÀ» left·Î ÃëÇÏ°í Å« °ªÀ» right·Î ÃëÇÏ¸é ¼±Åà ºí·ÏÀÇ ¼öÆò ½ÃÀÛ, ³¡ Á¡À» °¢°¢ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ±¸ÇÑ x ÁÂÇ¥µéÀ» ÁÙ ³»ÀÇ ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù¾î s, e¿¡ ´ëÀÔÇÏ¸é °Ë»ö ´ë»óÁÙÀÌ ¼±Åà ºí·Ï¿¡ ¼ÓÇÑ ¿ÀÇÁ¼ÂÀ» ±¸ÇÒ ¼ö ÀÖ´Ù.
ÀÌ °è»êÀ» ÇÏ´Â Áß¿¡ Çà¿ ¹× ÁÂÇ¥ °è»ê À¯Æ¿¸®Æ¼ ÇÔ¼öµé¿¡ ÀÇÇØ ExtraX´Â º¯°æµÇ¾î¼´Â ¾ÈµÇ¸ç ¶ÇÇÑ ÂüÁ¶µÇ¾î¼µµ ¾ÈµÈ´Ù. ±×·¡¼ ÀÌ °ªÀ» º°µµÀÇ º¯¼ö¿¡ ¹é¾÷ÇØ ³õ°í Àá½Ã 0À¸·Î ¸¸µé¾î µÎ¾úÀ¸¸ç ignoreVirt¸¦ 1 Áõ°¡½ÃÄÑ ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼ È£ÃâÇÏ´Â ÇÔ¼öµéÀÌ ExtraX¸¦ ¹Ù²ÙÁö ¸øÇÏ°Ô Çß´Ù. °è»êÀÌ ³¡³ ÈÄ ExtraX´Â ¿ø·¡ °ªÀ¸·Î º¹±¸ÇÑ´Ù.
DrawLineÀº ÇÑ ÁÙ ´ÜÀ§·Î ±×¸®±â¸¦ ÇϹǷΠÁö±Ý Ãâ·ÂÇÏ°í ÀÖ´Â °¢ ÁÙ¿¡ ´ëÇؼ¸¸ ¼±Åÿµ¿ªÀ» ±¸ÇÏ°í ÀÌ ¿µ¿ª¿¡ ´ëÇؼ¸¸ ¼±Åà ºí·Ï Ç¥½Ã¸¦ ÇÏ¸é ±×¸¸ÀÌ´Ù. Á÷»ç°¢ÇüÀÇ ¼±Åÿµ¿ª Àüü¸¦ ´Ù ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù. DrawLineÀÇ ³ª¸ÓÁö ÄÚµå´Â GetSelInLine ÇÔ¼ö°¡ ±¸ÇÑ SelFirst, SelSecond¸¦ ¼±Åÿµ¿ªÀ¸·Î ÂüÁ¶ÇÏ¿© ÁÙÀ» ±×¸°´Ù.
¿ ¸ðµå¿¡¼´Â ¹«È¿È¸¦ ó¸®ÇÏ´Â ºÎºÐ¿¡ º¯È°¡ ÇÊ¿äÇÏ´Ù. ÀÏ¹Ý ¸ðµå¿¡¼´Â »õ·Î ¼±ÅÃÀÌ È®ÀåµÈ ºÎºÎ¸¸ ¹«È¿ÈÇÏ¿© ´Ù½Ã ±×¸®¸é µÇÁö¸¸ ¿ ¸ðµå¿¡¼´Â ij·µÀÌ ´Ü ÇÑĸ¸ ¿òÁ÷¿©µµ ¼±Åà ¿µ¿ª Àüü°¡ ¹Ù²ð ¼ö Àֱ⠶§¹®¿¡ Àüü¸¦ ´Ù½Ã ±×·Á¾ß ÇÑ´Ù. ¼±Åà ¿µ¿ªÀ» È®ÀåÇÏ´Â ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
void CApiEditText::ExpandSelection(int Start, int End)
{
int OldSelEnd;
if (SelStart==SelEnd) {
SelStart=Start;
SelEnd=End;
Invalidate(min(SelStart,SelEnd),max(SelStart,SelEnd));
} else {
OldSelEnd=SelEnd;
SelEnd=End;
Invalidate(min(OldSelEnd,SelEnd),max(OldSelEnd,SelEnd));
}
if (bColumnMode) {
Invalidate(min(SelStart,SelEnd),max(SelStart,SelEnd));
}
}
¾ÕÂÊ¿¡´Â ¼±Åÿ¡ ÀÇÇØ Ãß°¡·Î È®ÀåµÈ ºÎºÐÀ» ¹«È¿ÈÇÏ´Â Äڵ尡 ÀÖ´Ù. ±×¸®°í »õ·Î ÀÛ¼ºµÈ ÄÚµå´Â ¿¸ðµåÀÏ ¶§ ¼±Åà ¿µ¿ªÀ» Àüü¸¦ ´Ù½Ã ¹«È¿ÈÇÑ´Ù. Invalidate¸¦ µÎ ¹ø È£ÃâÇϴµ¥ º¯È°¡ ÀÖ¾ú´ø ºÎºÐÀ» ÀÏÂ÷·Î ¹«È¿ÈÇÏ°í ¿¸ðµåÀÏ ¶§ ¼±Åà ¿µ¿ª Àüü°¡ ´Ù½Ã ¹«È¿ÈµÈ´Ù. ¿¸ðµå¶ó°í Çؼ ¼±Åà ¿µ¿ª¸¸ ¹«È¿ÈµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó µÎ ¿µ¿ªÀÇ ÇÕÁýÇÕÀÌ ¹«È¿ÈµÇ´Â °ÍÀÌ´Ù.
Invalidate´Â ÇÊ¿äÇѸ¸Å ¿©·¯ ¹ø È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç ¿©·¯ ¹ø È£ÃâÇÑ´Ù°í Çؼ ¾î¶² ºÒÀÌÀÍÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. WM_PAINT´Â ¹«È¿ ¿µ¿ªÀÇ ÇÕÁýÇÕ¿¡ ´ëÇØ ÇÑ ¹ø¸¸ ±×¸®±â¸¦ ¼öÇàÇϹǷΠµÎ ¹ø ³ª´©¾î ¹«È¿È¸¦ Çصµ »ó°ü¾ø´Ù. ¶ÇÇÑ ÀÌ Äڵ带 ÅëÇÕÇÏ·Á°í ¾Ö¾µ ÇÊ¿äµµ ¾ø´Ù. ´ë°³ÀÇ °æ¿ì´Â È®ÀåµÈ ¿µ¿ª¿¡ ´ëÇؼ¸¸ ¹«È¿È¸¦ ÇϹǷΠ±×¸®±â ¼Óµµ°¡ ºü¸¦ °ÍÀÌ°í ¿ ¸ðµåÀÏ ¶§¸¸ ¼±Åà ¿µ¿ªÀ» Åë°·Î ±×¸®¹Ç·Î ÇöÀç Äڵ尡 °¡Àå ÀÌ»óÀûÀÌ´Ù. ÀÌ ÇÔ¼ö¿Ü¿¡µµ ¸¶¿ì½º·Î ¼±Åÿµ¿ªÀ» È®ÀåÇÒ ¶§µµ µ¿ÀÏÇÑ ¹æ½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.
void CApiEditText::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
....
if (bDragSel) {
....
} else {
....
SetCaret();
Invalidate(min(OldOff,off),max(OldOff,off));
if (bColumnMode) {
Invalidate(min(SelStart,SelEnd),max(SelStart,SelEnd));
}
}
¸¶¿ì½º°¡ ¿òÁ÷ÀÏ ¶§¸¶´Ù È®ÀåµÈ ¼±Åÿµ¿ª°ú Àüü ¼±Åÿµ¿ªÀ» µÎ¹ø ¹«È¿ÈÇß´Ù. ÀÌÁ¦ Å°º¸µå·Î ¼±ÅÃÇϳª ¸¶¿ì½º·Î ¼±ÅÃÇϳª È®ÀåµÈ ¿µ¿ªÀÌ Àß ±×·ÁÁú °ÍÀÌ´Ù. ¿ ¸ðµå¿¡¼ ¼±ÅÃÁßÀÏ ¶§´Â ÀÓ½ÃÀûÀ¸·Î °¡»ó À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. IsVirtualPosable ÇÔ¼ö¿¡ ´ÙÀ½ Á¶°ÇÀ» Ãß°¡ÇÑ´Ù.
BOOL CApiEditText::IsVirtualPosable()
{
if (bVirtualPos || (bColumnMode && SelStart != SelEnd)) {
if (ignoreVirt > 0) {
return FALSE;
} else {
return TRUE;
}
}
return FALSE;
}
¿ ¸ðµå¿¡¼ ¼±Åà ¿µ¿ªÀÌ ÀÖÀ» ¶§¸¦ °¡»ó À§Ä¡ ¿É¼Ç°ú µ¿ÀÏÇÏ°Ô Ãë±ÞÇÑ´Ù´Â ¶æÀÌ´Ù. À̶§µµ ignoreVirt´Â °è¼Ó À¯È¿ÇÏ´Ù. ¿¸ðµå¿¡¼ ¼±ÅÃÁßÀÏ ¶§´Â bVirtualPos ¿É¼ÇÀÌ FALSEÀÌ´õ¶óµµ °¡»ó À§Ä¡·ÎÀÇ À̵¿À» Çã°¡Çϴµ¥ ±×·¡¾ß ´ÙÀ½°ú °°Àº ¼±ÅÃÀÌ °¡´ÉÇÏ´Ù.
¸¶Áö¸· ÁÙÀÌ À§ÂÊ ÁÙº¸´Ù ª´õ¶óµµ °¡»ó À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖ¾î¾ß À§ÂʱîÁö Á÷»ç°¢ÇüÀ¸·Î ¼±Åúí·ÏÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ·± ¼±ÅÃÀÌ °¡´ÉÇϱâ À§ÇØ °¡»ó À§Ä¡ À̵¿ ±â´ÉÀÌ ¸ÕÀú ÀÛ¼ºµÇ¾î¾ß ÇÏ¸ç ±×·¡¼ ¿¸ðµå¸¦ ÀÛ¼ºÇϱâ Àü¿¡ °¡»ó À§Ä¡ À̵¿ ±â´ÉÀ» ¸ÕÀú ÀÛ¼ºÇÏ°í IsVirtualPosableÀ̶ó´Â Áß°£ ÇÔ¼ö¸¦ µÎ´Â °ÍÀÌ´Ù. ¼±Åÿµ¿ªÀ» Ç¥½ÃÇÏ´Â ÄÚµå´Â ¿Ï¼ºµÇ¾ú°í ÀÌÁ¦ ½ÇÁ¦·Î ¿¸ðµå·Î ¼±ÅÃÀ» ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ. ¸ÕÀú ¸¶¿ì½º·Î ¼±ÅÃÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù.
void CApiEditText::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
....
// ¼±Åà Áß¿¡´Â °¡»ó À§Ä¡·Î ¹þ¾î³¯ ¼ö ¾øÀ½. ´Ü, Ä÷³ ¸ðµåÀÏ ¶§´Â ¿¹¿Ü
if (!bColumnMode) {
ignoreVirt++;
}
off=SelEnd=GetOffFromXY(x+xPos,y+yPos);
if (!bColumnMode) {
ignoreVirt--;
} else {
SelExtraX=ExtraX;
}
¸¶¿ì½º·Î ¼±ÅÃÀ» ÇÒ ¶§´Â °¡»ó À§Ä¡·Î À̵¿ÇÏÁö ¾Êµµ·Ï Çߴµ¥ ¿ ¸ðµåÀÏ ¶§´Â ¼±ÅÃÁßÀÏ ¶§¶óµµ °¡»ó À§Ä¡·Î °¥ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿ ¸ðµå¿¡¼ ¼±ÅÃÁßÀÏ ¶§ °¡»ó À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â Á¶Ä¡°¡ IsVirtualPosable ÇÔ¼ö¿¡ ÀÌ¹Ì µÇ¾î ÀÖÁö¸¸ ÀÌ ÇÔ¼ö¿¡¼ ignoreVirt·Î ÀÌ Á¶°ÇÀ» ´Ù½Ã ±ÝÁö½ÃÅ°°í ÀÖÀ¸¹Ç·Î ¿¸ðµåÀÏ ¶§´Â ÀÌ ±ÝÁö µ¿ÀÛÀ» ´Ù½Ã ±ÝÁöÇØ¾ß ÇÑ´Ù. ¼±Åÿµ¿ªÀÇ È®Àå°ªÀÎ SelExtraX´Â SelEnd°è»ê½Ã Á¶»çµÈ ExtraX·Î Á¤ÀÇÇÏ¸é µÈ´Ù. Å°º¸µå·Î ¼±ÅÃÇÒ ¶§µµ ¸¶Âù°¡Áö 󸮰¡ ÇÊ¿äÇÏ´Ù.
void CApiEditText::OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{
....
if (bShift && !bColumnMode) {
ignoreVirt++;
}
....
if (bShift && !bColumnMode) {
ignoreVirt--;
}
if (bShift && bColumnMode && SelStart != SelEnd) {
SelExtraX=ExtraX;
}
}
¼±Åà ÁßÀÏ ¶§´Â °¡»ó À§Ä¡·Î À̵¿ÀÌ ±ÝÁöµÇ´Âµ¥ ¿¸ðµåÀÏ ¶§´Â °¡»ó À§Ä¡·Î °¥ ¼ö ÀÖ´Ù. SelExtraX´Â SelEnd °è»ê½Ã Á¶»çµÈ ExtraX·Î Á¤ÀÇÇÑ´Ù. ¸¶¿ì½º·Î ¼±ÅÃÇÒ ¶§¿Í µ¿ÀÏÇÑ ³í¸®¸¦ »ç¿ëÇÑ´Ù.
¿©±â±îÁö ÀÛ¾÷Çϸé Å°º¸µå³ª ¸¶¿ì½º·Î ÀÌ¹Ì ¿ ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¼±ÅÃÀÇ ³¡ÀÌ °¡»ó À§Ä¡·Î À̵¿ÇÒ ¶§ ¼±ÅÃÀÇ ½ÃÀÛÁ¡µµ °°ÀÌ À̵¿ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ¼±ÅÃÁß¿¡ ½¬ÇÁÆ® Å°¸¦ ³õÀ» ¶§ ExtraX¿Í SelExtraX¸¦ ¸ðµÎ 0À¸·Î ¸¸µé¾î¾ß Çϴµ¥ OnKey¼±µÎ¿¡¼ ÀÏ°ý ó¸®ÇÑ´Ù.
void CApiEditText::OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{
....
if (fDown==FALSE)
return;
if (bColumnMode && SelStart != SelEnd && !bShift) {
if (vk==VK_LEFT || vk==VK_RIGHT || vk==VK_UP || vk==VK_DOWN ||
vk==VK_PRIOR || vk==VK_NEXT || vk==VK_HOME || vk==VK_END) {
ClearSelection();
ExtraX=0;
SelExtraX=0;
}
}
if (bShift && !bColumnMode) {
ignoreVirt++;
}
¿ ¸ðµå¿¡¼ ¼±Åà ¿µ¿ªÀÌ Àִµ¥ ½¬ÇÁƮ۸¦ ´©¸£Áö ¾Ê¾ÒÀ¸¸é ¼±ÅÃÀ» Ç®¾î ¹ö¸®°í ÁÙ ³¡À¸·Î ij·µÀ» º¸³½´Ù. IsVirutalPosable¿¡¼ ¼±Åà ¿µ¿ªÀÇ À¯¹«¸¦ Á¶°Ç ÆÇ´Ü¿¡ »ç¿ëÇϱ⠶§¹®¿¡ ¼±ÅÃÀ» ¸ÕÀú Ç®¾î¾ß ÇÑ´Ù. º¸Åë »óÅ¿¡¼ÀÇ À̵¿°ú´Â Á¶±Ý ´Þ¶óÁø´Ù. ¿¹¸¦ µé¾î ¼±Åà ¿µ¿ªÀÌ ÀÖ´Â »óÅ¿¡¼ ¿ÞÂÊ À̵¿½Ã ¼±Åà ¿µ¿ªÀÇ ¿ÞÂÊÀ¸·Î °¡Áö¸¸ ÀÌ °æ¿ì´Â ij·µÀÇ ¿ÞÂÊÀ¸·Î °£´Ù. ÁöÁ¤ÇÑ ÁÂÇ¥°¡ ¼±Åÿµ¿ªÀÇ ¾ÈÂÊÀÎÁö¸¦ Á¶»çÇÏ´Â IsInSelection ÇÔ¼öµµ ¿¸ðµå¸¦ ÀνÄÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.
BOOL CApiEditText::IsInSelection(int x,int y)
{
....
if (bColumnMode) {
GetSelInLine(r,ss,se);
} else {
if (SelFirst < pLine[r].Start) {
ss=pLine[r].Start;
} else {
ss=SelFirst;
}
if (SelSecond > pLine[r].End) {
se=pLine[r].End;
} else {
se=SelSecond;
}
}
se= pFrame->GetPrevOff(se);
....
ÁÙ ³»ÀÇ ¼±Åà ¿µ¿ª ¹üÀ§ ss, se¸¦ ±¸ÇÏ´Â ¹æ¹ýÀÌ ´Ù¸¥µ¥ ¾Õ¿¡¼ ¸¸µé¾î ³õÀº GetSelInLine ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¹®Á¦¸¦ ½±°Ô Ç® ¼ö ÀÖ´Ù.
Å×½ºÆ®°¡ ³¡³µÀ¸¹Ç·Î SetDefultSettingÀ» ¼öÁ¤ÇÏ¿© bColumnModeÀÇ µðÆúÆ®¸¦ FALSE·Î º¯°æÇϵµ·Ï ÇÏÀÚ.
void CApiEditText::SetDefaultSetting()
{
....
bColumnMode=FALSE;
}
ÀÌÁ¦ »ç¿ëÀÚ°¡ ¿øÇÒ °æ¿ì ¾ðÁ¦µçÁö °¡»ó À§Ä¡¿Í ¿¸ðµå¸¦ º¯°æÇÒ ¼ö ÀÖ´Â ¸í·ÉÀ» ÀÛ¼ºÇÑ´Ù. ¸®¼Ò½º¿¡ ¸Þ´º Ç׸ñÀº ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖÀ¸¹Ç·Î ÀÌ Ç׸ñÀ» ó¸®ÇÏ´Â Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_EDIT_VIRT:
if (pView->ViewType != HEXA_VIEW)
pView->SetVirtualPos(!pView->GetVirtualPos());
break;
case IDM_EDIT_COLUMN:
if (pView->ViewType != HEXA_VIEW)
pView->SetColumnMode(!pView->GetColumnMode());
break;
µÎ ¿É¼Ç ¸ðµÎ Åä±ÛµÇ´Â ¿É¼ÇÀ̱⠶§¹®¿¡ ÇöÀç »óÅÂÀÇ ¹Ý´ë·Î¸¸ ¸¸µé¸é µÈ´Ù. Çí»ç ºä¿¡¼´Â °¡»ó À§Ä¡³ª ¿ ¸ðµåÀÇ Àǹ̰¡ ÀüÇô ¾øÀ¸¹Ç·Î À̶§´Â Åä±ÛÇÒ ÇÊ¿äµµ ¾ø´Ù. CloneView¿¡¼ º¹Á¦ÇÒ ¶§ ÀÌ µÎ º¯¼ö´Â º¹Á¦ÇÏÁö ¾ÊÀ¸¹Ç·Î Çí»ç ºä¿¡¼´Â µÑ ´Ù Ç×»ó FALSE°¡ µÈ´Ù. ¸Þ´º¿¡ ¿É¼ÇÀÇ »óŸ¦ Ç¥½ÃÇÑ´Ù.
void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (hActive) {
....
if (pView->ViewType==HEXA_VIEW) {
EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_GRAYED);
} else {
EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_ENABLED);
if (pView->GetVirtualPos()) {
CheckMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_CHECKED);
} else {
CheckMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_UNCHECKED);
}
if (pView->GetColumnMode()) {
CheckMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_CHECKED);
} else {
CheckMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_UNCHECKED);
}
}
Çí»ç ºä¿¡¼´Â ÀÌ ¸í·ÉµéÀÌ »ç¿ë ±ÝÁöµÈ´Ù. ¾×¼¿·¯·¹ÀÌÅÍ¿¡ ´ÜÃàÅ°°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ¿ ¸ðµå·Î ÀüȯÇÒ ¶§ Alt+C¸¸ ´©¸£¸é µÈ´Ù. ¶ÇÇÑ Åø¹Ù¿¡µµ ¿¸ðµå Àüȯ ¹öÆ°ÀÌ ÀÖÀ¸¹Ç·Î ÀÌ ¹öÆ°À» ´·¯µµ ¿¸ðµå·Î ÀüȯÇÒ ¼ö ÀÖ´Ù. Åø¹ÙÀÇ ¹öÆ°Àº OnIdle¿¡¼ °ü¸®ÇØ¾ß ÇÑ´Ù.
void OnIdle()
{
if (hActive) {
....
if (pView->GetColumnMode()) {
SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COLUMN,
MAKELONG(TBSTATE_ENABLED | TBSTATE_CHECKED,0));
} else {
SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COLUMN,MAKELONG(TBSTATE_ENABLED,0));
}
} else {
....
SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COLUMN,MAKELONG(0,0));
}
}
Çí»ç ºä³ª ÀÚµ¿ °³Çà »óÅÂÀÇ ¹öÆ°À» °ü¸®ÇÏ´Â ¹æ¹ý°ú µ¿ÀÏÇÏ´Ù. GetColumnMode·Î Á¶»çÇÑ ¼±Åà ¸ðµå°¡ ¿¸ðµåÀÌ¸é ¹öÆ°À» ´©¸¥ »óÅ·Π¸¸µç´Ù.
¿ ¸ðµå´Â ¿©·¯ ¹®´Ü¿¡¼ ¼öÆòÀûÀ¸·Î °°Àº À§Ä¡¿¡ ÀÖ´Â ¹®ÀåµéÀ» ÀÏ°ýÀûÀ¸·Î ¼±ÅÃÇÏ´Â ±â´ÉÀÌ´Ù. ±×·¡¼ ÇÑ ¹®´ÜÀÌ ÇÑ ÁÙ¿¡ Ãâ·ÂµÉ ¶§ ½ÇÁúÀûÀÎ Àǹ̰¡ ÀÖÀ¸¸ç ÀÚµ¿ °³ÇàµÈ »óÅ¿ʹ Àß ¾î¿ï¸®Áö ¾Ê´Â´Ù. ÀÚµ¿ °³ÇàµÈ »óÅ´ ÇÑ ¹®´ÜÀÌ ¿©·¯ ÁÙ¿¡ °ÉÄ¡¹Ç·Î ¿ ¸ðµå°¡ º° Àǹ̰¡ ¾ø´Ù°í º¸´Â °ÍÀÌ Å¸´çÇÏ´Ù.
¶ÇÇÑ ¿ ¸ðµå´Â °¡º¯ÆøÀÇ ±Û²ÃÀ» °¡Áö´Â »óÅ¿¡¼´Â ¾²±â ºÒÆíÇÏ´Ù. ¿Ö³ÄÇÏ¸é ¶È°°Àº ¿ÀÌ¶óµµ ¾ÕÂÊÀÇ ±ÛÀÚ ±¸¼º¿¡ µû¶ó xÁÂÇ¥°¡ ´Þ¶óÁö±â ¶§¹®¿¡ Á÷»ç°¢Çü ÇüÅ·Π¼±ÅÃÇصµ ¾Æ·¡ À§ ¹®´Üµé¿¡¼ ¼±ÅõǴ ¿ÀÌ ´Þ¶óÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¡¼ ¿ ¸ðµå·Î ¼±ÅÃÀ» ÇÒ ¶§´Â °íÁ¤Æø ±Û²ÃÀ» »ç¿ëÇÏ´Â °ÍÀÌ º¸ÅëÀÌ´Ù.
¿ä¾àÇÏÀÚ¸é ¿¸ðµå´Â ÀÚµ¿ °³Çà »óÅ¿ʹ Àß ¾î¿ï¸®Áö ¾Ê°í °¡º¯Æø ÆùÆ®¿¡¼ ¾²±â ºÒÆíÇÏ´Ù. ApiEdit´Â ³»ºÎÀûÀÎ ±¸Á¶»ó ÀÌ µÎ°¡Áö°¡ ¸ðµÎ °¡´ÉÇѵ¥ pLineÀÌ ¹®´ÜÀÌ ¾Æ´Ñ °³ÇàµÈ °¢ ÁÙÀÇ ¹üÀ§¸¦ °¡Áö°í Àֱ⠶§¹®¿¡ ÀÚµ¿ °³ÇàµÈ »óÅ¿¡¼µµ ¿ ¼±ÅÃÀÌ °¡´ÉÇϸç GetOffFromXY µîÀÇ ÇÔ¼ö°¡ °¡º¯Æø ±Û²ÃÀ» °í·ÁÇÏ¿© ¿ÀÇÁ¼ÂÀ» Á¤È®ÇÏ°Ô °è»êÇϹǷΠ°¡º¯Æø ±Û²Ã¿¡ ´ëÇؼµµ Àß µ¿ÀÛÇÑ´Ù.
´Ù¸¥ ÆíÁý±â´Â ¿¸ðµå·Î µé¾î°¥ ¶§ °Á¦·Î ÀÚµ¿ °³Çà »óŸ¦ Ç®¾î¹ö¸®°í °íÁ¤ÆøÀÏ ¶§¸¸ ¿¸ðµå°¡ °¡´ÉÇÑ °Íµµ ÀÖ´Ù. ¿Ö ±×·¸°Ô Çϴ°¡ Çϸé ÀÚµ¿ °³Çà »óųª °¡º¯Æø ±Û²Ã¿¡¼ ¿ ¼±ÅÃÀ» ÇÏ´Â °ÍÀº »ý°¢º¸´Ù ÈξÀ ´õ º¹ÀâÇϱ⠶§¹®¿¡ ÇÏ°í ½Í¾îµµ ÇÏÁö ¸øÇÏ´Â °ÍÀÌ´Ù. ApiEdit´Â ÀϺη¯ ÀǵµÇÑ °ÍÀº ¾Æ´ÏÁö¸¸ ³»ºÎÀûÀÎ ±¸Á¶¿¡ ÀÇÇØ ÀÚ¿¬½º·´°Ô ÀÌ·± °ÍµéÀÌ °¡´ÉÇÏ°Ô µÇ¾ú´Ù. ±×·¡¼ ÀϺη¯ ÀÚµ¿ °³Çà »óŸ¦ Ç®°Å³ª ÇÏÁö ¾Ê¾Æµµ ¿ ¼±ÅÃÀ» ÇÒ ¼ö Àִµ¥ ÀÌ´Â ApiEditÀÇ ÀÚ¶û°Å¸®À̱⵵ ÇÏÁö¸¸ ´Ù¸¥ ÆíÁý±â¿¡ Àͼ÷ÇÑ »ç¶÷µé¿¡°Ô´Â ¶§·Î´Â ÀÌ·± Á¡ÀÌ ºÒÆíÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼ ÀÌ·± µ¿ÀÛÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¿É¼Ç ¸î°¡Áö¸¦ Ãß°¡Çß´Ù.
class CApiEdit : public CWindow
{
private:
....
BOOL bFixedColumn;
BOOL bNoWrapColumn;
LOGFONT FixedFont;
public:
....
BOOL GetFixedColumn() { return bFixedColumn; }
void SetFixedColumn(int aValue);
BOOL GetNoWrapColumn() { return bNoWrapColumn; }
void SetNoWrapColumn(int aValue);
void GetFixedFont(LOGFONT *alogfont);
void SetFixedFont(LOGFONT *alogfont);
class CApiEditText : public CWindow
{
LOGFONT Bklogfont;
....
bFixedColumnÀº ¿¸ðµåÀÏ ¶§ °íÁ¤Æø ±Û²Ã·Î ÀüȯÇÏ´Â ¿É¼ÇÀ̸ç bNoWrapColumnÀº ¿¸ðµå·Î ÀüȯÇÒ ¶§ ÀÚµ¿ °³ÇàÀ» ÇØÁ¦ÇÑ´Ù. FixedFont´Â °íÁ¤Æø ±Û²Ã·Î ÀüȯÇÒ ¶§ ¾î¶² ÆùÆ®¸¦ »ç¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. Bklogfont´Â °íÁ¤ÆøÀ¸·Î ÀüȯÇϱâ Àü¿¡ ¿ø·¡ »ç¿ëÇÏ´ø ÆùÆ®¸¦ ¹é¾÷Çϱâ À§ÇÑ ±Û²Ã ±¸Á¶Ã¼ÀÌ´Ù. ¿¸ðµå¸¦ ÇØÁ¦ÇÒ ¶§ °Á¦·Î °íÁ¤ÆøÀ¸·Î ÀüȯÇÒ °æ¿ì ¿¸ðµå¸¦ Ç®¸é ´Ù½Ã ¿ø·¡ ±Û²Ã·Î µ¹¾Æ¿Í¾ß ÇϹǷΠÀÌ ÆùÆ®¿¡ ´ëÇÑ Á¤º¸¸¦ ¹é¾÷ÇØ¾ß ÇÑ´Ù. ÀÌ ¿É¼ÇµéÀÇ µðÆúÆ®¸¦ ´ÙÀ½°ú °°ÀÌ ÃʱâÈÇÑ´Ù.
CApiEdit::CApiEdit()
{
....
bNoWrapColumn=FALSE;
bFixedColumn=FALSE;
FixedFont.lfHeight=0;
}
CApiEditText::CApiEditText()
{
....
Bklogfont.lfHeight=-1;
}
Àß »ç¿ëµÇÁö ¾Ê´Â ¿É¼ÇÀ̹ǷΠ¸ðµÎ FALSE·Î ÃʱâÈÇßÀ¸¸ç ¹é¾÷ ÆùÆ®´Â Á¤ÀǵǾî ÀÖÁö ¾ÊÀº °ÍÀ¸·Î ÃʱâÈÇÏ¿´´Ù. ¿É¼Ç ¾×¼¼½º ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.
void CApiEdit::SetFixedColumn(int aValue)
{
bFixedColumn=aValue;
}
void CApiEdit::SetNoWrapColumn(int aValue)
{
bNoWrapColumn=aValue;
}
void CApiEdit::GetFixedFont(LOGFONT *alogfont)
{
*alogfont=FixedFont;
}
void CApiEdit::SetFixedFont(LOGFONT *alogfont)
{
FixedFont=*alogfont;
}
ÀÌ ¿É¼ÇµéÀ» Àû¿ëÇÒ ½ÃÁ¡Àº ¿¸ðµå·Î Àüȯ ¶Ç´Â º¹±ÍÇÒ ¶§ÀÌ´Ù. SetColumnMode¿¡¼ ÀÌ ¿É¼Ç¿¡ µû¶ó ÀÚµ¿ °³Çà »óÅÂ¿Í ±Û²ÃÀ» º¯°æÇÏ°í º¹±¸ÇÑ´Ù.
void CApiEditText::SetColumnMode(int aMode)
{
LOGFONT tFont;
HFONT hFont;
bColumnMode=aMode;
if (bColumnMode==FALSE) {
if (SelStart != SelEnd) {
if (ExtraX != 0) {
ExtraX=0;
SetCaret();
}
SelExtraX=0;
}
if (pFrame->bFixedColumn && Bklogfont.lfHeight!=-1) {
SetFont(&Bklogfont);
Bklogfont.lfHeight=-1;
}
} else {
if (pFrame->bNoWrapColumn && GetWrap()!=0) {
SetWrap(0);
}
if (pFrame->bFixedColumn) {
if (pFrame->FixedFont.lfHeight==0) {
hFont=(HFONT)GetStockObject(SYSTEM_FIXED_FONT);
GetObject(hFont,sizeof(LOGFONT),&tFont);
} else {
tFont= pFrame->FixedFont;
}
GetFont(&Bklogfont);
SetFont(&tFont);
}
}
if (SelStart != SelEnd) {
Invalidate(-1);
}
}
¿¸ðµå·Î ¹Ù²ð ¶§ bNoWrapColumnÀÌ ¼±ÅõǾî ÀÖ°í ÀÚµ¿ °³Çà »óÅÂÀÌ¸é °Á¦·Î ÀÚµ¿ °³Çà »óŸ¦ Ǭ´Ù. ±×·¯³ª ´Ù½Ã º¸Åë ¸ðµå·Î µ¹¾Æ¿Ã ¶§´Â ¿ø·¡ »óÅ·Πº¹±¸ÇÏÁö ¾Ê´Âµ¥ ÀÌ·¸°Ô ÇÏÀÚ¸é º°µµÀÇ ¹é¾÷ º¯¼ö°¡ Çϳª ´õ ÇÊ¿äÇÏ´Ù. ÀÚµ¿ °³Çà »óÅ´ ¾ðÁ¦µçÁö Åä±ÛÇÒ ¼ö ÀÖ´Â ¼Ó¼ºÀ̹ǷΠ±»ÀÌ ±×·¸°Ô±îÁö´Â ÇÏÁö ¾Ê¾Ò´Ù.
bFixedColumnÀÌ ¼±ÅõǾî ÀÖÀ¸¸é °íÁ¤Æø ±Û²Ã·Î º¯°æÇÑ´Ù. lfHeight°¡ 0ÀÌ¸é °íÁ¤ÆøÀÇ ½ºÅå ÆùÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ¿ ¸ðµå°¡ Ç®¸± ¶§ ¿ø·¡ ÆùÆ®·Î µ¹¾Æ°¡±â À§ÇØ Bklogfont¿¡ ¿ø·¡ ÆùÆ® ¼³Á¤ »óŸ¦ µû·Î ±â¾ïÇØ ³õ°í ¿¸ðµå¸¦ ÇØÁ¦ÇÒ ¶§ ´Ù½Ã ÀÌ ÆùÆ®·Î ¼³Á¤ÇÑ´Ù.
ÀÌ¹Ì ¿¸ðµåÀÎ »óÅ¿¡¼ bFixedColumn ¿É¼ÇÀ» º¯°æÇÒ ¶§´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î °íÁ¤ÆøÀ¸·Î ¹Ù²ï »óÅ¿¡¼ ÀÌ ¿É¼ÇÀ» ²ô¸é ´Ù½Ã ¿ø·¡ ÆùÆ®·Î µ¹¾Æ¿ÀÁö ¸øÇÑ´Ù. SetFixedColumn ÇÔ¼ö¿¡¼ ÀÌ¹Ì ¿¸ðµåÀÏ ¶§´Â ÀÌ ¿É¼Ç º¯°æÀ» °ÅºÎÇÒ ¼öµµ ÀÖÀ» °Í °°Áö¸¸ ±×·² ¼ö ¾ø´Â °ÍÀÌ ÀÌ ¿É¼ÇÀº ÇÁ·¹ÀÓÀÌ °¡Áö°í ÀÖ°í ¿ ¸ðµå´Â °¢ ºäÀÇ »óÅÂÀ̱⠶§¹®¿¡ ÇÁ·¹ÀÓÀÌ ÇöÀç ¸ðµå¸¦ Á¤È®ÇÏ°Ô ÆÇ´ÜÇϱ⠾î·Æ±â ¶§¹®ÀÌ´Ù. ½ÇÇàÁß¿¡ ÀÚÁÖ º¯°æÇÏ´Â ¿É¼ÇÀÌ ¾Æ´Ï¹Ç·Î ¹«½ÃÇϱâ·Î ÇÑ´Ù.
¾Õ Ç׿¡¼ Ãß°¡ÇÑ ¼¼ °³ÀÇ ¿É¼Çµµ ÀúÀå ´ë»óÀ̹ǷΠ¿É¼Ç ±¸Á¶Ã¼¿¡ Æ÷ÇÔ½ÃŲ´Ù.
struct SOption
{
....
BOOL bFixedColumn;
BOOL bNoWrapColumn;
LOGFONT FixedFont;
};
ApiEdit¿Í °°Àº ¿É¼Ç À̸§À» »ç¿ëÇÑ´Ù. Init¿¡¼ ÃʱâÈÇÏ°í Save, Load¿¡¼ ÀÔÃâ·ÂÇÑ´Ù.
void SOption::Init()
{
....
bFixedColumn=FALSE;
bNoWrapColumn=FALSE;
FixedFont.lfHeight=0;
}
void SOption::Load(TCHAR *Key)
{
....
bFixedColumn=SHRegReadInt(SHCU,szKey,"bFixedColumn",0);
bNoWrapColumn=SHRegReadInt(SHCU,szKey,"bNoWrapColumn",0);
SHRegReadString(SHCU,szKey,"FixedFaceName","",FixedFont.lfFaceName,32);
FixedFont.lfPitchAndFamily=SHRegReadInt(SHCU,szKey,"FixedPitchAndFamily",0);
FixedFont.lfCharSet=SHRegReadInt(SHCU,szKey,"FixedCharSet",0);
FixedFont.lfHeight=SHRegReadInt(SHCU,szKey,"FixedFontHeight",0);
void SOption::Save(TCHAR *Key)
{
....
SHRegWriteInt(SHCU,szKey,"bFixedColumn",bFixedColumn);
SHRegWriteInt(SHCU,szKey,"bNoWrapColumn",bNoWrapColumn);
SHRegWriteString(SHCU,szKey,"FixedFaceName",FixedFont.lfFaceName);
SHRegWriteInt(SHCU,szKey,"FixedPitchAndFamily",FixedFont.lfPitchAndFamily);
SHRegWriteInt(SHCU,szKey,"FixedCharSet",FixedFont.lfCharSet);
SHRegWriteInt(SHCU,szKey,"FixedFontHeight",FixedFont.lfHeight);
È£½ºÆ®ÀÇ µðÆúÆ®µµ ApiEditÀÇ µðÆúÆ®°ª°ú °°´Ù. ÀÌ ¿É¼ÇµéÀº ¼³Á¤ ´ëÈ»óÀÚ¿¡´Â Æ÷ÇÔ½ÃÅ°Áö ¾Ê´Â´Ù. µû¶ó¼ ÀÌ ¿É¼ÇµéÀº Ç×»ó FALSE°ªÀ» °¡Áú °ÍÀÌ´Ù. Á¤ ÇÊ¿äÇÏ´Ù¸é ·¹Áö½ºÆ®¸®¸¦ Á÷Á¢ ÆíÁýÇÏ´Â ¹æ¹ý¸¸ Á¦°øÇÑ´Ù. ±×´ÙÁö ½Ç¿ëÀûÀÎ ¿É¼ÇÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ÄÁÆ®·ÑÀº ¿É¼ÇÀ» Á¦°øÇÏÁö¸¸ È£½ºÆ®´Â ÀÌ ¿É¼Ç¿¡ ´ëÇÑ À¯Àú ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏÁö ¾Ê´Â´Ù.
ApiEditÀÇ ¿¸ðµå´Â ÀÚµ¿ °³Çà »óÅ¿¡¼µµ ¿ ¼±ÅÃÀ» Çã¿ëÇÑ´Ù´Â °Í°ú °¡º¯Æø ÆùÆ® »óÅ¿¡¼µµ ¿ ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ ´Ù¸¥ ÆíÁý±â¿Í´Â Á¶±Ý ´Ù¸£´Ù. ±×·¯´Ù º¸´Ï µ¿ÀÛ»ó Á¶±Ý ÀÌ»óÇÏ°Ô ¿©°ÜÁö´Â ºÎºÐÀÌ ÀÖ´Ù.
1.¼±Åà ¿µ¿ªÀÌ ÀÖ´Â »óÅ¿¡¼ ¿ ¸ðµå¿Í ÀÏ¹Ý ¸ðµå¸¦ º¯È¯ÇÒ ¶§µµ ¼±Åà ¿µ¿ªÀ» ±×´ë·Î À¯ÁöÇÒ ¼ö ÀÖ´Ù. µÎ ¸ðµå ¸ðµÎ SelStart, SelEnd·Î ½ÃÀÛÁ¡°ú ³¡Á¡À» ±â¾ïÇÑ´Ù´Â °øÅëÁ¡ÀÌ Àֱ⠶§¹®ÀÌ´Ù. À¯ÁöµÈ´Ù°í Çؼ Ưº°È÷ ½Ç¿ë¼ºÀÌ ÀÖ´Â °ÍÀº ¾Æ´ÏÁö¸¸ ±×·¸´Ù°í Çؼ ±»ÀÌ ¸ðµå°¡ ¹Ù²ï´Ù°í Çؼ ¼±Åà ¿µ¿ªÀ» °Á¦·Î ÇØÁ¦ÇÒ ÇÊ¿ä±îÁö´Â ¾ø´Â °Í °°´Ù.
2.¿ ¼±Åà »óÅ¿¡¼ ±Û²Ã ¸ð¾çÀ» º¯°æÇÒ ¶§ ¼±Åà ¿µ¿ªÀÌ ¹Ù²ð ¼ö ÀÖ´Ù. °íÁ¤Æø ±Û²ÃÀÏ ¶§´Â »ó°ü¾øÁö¸¸ °¡º¯Æø ±Û²ÃÀÏ ¶§´Â Á÷»ç°¢ÇüÀÌ ¾Æ´Ñ ¿ïÅø ºÒÅüÇÑ ¼±Åà ¿µ¿ªÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù. ÀÌ Æ¯Â¡µµ Ưº°ÇÑ ºÎÀÛ¿ëÀÌ ¾øÀ¸¹Ç·Î ±×³É µÎ±â·Î ÇÑ´Ù. ¾îÂ¸é ÀÌ·±°Ô °¡´ÉÇÏ´Ù´Â °Ô ³î¶ø°Ô º¸ÀÏ ¼öµµ ÀÖ´Ù.