ÀÌ Àý¿¡¼´Â ¿©·¯ °¡Áö ¿É¼ÇµéÀ» ´õ Ãß°¡ÇÑ´Ù. ¿É¼ÇÀ̶õ »ç¿ëÀÚ¿¡°Ô ÆíÁý±â¸¦ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î È°¿ëÇÒ ¼ö ÀÖ´Â ±âȸ¸¦ Á¦°øÇÏ´Â ¼ö´ÜÀ̹ǷΠ¸¹À»¼ö·Ï ÁÁ´Ù. ´ëºÎºÐÀÇ »ç¶÷µéÀÌ Àß ¾È¾²´Â ¿É¼ÇÀÏÁö¶óµµ °¡²ûÀº ¾ÆÁÖ À¯¿ëÇÏ°Ô È°¿ëµÉ ¼öµµ ÀÖÀ¸¹Ç·Î ¿É¼ÇÀÌ ¸¹´Ù°í Çؼ ¾²±â ¾î·Á¿öÁö´Â °ÍÀº ¾Æ´Ï´Ù. ´ë½Å Ãʺ¸ÀÚµéÀÌ ³Ê¹« ¾î·Á¿öÇÒ¸¸ÇÑ ¿É¼ÇÀº µðÆúÆ®·Î ¼±ÅÃÇØ µÎÁö ¾ÊÀ¸¸é µÈ´Ù. ¾ÕÀ¸·Î Ãß°¡ÇÒ ¿É¼ÇµéÀ» À§ÇØ ÇÊ¿äÇÑ ¸â¹ö º¯¼öµéÀ» ÀÏ°ý ¼±¾ðÇÏ°í »ý¼ºÀÚ¿¡¼ ÃʱâÈÇÑ´Ù.
class CApiEdit
{
private:
....
int nWheel;
int nCtrlWheel;
int nShiftWheel;
int nCtrlShiftWheel;
BOOL bSwapDragButton;
int CharExtra;
int WordExtra;
int CharRatio;
int CursorEdit;
BOOL bSmartSpace;
public:
....
int GetWheel() { return nWheel; }
int GetCtrlWheel() { return nCtrlWheel; }
int GetShiftWheel() { return nShiftWheel; }
int GetCtrlShiftWheel() { return nCtrlShiftWheel; }
void SetWheel(int aWheel) { nWheel=aWheel; }
void SetCtrlWheel(int aWheel) { nCtrlWheel=aWheel; }
void SetShiftWheel(int aWheel) { nShiftWheel=aWheel; }
void SetCtrlShiftWheel(int aWheel) { nCtrlShiftWheel=aWheel; }
BOOL GetSwapDragButton() { return bSwapDragButton; }
void SetSwapDragButton(int aValue) { bSwapDragButton=aValue; }
int GetCharExtra() { return CharExtra; }
void SetCharExtra(int aValue);
int GetWordExtra() { return WordExtra; }
void SetWordExtra(int aValue);
int GetCharRatio() { return CharRatio; }
void SetCharRatio(int aValue);
int GetCursorEdit() { return CursorEdit; }
void SetCursorEdit(int aValue) { CursorEdit=aValue; }
BOOL GetSmartSpace() { return bSmartSpace; }
void SetSmartSpace(BOOL aValue) { bSmartSpace=aValue; }
};
CApiEdit::CApiEdit()
{
....
nWheel=1;
nCtrlWheel=6;
nShiftWheel=5;
nCtrlShiftWheel=7;
bSwapDragButton=FALSE;
CharExtra=100;
WordExtra=100;
CharRatio=100;
CursorEdit=0;
bSmartSpace=FALSE;
}
°¢ ¸â¹öÀÇ ¿ªÇÒ¿¡ ´ëÇؼ´Â ÇØ´ç ¿É¼ÇÀ» Ãß°¡ÇÒ ¶§ ¼³¸íÇϱâ·Î ÇÑ´Ù. ÈÙ ¸¶¿ì½ºÀÇ ÈÙ ¹öÆ°Àº ³»¿ëÀ» ½ºÅ©·ÑÇÒ ¶§ ÁÖ·Î »ç¿ëµÇÁö¸¸ ²À ½ºÅ©·Ñ¿¡¸¸ »ç¿ëÇ϶ó´Â ¹ýÀº ¾ø´Ù. ¹°·Ð ÁÖ ±â´ÉÀº ½ºÅ©·ÑÀÌÁö¸¸ Ctrl, ShiftÅ°¿Í Á¶ÇÕÇÏ¸é ºü¸¥ ¼Óµµ·Î °ªÀ» º¯°æÇÏ´Â ´Ù¸¥ ±â´ÉÀ» ÇÒ´çÇÒ ¼öµµ ÀÖ´Ù. ÈÙÀº ¿À¸¥¼ÕÀ¸·Î Æí¸®ÇÏ°Ô Á¶ÀÛÇÒ ¼ö ÀÖ´Â Æí¸®ÇÑ µµ±¸À̹ǷΠÀû±ØÀûÀ¸·Î È°¿ëÇØ¾ß ÇÑ´Ù. ÈÙ ¹öÆ°ÀÇ ±â´ÉÀº ½ÇÁ¦·Î ÈÙÀ» ±¼¸®±â Àü¿¡´Â µ¿ÀÛÇÏÁö ¾ÊÀ¸¸ç ±â´ÉÀÌ ¹Ù²ï´Ù°í Çؼ ºÎ°¡ÀûÀΠ󸮰¡ ´çÀå ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î ¾×¼¼½º ÇÔ¼öµéÀº ¸ðµÎ ÀζóÀÎÀ¸·Î ¼±¾ðÇß´Ù. ÈÙ ¹öÆ°À¸·Î ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù.
µ¿ÀÛ |
¼³¸í |
0 |
¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù. |
1 |
»óÇÏ·Î ¼¼ ÁÙ¾¿ ½ºÅ©·ÑÇÑ´Ù. ÈÙÀÇ ±âº» ±â´ÉÀÌ´Ù. |
2 |
»óÇÏ·Î ÇÑ ÁÙ¾¿¸¸ ½ºÅ©·ÑÇÑ´Ù. |
3 |
ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑÇÑ´Ù. |
4 |
¹Ý ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑÇÑ´Ù. |
5 |
ÁÙ°£À» Á¶Á¤ÇÑ´Ù. |
6 |
±Û²Ã Å©±â¸¦ Á¶Á¤ÇÑ´Ù. |
7 |
Ãë¼Ò ¹× Àç½ÇÇàÇÑ´Ù. |
¸â¹ö º¯¼öµéÀº ÈÙ ¹öÆ°°ú Á¶ÇÕÅ°¸¦ Á¶ÀÛÇÒ ¶§ ¾î¶² µ¿ÀÛÀ» ÇÒ °ÍÀΰ¡¸¦ ±â¾ïÇÑ´Ù. CtrlÅ°¿Í Shift Á¶ÇÕÅ°¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î 4°¡Áö µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù. »ý¼ºÀÚ¿¡¼ ½¬ÇÁÆ® ÈÙÀº ÁÙ°£ Á¶Á¤À¸·Î, ÄÁÆ®·Ñ ÈÙÀº ±Û²Ã Å©±â º¯°æÀ¸·Î µðÆúÆ® ¼³Á¤Çߴµ¥ °¡Àå ½Ç¿ëÀûÀÎ ¿É¼ÇÀÎ °Í °°´Ù. OnMouseWheel¿¡ Äڵ带 ÀÛ¼ºÇÑ´Ù. º»¿¬ÀÇ ½ºÅ©·Ñ ±â´ÉÀº ½ºÅ©·Ñ ´ÜÀ§¿¡ º¯È¸¦ ÁÙ ¼ö ÀÖ¾î¾ß ÇϹǷΠScrollÀ̶ó´Â º°µµÀÇ ÇÔ¼ö¿¡°Ô Àü´ã½ÃÅ°°í ÀÌ ÇÔ¼ö´Â ÀÌÁ¦ ¼³Á¤µÈ´ë·Î ¸í·ÉÀ» ó¸®ÇÑ´Ù.
void CApiEditText::OnMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
short zDelta;
UINT Lines;
int Unit;
int nScroll=0;
int Value;
LOGFONT tFont;
BOOL bShift, bControl;
int action;
bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,&Lines,0);
Unit=WHEEL_DELTA/Lines;
zDelta=(short)HIWORD(wParam);
SumDelta += zDelta;
while (abs(SumDelta) >= Unit) {
if (SumDelta > 0) {
nScroll--;
SumDelta-=Unit;
} else {
nScroll++;
SumDelta+=Unit;
}
}
// ÄÁÆ®·Ñ Å°¿Í ½¬ÇÁƮŰÀÇ »óÅ·κÎÅÍ µ¿ÀÛÀ» °áÁ¤ÇÑ´Ù.
if (bControl) {
if (bShift) {
action=pFrame->nCtrlShiftWheel;
} else {
action=pFrame->nCtrlWheel;
}
} else {
if (bShift) {
action=pFrame->nShiftWheel;
} else {
action=pFrame->nWheel;
}
}
if (action==1) {
Scroll(nScroll);
} else {
while ((UINT)abs(nScroll) >= Lines) {
switch (action) {
case 0:
break;
case 2:
if (nScroll > 0) {
Scroll(1);
} else {
Scroll(-1);
}
break;
case 3:
if (nScroll > 0) {
SendMessage(hWnd,WM_VSCROLL,MAKELONG(SB_PAGEDOWN,0),0);
} else {
SendMessage(hWnd,WM_VSCROLL,MAKELONG(SB_PAGEUP,0),0);
}
break;
case 4:
if (nScroll > 0) {
Scroll(Fheight/LineHeight/2);
} else {
Scroll(-Fheight/LineHeight/2);
}
break;
case 5:
Value=GetLineRatio();
if (nScroll > 0) {
Value=max(Value-10,100);
} else {
Value=min(Value+10,1000);
}
SetLineRatio(Value);
break;
case 6:
GetFont(&tFont);
if (tFont.lfHeight != 0) {
if (nScroll > 0) {
tFont.lfHeight=max(tFont.lfHeight-3,12);
} else {
tFont.lfHeight=min(tFont.lfHeight+3,128);
}
SetFont(&tFont);
}
break;
case 7:
if (nScroll > 0) {
if (pFrame->CanUndo()) {
pFrame->Undo();
}
} else {
if (pFrame->CanRedo()) {
pFrame->Redo();
}
}
break;
}
if (nScroll > 0) {
nScroll -= Lines;
} else {
nScroll += Lines;
}
}
}
}
CtrlÅ°¸¦ ´©¸¥ ä·Î ÈÙÀ» ±¼¸®¸é ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑµÇ¸ç ShiftÅ°¸¦ ´©¸£¸é ¹Ý ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑµÈ´Ù. Scroll ÇÔ¼ö°¡ Àß ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ½ºÅ©·Ñ ´ÜÀ§¸¸ °è»êÇؼ ÀÌ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. ±Û²Ã º¯°æÀ̳ª ÁÙ°£ Á¶Á¤ µîµµ ¸â¹ö ÇÔ¼öµéÀÌ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÇöÀç°ªÀ» ¾à°£¾¿ Áõ°¨½ÃÅ°±â¸¸ ÇÏ¸é µÈ´Ù.
ApiEdit´Â ¼±Åà ¿µ¿ªÀ» ¸¶¿ì½º·Î µå·¡±×ÇÏ¸é ¹®ÀÚ¿À» µå·ÓÇÑ À§Ä¡·Î À̵¿ÇÏ´Â ±â´ÉÀÌ ÀÖ¾î ¹®Àå Àç¹èÄ¡¸¦ ½±°Ô ÇÒ ¼ö ÀÖ´Ù. ´Ü, CtrlÅ°¸¦ ´©¸¥ ä·Î µå·ÓÇϸé À̵¿ÀÌ ¾Æ´Ñ º¹»ç¸¦ ¼öÇàÇÑ´Ù. ´Ü¼ø µå·¡±×´Â À̵¿ÀÌ°í Ctrl µå·¡±×´Â º¹»çÀε¥ º¹»ç ÀÛ¾÷º¸´Ù À̵¿ ÀÛ¾÷ÀÇ ºóµµ°¡ ÈξÀ ´õ ³ô±â ¶§¹®¿¡ À̵¿À» ´õ ½±°Ô ÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. ±×·±µ¥ º¹»ç¸¦ ´õ ¸¹ÀÌ ÇÏ´Â »ç¶÷À̶ó¸é ¸Å¹ø CtrlÅ°¸¦ ´©¸£°í ÀÖ¾î¾ß ÇϹǷΠ¹«Ã´ ºÒÆíÇѵ¥ ÀÌ·± »ç¶÷À» À§ÇØ µÎ µ¿ÀÛÀ» Åä±ÛÇÏ´Â ±â´ÉÀ» ÀÛ¼ºÇØ º¸ÀÚ.
void CApiEditText::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
....
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (pFrame->bSwapDragButton) {
bControl=!bControl;
}
void CApiEditText::OnLButtonUp(HWND hWnd, int x, int y, UINT keyFlags)
{
....
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (pFrame->bSwapDragButton) {
bControl=!bControl;
}
....
¸¶¿ì½º À̵¿½Ã¿Í µå·Ó½Ã¿¡ Ctrl Å°ÀÇ ´¸²À» °ËÃâÇÑ °á°ú¸¦ ¹Ý´ë·Î µÚÁý±â¸¸ ÇÏ¸é µÈ´Ù. OnKey ÇÔ¼ö¿¡´Â Ctrl Å°ÀÇ »óÅ¿¡ µû¶ó Ä¿¼¸¦ º¯°æÇÏ´Â Äڵ尡 Àִµ¥ ÀÌ Äڵ嵵 ¼öÁ¤ÇÏ¿© ¼³Á¤µÈ ¿É¼Ç´ë·Î Ä¿¼¸¦ Ç¥½ÃÇÑ´Ù.
void CApiEdit::OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{
BOOL bCopy;
bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (bDragSel) {
if (vk==VK_CONTROL) {
bCopy=fDown;
if (pFrame->bSwapDragButton) {
bCopy=!bCopy;
}
if (bCopy) {
SetCursor(hCCopy);
} else {
SetCursor(hCMove);
}
}
return;
}
´Ü¼øÈ÷ µÎ ±â´ÉÀ» ¹Ù²Ù´Â °ÍÀ̹ǷΠÄڵ嵵 °£´ÜÇÏ´Ù. º¹»çÀÛ¾÷À» ¸¹ÀÌ ÇÏ´Â »ç¶÷¿¡°Ô´Â ÀÌ ±â´ÉÀÌ ²Ï À¯¿ëÇÒ °ÍÀÌ´Ù.
ÀÚ°£(CharExtra)Àº ±ÛÀÚ »çÀÌÀÇ °£°ÝÀ̸ç, ´Ü¾î °£°Ý(WordExtra)Àº ´Ü¾î »çÀÌÀÇ °£°ÝÀÌµÇ ±¸Ã¼ÀûÀ¸·Î ´Ü¾î »çÀÌ¿¡ »ðÀԵǴ °ø¹éÀÇ ÆøÀ̶ó°í º¸¸é µÈ´Ù. ÀåÆò(CharRatio)Àº ±ÛÀÚÀÇ °¡·Î, ¼¼·Î ºñÀ²ÀÌ´Ù. ¹®ÀÚ³ª ´Ü¾î »çÀÌÀÇ °£°Ý, ±ÛÀÚÀÇ Á¾È¾ºñ°¡ ¹Ù²î¸é Á¤·Ä ·çƾ°ú ¼±Åà ·çƾ µî ¸¹Àº ºÎºÐÀÌ ¿µÇâÀ» ¹ÞÀ¸¹Ç·Î ÀÌ ¿É¼ÇµéÀ» Á¦´ë·Î ±¸ÇöÇÏ´Â °ÍÀº »ç½Ç ½±Áö°¡ ¾Ê´Ù. ±×·¯³ª ´ÙÇàÈ÷ ApiEdit´Â ±¸Á¶»ó ÀÌ ¼¼ °¡Áö ¿É¼ÇÀ» Àû¿ëÇϱ⠾ÆÁÖ ½±°Ô µÇ¾î Àִµ¥ Á¶»çµÇ´Â ¹®ÀÚÀÇ Æø¸¸ Àß Á¶ÀÛÇÏ¸é µÈ´Ù.
ÀÌ ¼¼ ¿É¼ÇÀº ¸ðµÎ ¹éºÐÀ²ÀÌ¸ç »ý¼ºÀÚ¿¡¼ ¸ðµÎ 100À¸·Î ÃʱâÈÇß´Ù. Áï, º°´Ù¸¥ Á¶ÀÛÀ» ÇÏÁö ¾ÊÀ» ¶§ÀÇ °£°Ý°ú ÀåÆòÀÌ µðÆúÆ®ÀÌ´Ù. ¿É¼Ç°ªÀ» Àд Get ÇÔ¼öµéÀº ÀζóÀÎÀ¸·Î ÀÛ¼ºÇß°í º¯°æÇÏ´Â Set ÇÔ¼öµéÀº ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù. °£°ÝÀ̳ª ÀåÆòÀÌ ¹Ù²î´Â °ÍÀº ±Û²ÃÀÌ ¹Ù²î´Â °Í°ú È¿°ú°¡ °°À¸¹Ç·Î SetFont ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù.
void CApiEdit::SetCharExtra(int aValue)
{
CharExtra=aValue;
for (int aet=0;aet<4 && arView[aet];aet++) {
arView[aet]->SetFont(&arView[aet]->logfont);
}
}
void CApiEdit::SetWordExtra(int aValue)
{
WordExtra=aValue;
for (int aet=0;aet<4 && arView[aet];aet++) {
arView[aet]->SetFont(&arView[aet]->logfont);
}
}
void CApiEdit::SetCharRatio(int aValue)
{
CharRatio=aValue;
for (int aet=0;aet<4 && arView[aet];aet++) {
arView[aet]->SetFont(&arView[aet]->logfont);
}
}
´Ü¾î °£°ÝÀ̶õ °ø¹éÀÇ ÆøÀ» ½ÇÁ¦Æøº¸´Ù ¾ó¸¶¸¸Å ´õ ´Ã¸± °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ºñÀ²·ÎºÎÅÍ ½Ç½Ã°£ °è»êÇÒ ¼ö ÀÖÁö¸¸ ÀÚÁÖ ÂüÁ¶µÇ¹Ç·Î º°µµÀÇ º¯¼ö¿¡ ¹Ì¸® ±¸ÇØ ³õ´Â °ÍÀÌ ÁÁ´Ù. °ø¹éÆøÀ» ±â¾ïÇÏ´Â SpaceWidth ¸â¹ö º¯¼ö¸¦ ¼±¾ðÇÏ°í PrepareCharWidth¿¡¼ ÃʱâÈÇÑ´Ù.
class CApiEditText : public CWindow
{
protected:
....
int SpaceWidth;
void CApiEditText::PrepareCharWidth(HDC hdc)
{
for (i=0;i<=255;i++) {
Char[0]=i;
GetTextExtentPoint32(hdc, Char, 1, &sz);
arChWidth[i]=(BYTE)sz.cx;
}
SpaceWidth=arChWidth['
']*pFrame->CharExtra*pFrame->WordExtra/100/100;
....
°ø¹éÀº ÀÚ°£°ú ´Ü¾î °£°Ý ¿É¼ÇÀÇ ¿µÇâÀ» ¸ðµÎ ¹Þ´Â´Ù. ¿ø·¡ÀÇ °ø¹éÆø¿¡ ÀÚ°£ ºñÀ²°ú ´Ü¾î °£°Ý ºñÀ²À» °öÇÏ¸é ½ÇÁ¦ Àû¿ëÇÒ °ø¹éÆøÀ» ±¸ÇÒ ¼ö ÀÖ´Ù. À̶§ ³ª´°¼À¿¡ ÀÇÇÑ ¿ÀÂ÷¸¦ ÃÖ¼ÒÈÇϱâ À§ÇØ °¡±ÞÀûÀÌ¸é °ö¼ÀÀ» ¸ÕÀúÇÏ°í ³ª´°¼ÀÀ» ³ªÁß¿¡ ÇÏ´Â °ÍÀÌ ÁÁ´Ù. GetCharWidth¿¡¼ ¸ðµç ¹®ÀÚ¿¡ ÀÚ°£ ¿É¼ÇÀ» Àû¿ëÇÏ°í ´Ü¾î °£°ÝÀ» À§ÇØ °ø¹éÆøÀº µû·Î Á¶»çÇÏ¿© ¸®ÅÏÇÑ´Ù.
int CApiEditText::GetCharWidth(TCHAR *ch, int len)
{
SIZE sz;
HDC hdc;
HFONT hFont, hOldFont=NULL;
int code;
int idx;
if (len==1) {
idx=*(BYTE *)ch;
if (idx==' ') {
return SpaceWidth;
} else {
return arChWidth[idx]*pFrame->CharExtra/100;
}
} else {
....
return arHanWidth[code-0x8000]*pFrame->CharExtra/100;
}
}
¹®ÀÚÆøÀ» ÀÚ°£¸¸Å ´ÃÀ̰ųª ÁÙÀ̱⸸ ÇÏ¸é µÈ´Ù. ±ÛÀÚÀÇ ÆøÀÌ ÀÌ·¸°Ô ¹Ù²î¸é Á¤·ÄÀ̳ª Ãâ·Â ÇÔ¼öµéµµ ¸ðµÎ ¼öÁ¤Çؾ߰ÚÁö¸¸ ´ÙÇàÈ÷ ÀÌ ÇÔ¼öµéÀº ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³ÄÇÏ¸é ¹®ÀÚÀÇ ÆøÀÌ ÇÊ¿äÇÒ ¶§ Á÷Á¢ ±¸ÇÏÁö ¾Ê°í Ç×»ó GetCharWidth¸¦ È£ÃâÇϹǷΠÀÌ¹Ì ÀÚ°£ÀÌ Àû¿ëµÈ ÆøÀ» ¹Þ±â ¶§¹®ÀÌ´Ù. Á÷Á¢ ¹®ÀÚÆøÀ» ÂüÁ¶ÇÏ´Â ¸î ±ºµ¥¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù. ´ëÇ¥ÀûÀÎ ¿¹´Â SetCaret ÇÔ¼öÀÌ´Ù.
void CApiEditText::SetCaret(BOOL bUpdatePrevX/*=TRUE*/, BOOL bScrollToCaret/*=TRUE*/)
{
....
if (bOvr) {
if (pFrame->IsDBCS(toff)) {
if (pFrame->IsEnterCode(toff)) {
caretwidth= arChWidth[' '];
°ø¹éÀÇ ÆøÀ» arChWidth¹è¿¿¡¼ ¹Ù·Î ±¸ÇßÀ¸³ª ÀÌÁ¦ ÀÚ°£°ú ´Ü¾î °£°Ý ¿É¼ÇÀÌ Àû¿ëµÈ SpaceWidth °ªÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. arChWidth[' ']¸¦ ¸ðµÎ SpaceWidth·Î ¼öÁ¤ÇÑ´Ù. arChWidth[0x20]¶ó°í µÇ¾î ÀÖ´Â °÷µµ ¸¶Âù°¡Áö·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ApiEditText.cppÀÇ ¸ðµç °÷À» ã¾Æ ġȯÇ쵂 ´Ü PrepareCharWidth¿¡¼ SpaceWidth¸¦ óÀ½ °è»êÇÏ´Â °÷Àº Á¦¿ÜÇØ¾ß ÇÑ´Ù. ÃÑ 17 ±ºµ¥°¡ ÀÖ´Ù.
SapceWidth º¯¼ö ´ë½Å GetCharWidth(" ",1) ÇÔ¼ö È£Ãâ¹®À¸·Î ½Ç½Ã°£À¸·Î ±¸ÇÒ ¼öµµ ÀÖÀ¸³ª º°µµÀÇ º¯¼ö¸¦ »ç¿ëÇÑ ÀÌÀ¯´Â ¼Óµµº¸´Ù´Â Å©±â¸¦ ÁÙÀ̱â À§ÇؼÀÌ´Ù. ÇÔ¼ö È£Ãâ¹®Àº º¯¼ö ÂüÁ¶¹®¿¡ ºñÇØ »ý°¢º¸´Ù ¿ë·®À» ¸¹ÀÌ Â÷ÁöÇÑ´Ù. ÀÚ°£°ú ´Ü¾î °£°ÝÀº ¿Ï·áµÇ¾ú´Ù. ÀåÆòÀº SetFont¿¡¼ ±Û²ÃÀ» ¸¸µé ¶§ Àû¿ëÇÑ´Ù.
void CApiEditText::SetFont(LOGFONT *alogfont)
{
....
logfont=*alogfont;
hdc=GetDC(hWnd);
if (logfont.lfHeight != 0) {
if (pFrame->CharRatio != 100) {
logfont.lfWidth=logfont.lfHeight*pFrame->CharRatio/200;
} else {
logfont.lfWidth=0;
}
hMainFont=CreateFontIndirect(&logfont);
hOldFont=(HFONT)SelectObject(hdc,hMainFont);
}
ÀåÆòÀÌ 100ÀÌ ¾Æ´Ï¸é ±Û²ÃÀÇ ÆøÀ» 0À¸·Î µÎÁö ¾Ê°í Á÷Á¢ °è»êÇÑ´Ù. ÆøÀÌ ³ôÀÌÀÇ Àý¹ÝÀÏ ¶§°¡ ÀåÆò 100%À̹ǷΠCharRatio¸¦ °öÇÏ°í 200À¸·Î ³ª´©¸é µÈ´Ù. GetCharWidth¿¡µµ µ¿ÀÏÇÑ Äڵ尡 ÇÊ¿äÇÏ´Ù.
int CApiEditText::GetCharWidth(TCHAR *ch, int len)
{
....
if (arHanWidth[code-0x8000]==0xff) {
hdc=GetDC(hWnd);
if (logfont.lfHeight != 0) {
if (pFrame->CharRatio != 100) {
logfont.lfWidth=logfont.lfHeight*pFrame->CharRatio/200;
}
hFont=CreateFontIndirect(&logfont);
hOldFont=(HFONT)SelectObject(hdc,hFont);
}
ij½ÃµÇÁö ¾ÊÀº DBCS ¹®ÀÚÀÇ ÆøÀ» Á÷Á¢ °è»êÇÒ ¶§ ÀåÆòÀ» Àû¿ëÇÑ´Ù. ÀåÆò Á¤º¸´Â LOGFONT ±¸Á¶Ã¼¿¡´Â ±â·ÏµÇÁö ¾Ê´Â Á¤º¸ÀÌ´Ù. ±×·¡¼ ÀåÆòÀ» ÁöÁ¤ÇÑ ÈÄ º¸±â ¸Þ´ºÀÇ ¹Ì¸® µî·ÏµÈ ±Û²ÃÀ» ÁöÁ¤Çϸé ÀåÆòµµ ±×´ë·Î Àû¿ëµÇ¾î ¹ö¸°´Ù. Áï, Çѹø ÁöÁ¤ÇÑ ÀåÆòÀº ±Û²ÃÀÇ ¸ð¾çÀ̳ª Å©±â°¡ ¾î¶»°Ô ¹Ù²î´õ¶óµµ Áö¼ÓÀûÀ¸·Î Àû¿ëµÈ´Ù. ¾ÆÁ÷ ´ëÈ»óÀÚ¿¡¼ ¿É¼ÇÀ» Á÷Á¢ º¯°æÇÒ ¼ö´Â ¾øÁö¸¸ »ý¼ºÀÚÀÇ ÃʱⰪÀ» ¼öÁ¤ÇÏ¸é ´ÙÀ½ ÇüÅ·Π¹®¼¸¦ ÀÐÀ» ¼ö ÀÖ´Ù.
ÀÚ°£°ú ´Ü¾î °£°ÝÀ» ¿øÇϴ´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ¾î ¼±ÅÃÀÇ ÆøÀ» ³ÐÇû´Ù. ±×·¯³ª ÀÌ·± ±Û²Ã¿¡ ´ëÇÑ ´Ù¾çÇÑ º¯°æÀÌ ¾ÆÁ÷ Àμ⿡´Â Àû¿ëµÇÁö ¾Ê´Â´Ù. Àμâ´Â ÅؽºÆ® ÆíÁý±âÀÇ ´Ù¸¥ ±â´É°ú´Â ´Ù¼Ò µ¶¸³ÀûÀÎ ±â´ÉÀÌ¶ó º°´Ù¸¥ ¼öÁ¤À» ÇÏÁö ¾Ê¾Ò°í ±×·¯´Ù º¸´Ï ÀμⰡ ÇöÀçÀÇ ´ç±Ù ±â´ÉÀ» Àß µÞ¹ÞħÇÏÁö ¸øÇÑ´Ù. ¹æ±Ý Ãß°¡ÇÑ ÀåÆòµµ ¹°·ÐÀÌ°í ÆíÁý±âÀÇ ÇöÀç ±Û²Ãµµ Àû¿ëµÇÁö ¾Ê´Âµ¥ ±âº»ÀûÀÎ ¿É¼ÇÀº ÀνÄÇϵµ·Ï ¼öÁ¤ÇØ º¸ÀÚ. Print.cppÀÇ PrintDoc ÇÔ¼ö ÀϺκθ¸ ¼öÁ¤ÇÏ¸é µÈ´Ù.
BOOL PrintDoc(HWND hChild, HDC pdc, int nPages, int nCopies, int nFirst, int nFinal)
{
....
prtfont=NULL;
HDC hdc;
int CharRatio;
// ½Ã½ºÅÛ ±Û²ÃÀÌ ¾Æ´Ò ¶§¸¸ ±Û²ÃÀ» ¼³Á¤ÇÑ´Ù.
if (Option.prtFont.lfHeight != 0) {
// È¸é ±Û²ÃÀ» »ç¿ëÇÒ °æ¿ì
if (Option.prtFont.lfHeight==-1) {
pSi->Ae.GetFont(&tLogFont);
// È¸é ±Û²ÃÀÌ ½Ã½ºÅÛ ±Û²ÃÀÌ¸é ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä¾ø´Ù.
if (tLogFont.lfHeight != 0) {
// È¸é ±Û²ÃÀÇ Çȼ¿ ´ÜÀ§´Â Æ÷ÀÎÆ®·Î º¯È¯ÇÑ´Ù.
if (tLogFont.lfWidth == 0) {
CharRatio=100;
} else {
CharRatio=tLogFont.lfWidth*200/tLogFont.lfHeight;
}
hdc=GetDC(NULL);
tLogFont.lfHeight=tLogFont.lfHeight*72/GetDeviceCaps(hdc,LOGPIXELSY);
ReleaseDC(NULL,hdc);
}
} else {
tLogFont=Option.prtFont;
}
if (tLogFont.lfHeight) {
tLogFont.lfHeight=tLogFont.lfHeight*dpiY/72;
if (CharRatio != 100) {
tLogFont.lfWidth=tLogFont.lfHeight*CharRatio/200;
} else {
tLogFont.lfWidth=0;
}
prtfont=CreateFontIndirect(&tLogFont);
oldfont=(HFONT)SelectObject(pdc,prtfont);
}
}
ÀÌÀü ¹öÀü¿¡¼´Â ÇöÀç ±Û²ÃÀ» »ç¿ëÇÒ °æ¿ì Option ±¸Á¶Ã¼ÀÇ ±Û²Ã Á¤º¸¸¦ °ð¹Ù·Î »ç¿ëÇß¾ú´Ù. ¹®¼Ã¢ÀÇ ±Û²ÃÀº SetSetting¿¡¼ Option ±¸Á¶Ã¼ÀÇ Á¤º¸´ë·Î ¼³Á¤ÇϹǷΠ´ç¿¬ÇßÁö¸¸ ÀÌÁ¦´Â »çÁ¤ÀÌ ´Þ¶óÁ³´Ù. ¸¶¿ì½ºÀÇ ÈÙÀ» µå·¡±×Çؼ ±Û²Ã Å©±â¸¦ ¾ðÁ¦µçÁö º¯°æÇÒ ¼ö Àֱ⠶§¹®¿¡ Option ±¸Á¶Ã¼ÀÇ ±Û²Ã°ú ÆíÁýâÀÇ ±Û²ÃÀÌ ´Þ¶óÁú ¼öµµ ÀÖ´Ù. ¶ÇÇÑ 1.0¿¡¼µµ ÇöÀçâÀÇ ±Û²ÃÀ» ÀÓ½ÃÀûÀ¸·Î ¹Ù²Ù´Â ±â´ÉÀÌ ÀÖ¾úÀ¸¹Ç·Î Option ±¸Á¶Ã¼ÀÇ Á¤º¸¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ¸ÂÁö ¾Ê´Ù.
±×·¡¼ ÇöÀçâÀÇ GetFont ÇÔ¼ö·Î ±¸ÇÑ ½ÇÁ¦ »ç¿ëÁßÀÎ ±Û²Ã ¼³Á¤À» ÀÐ°í ¿©±â¿¡ ÀåÆòµµ Àû¿ëÇÑ´Ù. ±×·±µ¥ ¿©±â¿¡ ¾à°£ÀÇ ¹®Á¦°¡ Àִµ¥ Option ±¸Á¶Ã¼ÀÇ ±Û²Ã Å©±â´Â Æ÷ÀÎÆ® ´ÜÀ§ÀÌÁö¸¸ ÆíÁýâÀÇ ±Û²ÃÀº Çȼ¿´ÜÀ§¶ó´Â Á¡ÀÌ´Ù. ±×·¡¼ ÆíÁýâÀÇ ±Û²Ã Å©±â¸¦ Æ÷ÀÎÅÍ ´ÜÀ§·Î º¯È¯ÇØ µÐ´Ù. ÇÁ¸°ÅÍ DC¿¡ ÃÖÁ¾ÀûÀ¸·Î »ç¿ëµÇ´Â ±Û²ÃÀº ÇÁ¸°ÅÍÀÇ Çػ󵵿¡ ¸Â°Ô ´Ù½Ã Çȼ¿°ªÀ» °è»êÇÏÁö¸¸ ÀÌ °è»êÀ» À§Çؼ´Â Æ÷ÀÎÆ® ´ÜÀ§°¡ ÇÊ¿äÇÏ´Ù.
ÀåÆòÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÌ ÀåÆòµµ Æ÷ÀÎÆ® ´ÜÀ§¿¡ ¸Â°Ô °è»êÇØ¾ß ÇÑ´Ù. ÆíÁýâ¿¡ ¼³Á¤µÈ ÀåÆòÀº ±ÛÀÚÀÇ Æø°ú ³ôÀÌ ºñÀ²·ÎºÎÅÍ ±¸ÇÏ°í ÇÁ¸°ÅÍ DC¿¡¼ ÀÌ ºñÀ²·ÎºÎÅÍ ±ÛÀÚÆøÀ» ´Ù½Ã ÁöÁ¤ÇÑ´Ù. ÇöÀç ApiEdit¿¡´Â ÀåÆòÀ» Option¿¡ ÁöÁ¤µÈ °Í ¿ÜÀÇ °ÍÀ¸·Î º¯°æÇÏ´Â ±â´ÉÀÌ ¾øÀ¸¹Ç·Î ÀåÆòÀº Option¿¡¼ ¹Ù·Î ÀÐÀ» ¼öµµ ÀÖÁö¸¸ Â÷ÈÄÀÇ È®À强À» À§ÇØ Á÷Á¢ °è»êÇß´Ù. ÀÚ°£À̳ª ´Ü¾î °£°Ý µûÀ§ÀÇ ¿É¼ÇµéÀº Àμ⿡ ±»ÀÌ Àû¿ëÇÏÁö ¾Ê¾Ò´Ù. ¹°·Ð ¸¶À½¸¸ ¸ÔÀ¸¸é ¾ó¸¶µçÁö Àû¿ëÇÒ ¼ö ÀÖÁö¸¸ ÅؽºÆ® ÆíÁý±âÀÇ ÀμⰡ ÀÌÁ¤µµ±îÁö Á¤±³ÇÒ ÇÊ¿ä´Â ¾ø´Ù°í »ý°¢ÇÑ´Ù.
Ä¿¼´Â ¸¶¿ì½ºÀÇ ÇöÀç À§Ä¡¸¦ Ãâ·ÂÇÏ´Â ¾ÆÁÖ Áß¿äÇÑ ¿ªÇÒÀ» Çϸç Ç×»ó ȸ鿡 Ç¥½ÃµÇ¾î ÀÖ´Ù. ±×·±µ¥ ¹®ÀåÀ» ÀÔ·ÂÇÒ ¶§´Â Å°º¸µå¸¸ »ç¿ëÇϸç À̶§ ¸¶¿ì½º Ä¿¼´Â »ó´çÈ÷ °É¸®Àû°Å¸®´Â Á¸ÀçÀÌ´Ù. ÀÔ·ÂÇÏ´Â À§Ä¡¿¡ Ä¿¼°¡ ÀÖÀ¸¸é ±× ÀÛÀº Ä¿¼¿¡ °¡·Á ¹®ÀåÀÌ Àß ¾È º¸À̸ç ŸÀÌÇÁ Ä¡´Ù°¡ ¸¶¿ì½º¸¦ ¿òÁ÷ÀÌ´Â °Íµµ ±ÍÂú´Ù. CursorEdit ¿É¼ÇÀº ÀÔ·ÂÁß¿¡ ¸¶¿ì½º Ä¿¼¸¦ ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.
°ª |
¼³¸í |
0 |
¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù. |
1 |
Ä¿¼¸¦ ¼û±ä´Ù. |
2 |
Ä¿¼¸¦ ÀÛ¾÷¿µ¿ª ¿À¸¥ÂÊ À§·Î º¸³½´Ù. |
3 |
Ä¿¼¸¦ ÀÛ¾÷¿µ¿ª ¿À¸¥ÂÊ ¾Æ·¡·Î º¸³½´Ù. |
4 |
ij·µÀÇ ¿À¸¥ÂÊ ¾Æ·¡¿¡ µÐ´Ù. |
µðÆúÆ®´Â ¹°·Ð ¾Æ¹« 󸮵µ ÇÏÁö ¾Ê°í Ä¿¼¸¦ ³»¹ö·ÁµÎ´Â 0ÀÌ¸ç °¡Àå ÀÚ¿¬½º·´´Ù. ±×·¯³ª Ä¿¼°¡ Á¤ ´«¿¡ °Å½½¸°´Ù¸é ´Ù¸¥ ¿É¼ÇÀ» ¼±ÅÃÇÏ¿© Àá½Ã ¼û±ä´Ù°Å³ª ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ Ã³¸®¸¦ À§ÇØ º¯¼ö Çϳª¿Í ¸â¹ö ÇÔ¼ö µÎ °³¸¦ Ãß°¡ÇÑ´Ù. ´ÙÀ½ Ç׿¡ ÀÛ¼ºÇÒ ¸â¹ö º¯¼öÀÇ ¿øÇüµµ ¹Ì¸® ¼±¾ðÇß´Ù.
class CApiEditText : public CWindow
{
protected:
....
BOOL bShowCursor;
public:
....
virtual void ProcessCursorInEditing();
virtual void ShowCursorEdit(BOOL bShow);
virtual int AdjustSpace(int &nPos,BOOL bAdd);
virtual int AdjustSpaceInsert(int &nPos1,int &nPos2);
};
ÀÌ ÇÔ¼öµéÀº Çí»ç ºä¿¡¼µµ È£ÃâÇØ¾ß ÇϹǷΠ¹Ýµå½Ã °¡»óÇÔ¼ö¿©¾ß ÇÑ´Ù. bShowCursor´Â »ý¼ºÀÚ¿¡¼ TRUE·Î ÃʱâÈÇÑ´Ù.
CApiEditText::CApiEditText()
{
....
bShowCursor=TRUE;
}
ÀÌ º¯¼ö´Â Ä¿¼°¡ ÇöÀç º¸ÀÌ´Â ÁßÀΰ¡ ¾Æ´Ñ°¡¸¦ ±â¾ïÇÑ´Ù. ÀÔ·ÂÁßÀÇ Ä¿¼´Â ´ÙÀ½ ÇÔ¼ö°¡ °ü¸®ÇÑ´Ù.
void CApiEditText::ProcessCursorInEditing()
{
RECT crt;
POINT pt;
switch (pFrame->CursorEdit) {
default:
case 0:
break;
case 1:
ShowCursorEdit(FALSE);
break;
case 2:
case 3:
GetClientRect(hWnd,&crt);
ClientToScreen(hWnd,(LPPOINT)&crt);
ClientToScreen(hWnd,(LPPOINT)&crt.right);
if (pFrame->CursorEdit==2) {
SetCursorPos(crt.right-25,crt.top+8);
} else {
SetCursorPos(crt.right-25,crt.bottom-33);
}
break;
case 4:
GetCaretPos(&pt);
ClientToScreen(hWnd,&pt);
SetCursorPos(pt.x+FontWidth*5,pt.y+LineHeight*2);
break;
}
}
void CApiEditText::ShowCursorEdit(BOOL bShow)
{
if (bShow) {
if (!bShowCursor) {
ShowCursor(TRUE);
bShowCursor=TRUE;
}
} else {
if (bShowCursor) {
ShowCursor(FALSE);
bShowCursor=FALSE;
}
}
}
CursorEdit ¿É¼Ç¿¡ µû¶ó ÀûÀýÈ÷ Ä¿¼¸¦ °ü¸®ÇÑ´Ù. 0ÀÌ¸é ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾ÊÀ¸¸ç ±×·¸Áö ¾ÊÀ¸¸é ¿É¼Ç´ë·Î Ä¿¼¸¦ Ãʸ®ÇÑ´Ù. Ä¿¼¸¦ ƯÁ¤ À§Ä¡·Î ¿Å±æ ¶§´Â SetCursorPos ÇÔ¼ö·Î ÁÂÇ¥¸¸ ÁöÁ¤ÇÏ¸é µÈ´Ù. Ä¿¼¸¦ ¼û±æ ¶§´Â ShowCursorEdit ÇÔ¼ö¸¦ È£ÃâÇÏ¿© Ä¿¼¸¦ ¼û±ä´Ù. Ä¿¼ÀÇ º¸À̱⠻óŸ¦ º¯°æÇÏ´Â ShowCursor¶ó´Â API ÇÔ¼ö°¡ Àִµ¥ ÀÌ ÇÔ¼ö´Â ³»ºÎÀûÀ¸·Î Ä«¿îÆ®¸¦ À¯ÁöÇϴ Ư¼ºÀÌ ÀÖ¾î ¿©·¯ ¹ø ¼û±â¸é ±× ȸ¼ö¸¸Å ´Ù½Ã º¸¿©¾ß ÇÏ´Â Á¦¾àÀÌ ÀÖ´Ù. ÀÌ Á¦¾àÀ» ¹«·ÂÈÇϱâ À§ÇØ º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µç °ÍÀÌ´Ù. Ä¿¼ ó¸® ÇÔ¼ö´Â Å°º¸µå·Î ¹®ÀÚ¿À» ÀÔ·ÂÇÒ ¶§ È£ÃâµÈ´Ù.
void CApiEditText::OnChar(HWND hWnd, TCHAR ch, int cRepeat)
{
....
AeMc.RecordCommand(szCom);
ProcessCursorInEditing();
LRESULT CApiEditText::OnImeComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
....
if (lParam & GCS_COMPSTR) {
ProcessCursorInEditing();
void CApiEditHexa::OnChar(HWND hWnd, TCHAR ch, int cRepeat)
{
....
if (Value==-1) {
return;
}
ProcessCursorInEditing();
¹®ÀÚ°¡ ÀÔ·ÂµÉ ¶§, ÇѱÛÀ» Á¶¸³ÁßÀÏ ¶§ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ProcessCursorInEditing ÇÔ¼ö¸¸ È£ÃâÇÏ¸é ¿É¼Ç¿¡ µû¶ó Ä¿¼¸¦ Àû´çÈ÷ °ü¸®ÇÑ´Ù. OnImeComposition ÇÔ¼ö´Â ÇÑ±Û Á¶¸³ÁßÀÏ ¶§»Ó¸¸ ¾Æ´Ï¶ó Á¶¸³ÀÌ Ç®¸± ¶§µµ È£ÃâµÇ´Âµ¥ À̶§´Â Ä¿¼¸¦ °Çµå¸®Áö ¸»¾Æ¾ß ÇÑ´Ù. ÇÑ±Û ÀÔ·ÂÁß¿¡ ¸¶¿ì½º·Î ij·µÀ» ¿Å±â¸é ÀÏ´Ü À̵¿Çß´Ù°¡ ´Ù½Ã ij·µ À§Ä¡·Î Ä¿¼°¡ µ¹¾Æ¿À¸é¼ ¼±ÅõǴ ºÎÀÛ¿ëÀÌ ÀÖ´Ù. Ä¿¼°¡ ¼û°ÜÁø °æ¿ì ¸¶¿ì½º¸¦ ¿òÁ÷À̰ųª Ŭ¸¯ÇÒ ¶§ ´Ù½Ã Ç¥½ÃÇÑ´Ù.
void CApiEditText::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
....
ShowCursorEdit(TRUE);
GetClientRect(hWnd,&crt);
void CApiEditText::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
....
ShowCursorEdit(TRUE);
if (bCapture == FALSE) {
return;
}
void CApiEditHexa::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
....
ShowCursorEdit(TRUE);
GetClientRect(hWnd,&crt);
void CApiEditHexa::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
....
ShowCursorEdit(TRUE);
if (bCapture == FALSE) {
return;
}
ĸó ¿©ºÎ¿Í´Â »ó°ü¾øÀÌ ¸¶¿ì½º·ÎºÎÅÍ ¸Þ½ÃÁö°¡ Àü´ÞµÇ±â¸¸ ÇÏ¸é ¹«Á¶°Ç Ä¿¼¸¦ Ç¥½ÃÇØ¾ß ÇÑ´Ù. ÀÌ ¿É¼ÇÀº ¾îµð±îÁö³ª ÀÔ·ÂÁß¿¡¸¸ Ä¿¼¸¦ °ü¸®ÇÒ »ÓÀÌ´Ù.
À¥ÀÇ Ç¥ÁØ ¹®¼ÀÎ HTMLÀº µÑ ÀÌ»óÀÇ °ø¹éÀ» Çã¿ëÇÏÁö ¾Ê´Âµ¥ ´ëºÎºÐÀÇ °æ¿ì ¿¬¼ÓµÈ °ø¹éÀÌ ºÒÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. ÀÏ¹Ý ¹®¼µµ ¸¶Âù°¡Áö·Î µÑ ÀÌ»óÀÇ °ø¹éÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ º°·Î ¾ø´Âµ¥´Ù ´ë°³ÀÇ °æ¿ì ÀÔ·ÂÁßÀÇ ¿ÀŸÀ̰ųª ÆíÁý¿¡ ÀÇÇØ °ø¹éÀÌ µÑ ÀÌ»óÀ¸·Î ´Ã¾î³ °ÍÀÌ´Ù. ¹®¼¸¦ ÀÔ·ÂÇÒ ¶§ °ø¹éÅ°¸¦ µÎ ¹ø ¿¬¼ÓÀ¸·Î ´©¸£´Â ½Ç¼ö´Â Àß ÇÏÁö ¾ÊÁö¸¸ ¹®¼¸¦ ÆíÁýÇÏ´Ù º¸¸é ¿øÄ¡¾Ê°Ô µÑ ÀÌ»óÀÇ °ø¹éÀÌ »ý±â±âµµ ÇÑ´Ù.
½º¸¶Æ® °ø¹é ±â´ÉÀ̶õ ÆíÁýÇÒ ¶§ °ø¹éÀ» Àû´çÈ÷ Á¶Á¤ÇÏ¿© ºÒÇÊ¿äÇÑ °ø¹éÀ» ÃÖ¼ÒÈÇÏ´Â ±â´ÉÀÌ´Ù. °ø¹é ¹®ÀÚ¸¸ Á¶Á¤ ´ë»óÀ̸ç ÅÇÀº °ø¹éÀ¸·Î Ãë±ÞÇÏÁö ¾Ê´Â´Ù. ÅÇÀº ´Ü¼øÇÑ °ø¹é°ú´Â ±â´ÉÀÌ ´Ù¸£°í ¼Ò½º ÄÚµåó·³ ¹®¼ Çü½ÄÀ» ¸¸µé±â À§ÇØ ÀǵµÀûÀ¸·Î ¿©·¯¹ø ÀÔ·ÂÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ½º¸¶Æ® °ø¹é ±â´ÉÀº ´ÙÀ½°ú °°Àº »óȲ¿¡¼ ÇÊ¿äÇÏ´Ù°í ÆÇ´ÜµÉ °æ¿ì µ¿ÀÛÇÑ´Ù.
1.»èÁ¦³ª À߶󳻱⸦ ÇÒ ¶§ ³²Àº °ø¹éÀÌ µÑÀÌ µÇÁö ¾Ê°Ô ÇÑ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ. ÀÌÈÄÀÇ ±×¸²¿¡ - ¹®ÀÚ´Â °ø¹éÀ» ÀǹÌÇÑ´Ù.
¹®Àå Áß°£ÀÇ ´Ü¾î¸¦ ¼±ÅÃÇؼ »èÁ¦ÇÏ¸é ´Ü¾î ¾çÂÊÀÇ °ø¹éÀÌ ³²´Âµ¥ µÎ °³ÀÇ °ø¹éÁß Çϳª´Â ºÒÇÊ¿äÇÏ´Ù. ÀÌ µÎ °ø¹éÀ» ÇÕÃÄ Çϳª¸¸ ³²±â°í ³ª¸ÓÁö´Â Áö¿î´Ù. °ø¹éÀÌ µÎ °³ ÀÌ»ó ÀÖÀ» ¶§µµ Çϳª¸¸ ³²±â´Â °ÍÀÌ ÁÁ´Ù. ´Ü¾î¸¦ À߶ó³ÂÀ» °æ¿ì ¿©ºÐÀ¸·Î Áö¿öÁø °ø¹éÀº Ŭ¸³º¸µå¿¡ ³ÖÁö ¸»¾Æ¾ß ÇÑ´Ù. »ç¿ëÀÚ´Â ¼±ÅÃÇÑ ´Ü¾î¸¸ Ŭ¸³º¸µå¿¡ ³Ö¾ú´Ù°í »ý°¢ÇÏ¸ç ¹®¼¿¡ Ãß°¡·Î Áö¿öÁø °ø¹é±îÁö Ŭ¸³º¸µå¿¡ ³ÖÀ» ÇÊ¿ä´Â ¾ø´Ù. »èÁ¦ ÈÄ ¾çÂÊ¿¡ °ø¹éÀÌ Çϳªµµ ¾øÀ»¶§ ÀϺη¯ °ø¹éÀ» ¸¸µé¾î ³ÖÀ» ÇÊ¿ä´Â ¾ø´Ù. ¿ø·¡ °ø¹éÀÌ ¾ø¾úÀ¸¸é ¾ø´Â ä·Î ³²°Ü µÎ¸é µÈ´Ù.
2.ºÙ¿© ³ÖÀ» ¶§´Â ¾çÂÊ¿¡ °ø¹éÀ» Çϳª¾¿ ³Ö´Â´Ù. ºÙ¿© ³ÖÀº ÈÄ °ø¹éÀÌ ¾ø´Ù¸é »ðÀÔÇÏ°í µÑ ÀÌ»óÀÇ °ø¹éÀÌ ÀÖÀ» ¶§´Â Çϳª·Î Á¤¸®ÇÑ´Ù.
º¸Åë ´Ü¾î¸¦ ºÙ¿© ³Ö±â ¶§¹®¿¡ ºÙ¿© ³ÖÀº ÈÄ ´Ü¾î »çÀÌ¿¡ °ø¹éÀÌ ¾ø´Âµ¥ ÀÎÀ§ÀûÀ¸·Î ¸¸µé¾î »ðÀÔµÈ ´Ü¾î¿Í °ø¹é »çÀ̸¦ ¶ç¿î´Ù. ´Ü ºÙ¿©³Ö´Â ÀÚ¸®°¡ ´Ü¾îÀÇ Áß°£ÀÏ ¶§´Â °ø¹é Á¶Á¤À» ÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î "³ª¹«Å¸ºÒ" ´Ü¾îÀÇ ³ª¹« ´ÙÀ½¿¡ ¾Æ¹Ì¸¦ »ðÀÔÇÒ ¶§ "³ª¹«¾Æ¹ÌŸºÒ"ÀÌ µÇ¾î¾ßÁö "³ª¹« ¾Æ¹Ì ŸºÒ"·Î ¸¸µéÁö ¾Ê´Â´Ù. ÃÖ¼ÒÇÑ ºÙ¿© ³Ö´Â ÀÚ¸®ÀÇ ¾çÂÊ ÇÑ °÷¿¡´Â °ø¹éÀÌ ÀÖ¾î¾ß ÇÑ´Ù.
3.¸¶¿ì½º·Î µå·¡±×ÇÏ¿© ¹®ÀÚ¿À» À̵¿ ¹× º¹»çÇÒ ¶§µµ °ø¹éÀ» Àû´çÈ÷ Á¶Á¤ÇÑ´Ù. ´õºíŬ¸¯À¸·Î ´Ü¾î¸¸ ¼±ÅÃÇÑ ÈÄ À̵¿ÇÏ´Â °æ¿ì°¡ ¸¹Àºµ¥ À̶§ À̵¿ÀüÀÇ ÀÚ¸®¿Í »ðÀÔµÈ ÀÚ¸®ÀÇ ¾çÂÊ °ø¹éÀ» ¸ðµÎ Á¶Á¤ÇØ¾ß ÇÑ´Ù.
¿ø·¡ ÀÚ¸®¿¡´Â µÎ °³ÀÇ °ø¹éÀÌ ³²°í »õ·Î À̵¿ÇÑ °÷¿¡´Â °ø¹éÀÌ ¾ø¾î »ó´çÈ÷ ¾î»öÇѵ¥ À̸¦ Á¶Á¤ÇÏ¿© ´Ü¾î »çÀÌ¿¡ Çϳª¾¿À» °ø¹éÀ» ³²±ä´Ù. À߶󳻱â¿Í ºÙ¿© ³Ö±â¸¦ ¿¬ÀÌ¾î ½ÇÇàÇÑ °Í°ú À¯»çÇÏÁö¸¸ ±¸Çö ÄÚµå´Â »ó´çÈ÷ ´Ù¸£´Ù.
ÀÌ Á¤µµ ¿¹¸¦ µé¸é ½º¸¶Æ® °ø¹éÀÌ ¿Ö ÇÊ¿äÇÏ¸é ¾î¶² ½Ç¿ë¼ºÀÌ ÀÖ´ÂÁö °¨À» ÀâÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à ÀÌ·± ±â´ÉÀÌ ¾ø´Ù¸é ´Ü¾î¸¦ À̵¿ÇÑ ÈÄ °ø¹éÀ» ¼öµ¿À¸·Î Á¶Á¤ÇØ¾ß ÇϹǷΠºÒÆíÇØÁø´Ù. ¸ÕÀú »ó´ëÀûÀ¸·Î ½¬¿î »èÁ¦ÇÒ ¶§ÀÇ °ø¹é Á¶Á¤ ±â´ÉÀ» ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½ ÇÔ¼ö´Â nPos À§Ä¡ÀÇ °ø¹éÀ» Á¶Á¤ÇÑ´Ù.
// nPos ÀÚ¸®¿¡ °ø¹é Á¶Á¤. ¸®ÅÏ°ªÀº »ðÀÔµÈ ¹ÙÀÌÆ® ¼ö
int CApiEditText::AdjustSpace(int &nPos,BOOL bAdd)
{
int toff;
int s,e;
// °ø¹é ½ÃÀÛ ¿ÀÇÁ¼Â
for (toff=nPos-1;;toff--) {
if (toff==0) {
s=toff;
break;
}
if (pFrame->buf[toff]!= ' ') {
s=toff+1;
break;
}
}
// °ø¹é ³¡ ¿ÀÇÁ¼Â
for (toff=s;;toff++) {
if (toff==pFrame->doclen) {
e=toff;
break;
}
if (pFrame->buf[toff]!=' ') {
e=toff;
break;
}
}
// ¹®´Ü óÀ½ÀÌ°í °ø¹éÀÌ ÀÖÀ» °æ¿ì. ¸ðµç °ø¹é »èÁ¦
if (e-s > 0 && pFrame->FindParaStart(s)==s) {
Delete(s,e-s);
nPos=s;
return -(e-s);
}
// 1º¸´Ù Å©¸é Çϳª¸¸ ³²±â°í »èÁ¦
if (e-s > 1) {
Delete(s+1,e-s-1);
nPos=s+1;
return -(e-s-1);
}
// °ø¹éÀÌ ¾ø°í bAddÀÌ¸é °ø¹é Çϳª »ðÀÔ
if (bAdd && e-s==0) {
Insert(nPos," ",1);
nPos++;
return 1;
}
// ¿ø·¡ °ø¹éÀÌ ÇϳªÀ̰ųª °ø¹éÀÌ ¾ø¾ú´ø °æ¿ì.
return 0;
}
s,e¿¡ °ø¹éÀÇ ¹üÀ§¸¦ ±¸Çϴµ¥ e-s½ÄÀ¸·Î nPosÀ§Ä¡ÀÇ °ø¹é °³¼ö¸¦ ¾Ë ¼ö ÀÖ´Ù. ÇöÀç À§Ä¡ÀÇ °ø¹é °³¼ö¿Í nPosÀÇ À§Ä¡¿¡ µû¶ó °ø¹é Á¶Á¤ ¹æ¹ýÀÌ ´Þ¶óÁø´Ù. °¡Àå Ư¼öÇÏ°Ô Ãë±ÞµÇ¾î¾ß ÇÒ °æ¿ì´Â ¹®´Ü óÀ½¿¡ °ø¹éÀÌ ÀÖ´Â °æ¿ìÀÌ´Ù. ¹®´Ü óÀ½¿¡ °ø¹éÀÌ ¿À´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ¸¹Ç·Î ¸ðµç °ø¹éÀ» »èÁ¦ÇÏ°í nPos´Â °ø¹éÀ» »èÁ¦ÇÑ ÈÄÀÇ Ã¹ À§Ä¡°¡ µÈ´Ù. ¸®ÅÏ°ªÀº ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ »ðÀÔµÈ ¹ÙÀÌÆ® ¼öÀÌ¸ç »èÁ¦µÇ¾úÀ¸¸é À½¼ö°¡ ¸®ÅϵȴÙ.
°ø¹éÀÌ µÑ ÀÌ»ó ÀÖÀ¸¸é Çϳª¸¸ ³²±â°í »èÁ¦ÇÑ´Ù. nPos´Â »èÁ¦µÈ °ø¹é ´ÙÀ½ ¿ÀÇÁ¼ÂÀÌ µÈ´Ù. °ø¹éÀÌ ¾øÀ» °æ¿ì´Â bAddÀμö¿¡ µû¶ó 󸮰¡ ´Þ¶óÁö´Âµ¥ ÀÌ °ªÀÌ FALSEÀÌ¸é ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù. bAdd°¡ TRUEÀÌ¸é °ø¹é Çϳª¸¦ »ðÀÔÇÑ´Ù. »ó±â Á¶°ÇÀÇ ¾î´À °æ¿ì¿¡µµ ÇØ´çµÇÁö ¾ÊÀ¸¸é nPos´Â ÀüÇô °Çµå¸®Áö ¾Ê°í °ø¹é Á¶Á¤µµ ÇÏÁö ¾ÊÀ¸¸ç 0À» ¸®ÅÏÇÑ´Ù. DeleteSelection¿¡¼ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
BOOL CApiEditText::DeleteSelection()
{
int SelFirst, SelSecond;
int idx,Acc,linelen;
if (SelStart != SelEnd) {
if (!bColumnMode) {
SelFirst=min(SelStart,SelEnd);
SelSecond=max(SelStart,SelEnd);
if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {
pFrame->StartUndoGroup(24);
}
Delete(SelFirst,SelSecond-SelFirst);
off=SelFirst;
if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {
AdjustSpace(off,FALSE);
pFrame->EndUndoGroup();
}
¿ ¸ðµå¿¡¼´Â Á¤È®ÇÏ°Ô »ç°¢¿µ¿ªÀ» ¼±ÅÃÇÏ¿© »èÁ¦Çϱ⸦ ¹Ù¶ó¹Ç·Î °ø¹é Á¶Á¤À» ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. Çí»ç ºä¿¡¼µµ °ø¹é Á¶Á¤Àº ¾Æ¹« Àǹ̰¡ ¾ø´Ù. ¼±Åÿµ¿ª »èÁ¦¿Í °ø¹é Á¶Á¤ µ¿ÀÛÀÌ ÇϳªÀÇ ±×·ìÀ» ±¸¼ºÇÑ´Ù. ±×·¯³ª DelectSelection ÇÔ¼ö°¡ È£ÃâµÉ ¶§´Â ÀÌ¹Ì Áßø ±×·ìÀÇ ¾ÈÀÎ °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ ½ÇÁ¦·Î ÀÌ ±×·ìÀÌ ¸ÞÀÎÀÌ µÇ´Â °æ¿ì´Â »ç½Ç»ó °ÅÀÇ ¾ø´Ù. ¼±Åÿµ¿ª »èÁ¦ÈÄ ÇöÀç À§Ä¡ÀÎ off¿¡ ´ëÇØ °ø¹éÀ» Á¶Á¤ÇÑ´Ù. À̶§ °ø¹éÀÌ ¾øÀ» ¶§ ÀϺη¯ ¸¸µé ÇÊ¿ä´Â ¾øÀ¸¹Ç·Î bAdd Àμö´Â FALSEÀÌ´Ù. AdjustSpaceÀÇ Ã¹ ¹ø° Àμö°¡ ÂüÁ¶ ÀμöÀ̹ǷΠ°ø¹é Á¶Á¤¿¡ ÀÇÇØ offÀ̵¿±îÁö °°ÀÌ Ã³¸®µÈ´Ù. ´ÙÀ½Àº ºÙ¿© ³Ö±â¸¦ ó¸®ÇØ º¸ÀÚ. ¾çÂÊÀÇ °ø¹éÀ» ¸ðµÎ °ü¸®ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
// ¾çÂÊ¿¡ °ø¹é Á¤¸®.
int CApiEditText::AdjustSpaceInsert(int &nPos1,int &nPos2)
{
int nIns;
// ¹®´Ü óÀ½Àº µÚÂʸ¸ Á¶Á¤ÇÏ¸é µÈ´Ù.
if (nPos1==pFrame->FindParaStart(nPos1)) {
nIns=AdjustSpace(nPos2,TRUE);
return nIns;
}
// ¾çÂÊ¿¡ °ø¹éÀÌ ¾øÀ¸¸é Á¶Á¤ÇÒ ÇÊ¿ä°¡ ¾øÀ½.
if ((nPos1==0 || pFrame->buf[nPos1-1]!=' ') && pFrame->buf[nPos2]!=' ')
return 0;
// ¾ÕÂÊ Á¶Á¤. nPos2 °°ÀÌ À̵¿
nIns=AdjustSpace(nPos1,TRUE);
nPos2+=nIns;
// µÚÂÊ Á¶Á¤. nPos2´Â Á¶Á¤ ÈÄÀÇ °ø¹é ¾Õ À§Ä¡
nIns+=AdjustSpace(nPos2,TRUE);
return nIns;
}
ÀÌ °æ¿ìµµ ¹®´Ü óÀ½Àº Ư¼öÇÏ°Ô Ãë±ÞµÇ´Âµ¥ ¾ÕÂÊ¿¡´Â °ø¹éÀ» »ðÀÔÇÏÁö ¾Ê°í µÚÂÊ¿¡¸¸ °ø¹éÀ» Á¶Á¤ÇÑ´Ù. ¹®´Ü óÀ½À̶ó´Â Á¶°Ç ÀÚü°¡ ¾ÕÂÊ¿¡ °ø¹éÀÌ ¾ø´Ù´Â ¾ê±âÀ̹ǷΠ¾ÕÂÊ °ø¹éÀº ÀϺη¯ Á¶Á¤ÇÒ ÇÊ¿äµµ ¾ø°í Á¶Á¤Çؼµµ ¾ÈµÈ´Ù. ¹®´Ü óÀ½ÀÌ ¾Æ´Ñ °æ¿ì´Â ¾çÂÊ¿¡ °ø¹éÀ» Á¤¸®ÇϵÇ, ´Ü ´Ü¾î Áß°£ÀÎ °æ¿ì´Â °ø¹éÀ» Á¶Á¤ÇÏÁö ¾Ê´Â´Ù. ÃÖ¼ÒÇÑ nPos1, nPos2 Áß ÇÑÂÊ¿¡´Â °ø¹éÀÌ ÀÖ¾î¾ß Á¶Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÕÂÊ °ø¹éÀ» ¸ÕÀú Á¶Á¤Çϴµ¥ À̶§ »ðÀÔµÈ ¹ÙÀÌÆ® ¼ö¸¸Å µÚÂÊ ¿ÀÇÁ¼Â nPos2µµ °°ÀÌ À̵¿½ÃÄÑ¾ß ÇÑ´Ù. µÚÂÊ °ø¹éÀ» Á¶Á¤ÇÑ ÈÄ ÃÑ »ðÀÔµÈ ¹ÙÀÌÆ® ¼ö¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö´Â IDM_AE_PASTE¿¡¼ È£ÃâÇÑ´Ù.
void CApiEditText::OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
{
....
case IDM_AE_PASTE:
....
} else {
InputExtraSpace(off);
if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {
pFrame->StartUndoGroup(25);
}
if (SelStart != SelEnd) {
pFrame->StartUndoGroup(2);
}
....
Invalidate(pFrame->FindParaStart(off));
SelFirst=off;
off += lstrlen(ptr);
SelSecond=off;
if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {
AdjustSpaceInsert(SelFirst,SelSecond);
off=SelSecond;
pFrame->EndUndoGroup();
}
}
SetCaret();
}
return;
Ŭ¸³º¸µå ³»¿ëÀ» ºÙ¿© ³ÖÀº ÈÄ °ø¹éÀ» Á¶Á¤ÇÑ´Ù. ±×·ìÀº ¹°·Ð ±¸¼ºÇØ¾ß ÇÑ´Ù. ¼±Åà ´ëü ºÙ¿© ³Ö±â ±×·ìÀ» ¾ÈÂÊÀ¸·Î ÁßøÇÏ°í ÀÖ´Ù. ´ÙÀ½Àº ¸¶¿ì½º·Î À̵¿ ¹× º¹»ç½ÃÀÇ °ø¹éÀ» Á¤¸®Çϴµ¥ CopyString ÇÔ¼ö¿¡¼ ó¸®ÇÑ´Ù.
void CApiEditText::CopyString(BOOL bCopy, int from, int &to, int len, BOOL bRec/*=TRUE*/)
{
TCHAR *t;
int orito=to;
int BkExtraX;
int ss,se;
int nIns;
BkExtraX=ExtraX;
if (InputExtraSpace(to)) {
if (from > to-BkExtraX) {
from+=BkExtraX;
}
}
t=(TCHAR *)malloc(len);
memcpy(t,pFrame->buf+from,len);
// ½º¸¶Æ® °ø¹éÀÌ°í ±â·Ï ¸ðµåÀÏ ¶§¸¸. Áï, Ãë¼Ò, Àç½ÇÇà½Ã´Â ½º¸¶Æ® °ø¹é µ¿ÀÛ ¾ÈÇÔ
if (bRec==TRUE && pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {
if (bCopy) {
pFrame->StartUndoGroup(26);
} else {
pFrame->StartUndoGroup(27);
}
Insert(to,t,len,TRUE);
se=to+len;
nIns=AdjustSpaceInsert(to,se);
if (bCopy==FALSE) {
if (to > from) {
Delete(from,len,TRUE);
nIns=AdjustSpace(from,FALSE);
to=to-len+nIns;
} else {
from+=nIns;
Delete(from+len,len,TRUE);
ss=from+len;
AdjustSpace(ss,FALSE);
}
}
pFrame->EndUndoGroup();
} else {
Insert(to,t,len,FALSE);
if (bCopy==FALSE) {
if (to > from) {
Delete(from,len,FALSE);
to-=len;
} else {
Delete(from+len,len,FALSE);
}
}
if (bRec) {
if (bCopy) {
pFrame->URInsert(to,t,len);
} else {
pFrame->URMove(from,orito,t,len);
}
}
}
free(t);
}
ÀÌ °æ¿ì´Â ±âÁ¸ Äڵ带 Àç»ç¿ëÇÒ ¼ö ¾øÀ¸¸ç ¿ÏÀüÈ÷ µû·Î Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé UR_MOVE ·¹ÄÚµå¿Í °ø¹é Á¶Á¤¿¡ ÀÇÇÑ ÆíÁý µ¿ÀÛÀÌ ±×·ìÀ» ±¸¼ºÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. from, to ¸ðµÎ º¹ÀâÇÑ ±ÔÄ¢¿¡ ÀÇÇØ °ø¹éÀÌ Á¶Á¤µÇ±â ¶§¹®¿¡ UR_MOVE ·¹Äڵ忡 ±â·ÏÇÒ ¿ÀÇÁ¼ÂÀ» °è»êÇϱⰡ ³Ê¹« ±î´Ù·Ó´Ù. ±×·¡¼ ¾Æ¿¹ À̵¿À» »ðÀÔ ÈÄ »èÁ¦·Î ´Ù½Ã Á¤ÀÇÇÏ°í ÀÌ µ¿ÀÛµéÀ» ±×·ìÀ¸·Î ¹¾ú´Ù. ³»ºÎÀûÀÎ ±â·Ï ¹æ½ÄÀº »ó´çÈ÷ ´Þ¶óÁöÁö¸¸ »ç¿ëÀÚ°¡ º¸±â¿¡´Â Â÷ÀÌ°¡ ¾ø´Ù. ¸ÕÀú »ðÀÔÇÏ°í bCopy¿Í ¹æÇâ¿¡ µû¶ó ¿ÀÇÁ¼ÂµéÀ» Àû´çÈ÷ Á¶Á¤ÇÏ¸é¼ ¿ø·¡ ¼±Åà ¿µ¿ªÀ» »èÁ¦ÇØ¾ß ÇÑ´Ù.
ÀÌ ±â´ÉÀÇ µðÆúÆ®°ªÀº FALSE·Î µÐ´Ù. ½º¸¶Æ® °ø¹éÀ̶õ Á» ÁÁ°Ô ¾ê±âÇÏ¸é »ç¿ëÀÚ¸¦ ¹è·ÁÇÑ ¶È¶ÈÇÑ °ø¹é °ü¸®¶ó°í ÇÒ ¼ö ÀÖÁö¸¸ ´Ù¸¥ °¢µµ·Î º¸¸é »ç¿ëÀÚÀÇ ÆíÁý µ¿ÀÛ¿¡ ´ëÇÑ ºÒÇÊ¿äÇÑ Âü°ßÀÏ ¼öµµ ÀÖ´Ù. ÀÌ ±â´ÉÀÇ µ¿ÀÛ ¹æ½Ä°ú Àǵµ¸¦ Àß ¸ð¸£´Â »ç¶÷Àº ¹®¼ÀÇ º¯È¸¦ ¼±¶æ ÀÌÇØÇϱ⠾î·Æ´Ù. ±×·¡¼ ²À ÇÊ¿äÇÒ °æ¿ì, ±×¸®°í ÀÌ ±â´ÉÀÇ È¿°ú¸¦ Á¤È®È÷ ¾Æ´Â »ç¶÷¸¸ ¿É¼ÇÀ» ÄѼ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¾Õ¼ ÀÛ¼ºÇß´ø ÀÔ·ÂÁßÀÇ Ä¿¼ ó¸® ±â´Éµµ ¸¶Âù°¡Áö ÀÌÀ¯·Î µðÆúÆ®´Â 0ÀÌ´Ù.
Áö±Ý±îÁö ¸¸µç ¿©·¯ ¿É¼ÇµéÀ» ¼³Á¤ ´ëÈ»óÀÚ¿¡ ¹èÄ¡ÇÏ¿© »ç¿ëÀÚ°¡ ¿øÇÒ ¶§ ÆíÁýÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ±×¸®°í ´õºÒ¾î ±Û²Ã¿¡ ´ëÇØ ±½°Ô, ±â¿ïÀÓ ¼Ó¼ºÀ» ÁöÁ¤ÇÏ´Â ¿É¼Çµµ °°ÀÌ ¸¸µé¾î Ãß°¡ÇÑ´Ù.. »ç½Ç ÀÌ µÎ ¿É¼ÇÀº ±×´ÙÁö ½Ç¿ëÀûÀÌÁö ¾Ê¾Æ 1.0¿¡¼ »°¾ú´Âµ¥ ¾øÀ¸´Ï ¶Ç ¼·¼·ÇÑ °¨ÀÌ ÀÖ¾î Æ÷ÇÔ½ÃÅ°±â·Î Çß´Ù. SOption ±¸Á¶Ã¼¿¡ Áö±Ý±îÁö ¸¸µé¾ú´ø ¿É¼Ç ¸â¹ö¸¦ Ãß°¡ÇÑ´Ù. ApiEditÀÇ ¸â¹ö º¯¼ö¿Í °°Àº À̸§À» »ç¿ëÇß´Ù.
struct SOption
{
....
int nWheel;
int nCtrlWheel;
int nShiftWheel;
int nCtrlShiftWheel;
BOOL bSwapDragButton;
int CharExtra;
int WordExtra;
int CharRatio;
int CursorEdit;
BOOL bSmartSpace;
};
±Û²ÃÀÇ ¸ð¾çÀº logfont¿¡ °°ÀÌ ±â·ÏµÇ¹Ç·Î º°µµÀÇ º¯¼ö¸¦ ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ¸â¹öµéÀ» ÃʱâÈ, ÀúÀå, º¹±¸ÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù.
void SOption::Init()
{
....
nWheel=1;
nCtrlWheel=6;
nShiftWheel=5;
nCtrlShiftWheel=7;
bSwapDragButton=FALSE;
CharExtra=100;
WordExtra=100;
CharRatio=100;
CursorEdit=0;
bSmartSpace=FALSE;
}
void SOption::Load(TCHAR *Key)
{
....
logfont.lfWeight=SHRegReadInt(SHCU,szKey,"FontWeight",0);
logfont.lfItalic=SHRegReadInt(SHCU,szKey,"FontItalic",0);
....
nWheel=SHRegReadInt(SHCU,szKey,"nWheel",0);
nCtrlWheel=SHRegReadInt(SHCU,szKey,"nCtrlWheel",0);
nShiftWheel=SHRegReadInt(SHCU,szKey,"nShiftWheel",0);
nCtrlShiftWheel=SHRegReadInt(SHCU,szKey,"nCtrlShiftWheel",0);
bSwapDragButton=SHRegReadInt(SHCU,szKey,"bSwapDragButton",0);
CharExtra=SHRegReadInt(SHCU,szKey,"CharExtra",0);
WordExtra=SHRegReadInt(SHCU,szKey,"WordExtra",0);
CharRatio=SHRegReadInt(SHCU,szKey,"CharRatio",0);
CursorEdit=SHRegReadInt(SHCU,szKey,"CursorEdit",0);
bSmartSpace=SHRegReadInt(SHCU,szKey,"bSmartSpace",0);
void SOption::Save(TCHAR *Key)
{
....
SHRegWriteInt(SHCU,szKey,"FontWeight",logfont.lfWeight);
SHRegWriteInt(SHCU,szKey,"FontItalic",logfont.lfItalic);
....
SHRegWriteInt(SHCU,szKey,"nWheel",nWheel);
SHRegWriteInt(SHCU,szKey,"nCtrlWheel",nCtrlWheel);
SHRegWriteInt(SHCU,szKey,"nShiftWheel",nShiftWheel);
SHRegWriteInt(SHCU,szKey,"nCtrlShiftWheel",nCtrlShiftWheel);
SHRegWriteInt(SHCU,szKey,"bSwapDragButton",bSwapDragButton);
SHRegWriteInt(SHCU,szKey,"CharExtra",CharExtra);
SHRegWriteInt(SHCU,szKey,"WordExtra",WordExtra);
SHRegWriteInt(SHCU,szKey,"CharRatio",CharRatio);
SHRegWriteInt(SHCU,szKey,"CursorEdit",CursorEdit);
SHRegWriteInt(SHCU,szKey,"bSmartSpace",bSmartSpace);
·¹Áö½ºÆ®¸® ÀúÀå ¼ø¼´Â ¾Æ¹«·¡µµ »ó°ü¾øÁö¸¸ ±Û²Ã¿¡ °ü·ÃµÈ Á¤º¸´Â °¡±ÞÀû ÇÑ °÷¿¡ ¸ð¾Æ ³õ´Â °ÍÀÌ ÁÁÀ¸¹Ç·Î FontWeight ¿É¼ÇÀº FontHeight ¿É¼Ç ¹Ù·Î ´ÙÀ½¿¡ ÀúÀåÇÑ´Ù. ´ÙÀ½Àº ÀÌ ¿É¼ÇµéÀ» ´ëÈ»óÀÚ¿¡ ¹èÄ¡ÇÑ´Ù. ÀÚ°£, ´Ü¾î °£°Ý, ÀåÆò, ±Û²Ã ¸ð¾ç ¿É¼ÇÀº º¸±â ÆäÀÌÁö¿¡ µÐ´Ù.
BOOL CALLBACK ViewDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
int c1,c2,c3;
....
case WM_INITDIALOG:
....
SendDlgItemMessage(hDlg,IDC_SPINCHAREXTRA,UDM_SETRANGE,0,MAKELPARAM(300,50));
SendDlgItemMessage(hDlg,IDC_SPINWORDEXTRA,UDM_SETRANGE,0,MAKELPARAM(400,20));
SendDlgItemMessage(hDlg,IDC_SPINCHARRATIO,UDM_SETRANGE,0,MAKELPARAM(400,10));
return TRUE;
case WM_COMMAND:
....
case IDC_CHKCAPITAL:
case IDC_CHKBOLD:
case IDC_CHKITALIC:
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_RIGHTWRAP:
case IDC_COLMARK:
case IDC_EDCHAREXTRA:
case IDC_EDWORDEXTRA:
case IDC_EDCHARRATIO:
if (HIWORD(wParam) == EN_CHANGE) {
if (bEditByCode==FALSE) {
PropSheet_Changed(GetParent(hDlg),hDlg);
}
}
return TRUE;
}
break;
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code) {
case PSN_SETACTIVE:
g_StartPage=1;
bEditByCode=TRUE;
SetDlgItemInt(hDlg,IDC_LINEHEIGHT,NewOption.LineRatio,FALSE);
....
if (NewOption.logfont.lfHeight == 0) {
idx=0;
SetDlgItemInt(hDlg,IDC_FONTSIZE,10,FALSE);
SetDlgItemInt(hDlg,IDC_EDCHARRATIO,100,FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),FALSE);
} else {
idx=SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_FINDSTRING,-1,
(LPARAM)NewOption.logfont.lfFaceName);
SetDlgItemInt(hDlg,IDC_FONTSIZE,NewOption.logfont.lfHeight,FALSE);
SetDlgItemInt(hDlg,IDC_EDCHARRATIO,NewOption.CharRatio,FALSE);
CheckDlgButton(hDlg,IDC_CHKBOLD,NewOption.logfont.lfWeight==FW_BOLD);
CheckDlgButton(hDlg,IDC_CHKITALIC,NewOption.logfont.lfItalic);
}
SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_SETCURSEL,idx,0);
SendDlgItemMessage(hDlg,IDC_SEL,CB_SETCURSEL,NewOption.HideSelType,0);
SendDlgItemMessage(hDlg,IDC_CUR,CB_SETCURSEL,NewOption.nShowCurLine,0);
SendDlgItemMessage(hDlg,IDC_WRAP,CB_SETCURSEL,NewOption.nWrap-1,0);
SendDlgItemMessage(hDlg,IDC_CARETWIDTH,CB_SETCURSEL,NewOption.CaretWidth-1,0);
SendDlgItemMessage(hDlg,IDC_CBBPL,CB_SETCURSEL,NewOption.bpl,0);
bEditByCode=TRUE;
SetDlgItemInt(hDlg,IDC_RIGHTWRAP,NewOption.RightWrap,FALSE);
SetDlgItemInt(hDlg,IDC_COLMARK,NewOption.ColMark,FALSE);
SetDlgItemInt(hDlg,IDC_EDCHAREXTRA,NewOption.CharExtra,FALSE);
SetDlgItemInt(hDlg,IDC_EDWORDEXTRA,NewOption.WordExtra,FALSE);
bEditByCode=FALSE;
AdjustDlgUI(1,hDlg);
return TRUE;
case PSN_APPLY:
ApplyNow();
return TRUE;
case PSN_KILLACTIVE:
....
c1=GetDlgItemInt(hDlg,IDC_EDCHAREXTRA,NULL,FALSE);
c2=GetDlgItemInt(hDlg,IDC_EDWORDEXTRA,NULL,FALSE);
c3=GetDlgItemInt(hDlg,IDC_EDCHARRATIO,NULL,FALSE);
if (c1 < 50 || c1 > 300) {
MessageBox(hDlg,"ÀÚ°£Àº 50~300»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);
SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);
return TRUE;
}
if (c2 < 20 || c2 > 400) {
MessageBox(hDlg,"´Ü¾î°£°ÝÀº 20~400»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);
SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);
return TRUE;
}
if (c3 < 10 || c3 > 400) {
MessageBox(hDlg,"ÀåÆòÀº 10~400»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);
SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);
return TRUE;
}
....
NewOption.CharExtra=c1;
NewOption.WordExtra=c2;
NewOption.CharRatio=c3;
idx=SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETCURSEL,0,0);
if (idx==0) {
NewOption.logfont.lfHeight=0;
} else {
SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETLBTEXT,idx,(LPARAM)szFace);
for (i=0;i<FontNum;i++) {
if (lstrcmp(szFace,arFont[i].lfFaceName) == 0)
break;
}
NewOption.logfont=arFont[i];
NewOption.logfont.lfHeight=GetDlgItemInt(hDlg,IDC_FONTSIZE,NULL,FALSE);
NewOption.logfont.lfWeight=IsDlgButtonChecked(hDlg,IDC_CHKBOLD) ?
FW_BOLD:FW_NORMAL;
NewOption.logfont.lfItalic=IsDlgButtonChecked(hDlg,IDC_CHKITALIC);
}
....
´ëÈ»óÀÚ¿¡ ¿É¼ÇÀ» ¹èÄ¡ÇÏ´Â ÄÚµå´Â Áö±Ý±îÁö ¿©·¯ ¹ø ÀÛ¼ºÇØ ºÃÀ¸¹Ç·Î º°µµÀÇ ¼³¸íÀÌ ÇÊ¿ä¾øÀ» °ÍÀÌ´Ù. ÆíÁý ÆäÀÌÁö¿¡´Â ¹öÆ° ±³Ã¼ ¿É¼ÇÀÌ ¹èÄ¡µÈ´Ù.
BOOL CALLBACK EditDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage) {
....
case WM_COMMAND:
....
case IDC_CALCTABWITHAVG:
case IDC_SWAPDRAGBTN:
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
}
break;
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code) {
case PSN_SETACTIVE:
....
CheckDlgButton(hDlg,IDC_SWAPDRAGBTN,NewOption.bSwapDragButton);
return TRUE;
case PSN_KILLACTIVE:
....
NewOption.bSwapDragButton=IsDlgButtonChecked(hDlg,IDC_SWAPDRAGBTN);
....
ÈÙ ¹öÆ° °ü·Ã ¿É¼Ç, ÆíÁýÁßÀÇ Ä¿¼ ó¸®¿Í ½º¸¶Æ® °ø¹é ¿É¼ÇÀº µ¿ÀÛ ÆäÀÌÁö¿¡ µÐ´Ù.
BOOL CALLBACK OperationDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HWND hCon[4];
int i;
switch(iMessage) {
case WM_INITDIALOG:
hCon[0]=GetDlgItem(hDlg,IDC_WHEEL);
hCon[1]=GetDlgItem(hDlg,IDC_CTRLWHEEL);
hCon[2]=GetDlgItem(hDlg,IDC_SHIFTWHEEL);
hCon[3]=GetDlgItem(hDlg,IDC_CTRLSHIFTWHEEL);
for (i=0;i<4;i++) {
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"µ¿ÀÛ ¾øÀ½");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"»óÇÏ ½ºÅ©·Ñ");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÇÑÁÙ¾¿ ½ºÅ©·Ñ");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÆäÀÌÁö ´ÜÀ§ ½ºÅ©·Ñ");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"¹Ý ÆäÀÌÁö ´ÜÀ§ ½ºÅ©·Ñ");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÁÙ°£ Á¶Á¤");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"±Û²Ã Å©±â Á¶Á¤");
SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÆíÁý Ãë¼Ò/Àç½ÇÇà");
}
hCon[0]=GetDlgItem(hDlg,IDC_CBCURSOREDIT);
SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"ó¸®ÇÏÁö ¾ÊÀ½");
SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"¼û±â±â");
SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"¿À¸¥ÂÊ À§·Î Ãß¹æ");
SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"¿À¸¥ÂÊ ¾Æ·¡·Î Ãß¹æ");
SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"ij·µ µû¶ó ´Ù´Ï±â");
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_WHEEL:
case IDC_CTRLWHEEL:
case IDC_SHIFTWHEEL:
case IDC_CTRLSHIFTWHEEL:
case IDC_CBCURSOREDIT:
switch (HIWORD(wParam)) {
case CBN_SELCHANGE:
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
}
break;
case IDC_USEAUTOCLIP:
AdjustDlgUI(10,hDlg);
case IDC_WORDWRAP:
case IDC_HANGUL:
case IDC_AUTOCLIPBYTAB:
case IDC_PREVIEWCLIP:
case IDC_CHKSMARTSPACE:
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
}
return TRUE;
case WM_NOTIFY:
LPNMHDR hdr;
hdr=(LPNMHDR)lParam;
switch (hdr->code) {
case PSN_SETACTIVE:
g_StartPage=10;
SendDlgItemMessage(hDlg,IDC_WHEEL,CB_SETCURSEL,NewOption.nWheel,0);
SendDlgItemMessage(hDlg,IDC_CTRLWHEEL,CB_SETCURSEL,NewOption.nCtrlWheel,0);
SendDlgItemMessage(hDlg,IDC_SHIFTWHEEL,CB_SETCURSEL,NewOption.nShiftWheel,0);
SendDlgItemMessage(hDlg,IDC_CTRLSHIFTWHEEL,CB_SETCURSEL,NewOption.nCtrlShiftWheel,0);
CheckDlgButton(hDlg,IDC_WORDWRAP,NewOption.bWrap);
CheckDlgButton(hDlg,IDC_HANGUL,NewOption.Hangul);
CheckDlgButton(hDlg,IDC_AUTOCONVERT,NewOption.bAutoConvert);
CheckDlgButton(hDlg,IDC_PREVIEWCLIP,NewOption.bPreviewClip);
CheckDlgButton(hDlg,IDC_USEAUTOCLIP,NewOption.bUseAutoClip);
CheckDlgButton(hDlg,IDC_AUTOCLIPBYTAB,NewOption.bAutoClipByTab);
SendDlgItemMessage(hDlg,IDC_CBCURSOREDIT,CB_SETCURSEL,NewOption.CursorEdit,0);
CheckDlgButton(hDlg,IDC_CHKSMARTSPACE,NewOption.bSmartSpace);
AdjustDlgUI(10,hDlg);
return TRUE;
case PSN_APPLY:
ApplyNow();
return TRUE;
case PSN_KILLACTIVE:
NewOption.nWheel=SendDlgItemMessage(hDlg,IDC_WHEEL,CB_GETCURSEL,0,0);
NewOption.nCtrlWheel=SendDlgItemMessage(hDlg,IDC_CTRLWHEEL,CB_GETCURSEL,0,0);
NewOption.nShiftWheel=SendDlgItemMessage(hDlg,IDC_SHIFTWHEEL,CB_GETCURSEL,0,0);
NewOption.nCtrlShiftWheel=SendDlgItemMessage(hDlg,IDC_CTRLSHIFTWHEEL,CB_GETCURSEL,0,0);
NewOption.bWrap=IsDlgButtonChecked(hDlg,IDC_WORDWRAP);
NewOption.Hangul=IsDlgButtonChecked(hDlg,IDC_HANGUL);
NewOption.bAutoConvert=IsDlgButtonChecked(hDlg,IDC_AUTOCONVERT);
NewOption.bPreviewClip=IsDlgButtonChecked(hDlg,IDC_PREVIEWCLIP);
NewOption.bUseAutoClip=IsDlgButtonChecked(hDlg,IDC_USEAUTOCLIP);
NewOption.bAutoClipByTab=IsDlgButtonChecked(hDlg,IDC_AUTOCLIPBYTAB);
NewOption.CursorEdit=SendDlgItemMessage(hDlg,IDC_CBCURSOREDIT,CB_GETCURSEL,0,0);
NewOption.bSmartSpace=IsDlgButtonChecked(hDlg,IDC_CHKSMARTSPACE);
return TRUE;
}
break;
}
return FALSE;
}
¿É¼ÇµéÀÌ º¯°æµÉ ¶§ÀÇ Ã³¸®´Â ApplyNow¿¡ ÀÛ¼ºÇÏ°í »õ·Î Ãß°¡µÈ ¿É¼Çµµ ApiEdit¿¡ Àû¿ëÇØ¾ß ÇϹǷΠSetSetting¿¡µµ ºñ½ÁÇÑ Äڵ尡 Ãß°¡µÈ´Ù.
void ApplyNow()
{
....
if (lstrcmp(Option.logfont.lfFaceName,NewOption.logfont.lfFaceName) != 0 ||
Option.logfont.lfHeight != NewOption.logfont.lfHeight ||
Option.logfont.lfWeight != NewOption.logfont.lfWeight ||
Option.logfont.lfItalic != NewOption.logfont.lfItalic ) {
tFont=NewOption.logfont;
hdc=GetDC(NULL);
tFont.lfHeight=NewOption.logfont.lfHeight*GetDeviceCaps(hdc,LOGPIXELSY)/72;
tFont.lfWidth=0;
ReleaseDC(NULL,hdc);
pSi->Ae.SetFont(&tFont);
}
....
if (Option.nWheel != NewOption.nWheel) {
pSi->Ae.SetWheel(NewOption.nWheel);
}
if (Option.nCtrlWheel != NewOption.nCtrlWheel) {
pSi->Ae.SetCtrlWheel(NewOption.nCtrlWheel);
}
if (Option.nShiftWheel != NewOption.nShiftWheel) {
pSi->Ae.SetShiftWheel(NewOption.nShiftWheel);
}
if (Option.nCtrlShiftWheel != NewOption.nCtrlShiftWheel) {
pSi->Ae.SetCtrlShiftWheel(NewOption.nCtrlShiftWheel);
}
if (Option.bSwapDragButton != NewOption.bSwapDragButton) {
pSi->Ae.SetSwapDragButton(NewOption.bSwapDragButton);
}
if (Option.CharExtra != NewOption.CharExtra) {
pSi->Ae.SetCharExtra(NewOption.CharExtra);
}
if (Option.WordExtra != NewOption.WordExtra) {
pSi->Ae.SetWordExtra(NewOption.WordExtra);
}
if (Option.CharRatio != NewOption.CharRatio) {
pSi->Ae.SetCharRatio(NewOption.CharRatio);
}
if (Option.CursorEdit != NewOption.CursorEdit) {
pSi->Ae.SetCursorEdit(NewOption.CursorEdit);
}
if (Option.bSmartSpace != NewOption.bSmartSpace) {
pSi->Ae.SetSmartSpace(NewOption.bSmartSpace);
}
hChild=GetWindow(hChild,GW_HWNDNEXT);
}
....
void SetSetting(CApiEdit &Ae)
{
....
if (Option.nWheel != Ori.nWheel) {
Ae.SetWheel(Option.nWheel);
}
if (Option.nCtrlWheel != Ori.nCtrlWheel) {
Ae.SetCtrlWheel(Option.nCtrlWheel);
}
if (Option.nShiftWheel != Ori.nShiftWheel) {
Ae.SetShiftWheel(Option.nShiftWheel);
}
if (Option.nCtrlShiftWheel != Ori.nCtrlShiftWheel) {
Ae.SetCtrlShiftWheel(Option.nCtrlShiftWheel);
}
if (Option.bSwapDragButton != Ori.bSwapDragButton) {
Ae.SetSwapDragButton(Option.bSwapDragButton);
}
if (Option.CharExtra != Ori.CharExtra) {
Ae.SetCharExtra(Option.CharExtra);
}
if (Option.WordExtra != Ori.WordExtra) {
Ae.SetWordExtra(Option.WordExtra);
}
if (Option.CharRatio != Ori.CharRatio) {
Ae.SetCharRatio(Option.CharRatio);
}
if (Option.CursorEdit != Ori.CursorEdit) {
Ae.SetCursorEdit(Option.CursorEdit);
}
if (Option.bSmartSpace != Ori.bSmartSpace) {
Ae.SetSmartSpace(Option.bSmartSpace);
}
}
±Û²Ã À̸§, Å©±â»Ó¸¸ ¾Æ´Ï¶ó ±½°Ô, ÀÌÅŸ¯ ¿É¼ÇÀÌ º¯°æµÇ¾îµµ ±Û²ÃÀ» ´Ù½Ã ¸¸µé¾î¾ß ÇÑ´Ù. »ý¼ºÇÒ ±Û²ÃÀÇ Á¤º¸ÀÎ logfontÀÇ ¸â¹öµéÀÌ ¼öÁ¤µÇ¹Ç·Î SetFont µîÀÇ ÇÔ¼ö´Â ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¸¶Áö¸·À¸·Î ´ëÈ»óÀÚÀÇ ÄÁÆ®·Ñ °ü¸®¸¦ À§ÇÑ Äڵ带 ÀÛ¼ºÇÑ´Ù.
void AdjustDlgUI(int Page,HWND hDlg)
{
switch (Page) {
....
case 1:
if (SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETCURSEL,0,0)==0) {
EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_EDCHARRATIO),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_SPINCHARRATIO),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_CHKBOLD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_CHKITALIC),FALSE);
} else {
EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_EDCHARRATIO),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_SPINCHARRATIO),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_CHKBOLD),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_CHKITALIC),TRUE);
}
break;
½Ã½ºÅÛ ±Û²ÃÀÏ ¶§´Â ÀåÆò, ±½°Ô, ±â¿ïÀÓ ¿É¼ÇÀ» ¼±ÅÃÇÒ ¼ö ¾øÀ¸¹Ç·Î °ü·Ã ÄÁÆ®·ÑÀ» »ç¿ë±ÝÁöÇÑ´Ù.