¹®´Ü À籸¼º ±â´ÉÀ̶õ ÅØ½ºÆ®ÀÇ ¹®´ÜÀ» º¸±â ÁÁ°í Àб⠽±°Ô Àç¹è¿ÇÏ´Â ±â´ÉÀÌ´Ù. ÅØ½ºÆ® ÆÄÀÏÀº º°µµÀÇ ¼½ÄÀÌ ¾ø±â ¶§¹®¿¡ ÁÖ·Î °³Çà ÄÚµå¿Í °ø¹éÀ» Àç¹èÄ¡ÇØ¼ ¿øÇÏ´Â ¹®´ÜÀÇ ¸ð¾çÀ» ¸¸µé¾î³½´Ù. ¿öµå ÇÁ·Î¼¼¼ÀÇ ¹®´Ü ¼Ó¼º Á¶Á¤ ±â´É°ú´Â ´Ù¸¥µ¥ ¿öµå ÇÁ·Î¼¼¼´Â ¹®´ÜÀÇ ³»¿ëÀº ±×´ë·Î À¯ÁöÇÑ Ã¤·Î ¼½Ä Á¤º¸µé¸¸ Á¶ÀÛÇÏÁö¸¸ ÅØ½ºÆ® ÆíÁý±â´Â ¿øÇÏ´Â ¸ð¾çÀ» ¸¸µé±â À§ÇØ ¹®´ÜÀÇ ³»¿ëÀ» º¯°æÇØ¾ß ÇÑ´Ù.
À籸¼º ÀýÂ÷´Â ¾ÆÁÖ ¿ø·ÐÀûÀε¥ ¿ø·¡ÀÇ ¹®´ÜÀ» ¹öÆÛ¿¡ ÀÐ°í »ç¿ëÀÚÀÇ Áö½Ã´ë·Î Á¶ÀÛÇÑ ÈÄ ´Ù½Ã ½á ³Ö´Â °ÍÀÌ´Ù. ÀÌ ½Ç½ÀÀº 1±ÇÀÇ °í±Þ ÆíÁý ±â´É°ú ±¸Çö ¹æ¹ýÀÌ °ÅÀÇ À¯»çÇϹǷΠ°í±Þ ÆíÁý Äڵ带 Àß ¾Ë°í ÀÖ´Ù¸é ÀÌÇØÇϱ⠽±´Ù. ¸¸¾à ±×·¸Áö ¾Ê´Ù¸é 1±ÇÀÇ °í±Þ ÆíÁý Äڵ带 ¸ÕÀú º¹½ÀÇÑ ÈÄ ºÐ¼®ÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ¹®´ÜÀ» À籸¼ºÇÏ´Â ¹æ¹ý¿¡´Â ¿©·¯ °¡Áö°¡ Àִµ¥ °¢ µ¿ÀÛº°·Î ÆäÀÌÁö¸¦ °¡Áö´Â ÅÇ ´ëÈ»óÀÚ¸¦ ±¸¼ºÇϱâ·Î ÇÑ´Ù. ºñ½Á ºñ½ÁÇÑ ÄÚµåµéÀÌ ¹Ýº¹µÇ¹Ç·Î ¸î °¡Áö °øÅëÀûÀÎ Äڵ带 ¹Ì¸® ¸¸µé¾î ³õ´Â °ÍÀÌ È¿À²ÀûÀÌ´Ù. ´ÙÀ½ ±¸Á¶Ã¼¿Í ¹®´Ü À籸¼º ÇÔ¼ö ¿øÇüÀ» Dangeun.h¿¡ ¼±¾ðÇÑ´Ù.
struct SParaOption
{
SParaOption();
int startpage;
int p1_Type;
TCHAR p1_szRep[32];
int p1_MultiEnter;
int p2_Type;
int p2_nChar;
int p2_nPixel;
BOOL p2_bIndent;
int p2_nIndent;
BOOL p2_bRemoveSpace;
int p3_Orient;
int p3_Type;
int p3_nChar;
int p3_nPixel;
int p4_Type;
BOOL p4_Case;
BOOL p4_Unique;
int p5_Type;
int p5_Num;
};
BOOL CALLBACK ParaDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK Para1Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK Para2Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK Para3Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK Para4Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL CALLBACK Para5Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
¹®´Ü À籸¼º ¸í·ÉÀÇ ¿É¼ÇµéÀÌ´Ù. ´ëÈ»óÀÚ¸¦ ¿ ¶§¸¶´Ù ¿É¼ÇµéÀÌ ÃʱâÈµÇ¸é ºÒÆíÇϹǷΠÇÑ ¹ø ¼±ÅÃÇØ ³õÀº ¿É¼ÇÀº ±¸Á¶Ã¼¿¡ ±â¾ïÇÑ´Ù. ´Ü, ÀÌ °ªÀ» ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÏÁö´Â ¾ÊÀ¸¹Ç·Î ¸Å¹ø ½ÇÇàµÉ ¶§¸¶´Ù ÃʱâȵȴÙ. ±¸Á¶Ã¼¸¦ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇϸé Çѹø ¼±ÅÃÇÑ ¿É¼ÇÀÌ °è¼Ó ±â¾ïµÇÁö¸¸ ±»ÀÌ ±×·¸°Ô±îÁö ÇÒ ÇÊ¿ä´Â ¾øÀ» °Í °°´Ù. Dangeun.cpp¿¡ »ý¼ºÀÚ Äڵ带 ÀÛ¼ºÇÏ¿© ¹«³ÇÑ °ªÀ¸·Î ÃʱâÈÇÑ´Ù.
HWND hParaTab;
SParaOption ParaOption;
....
SParaOption::SParaOption()
{
startpage=0;
p1_Type=1;
lstrcpy(p1_szRep,"");
p1_MultiEnter=0;
p2_Type=0;
p2_nChar=80;
p2_nPixel=640;
p2_bIndent=FALSE;
p2_nIndent=4;
p2_bRemoveSpace=TRUE;
p3_Orient=0;
p3_Type=1;
p3_nChar=80;
p3_nPixel=640;
p4_Type=0;
p4_Case=FALSE;
p4_Unique=FALSE;
p5_Type=1;
p5_Num=1;
}
ÅÇ ´ëÈ»óÀÚÀÇ ÅÇ ÄÁÆ®·Ñ°ú ¿É¼Ç ±¸Á¶Ã¼´Â Àü¿ªÀ¸·Î ¼±¾ðÇÑ´Ù. ¹®´ÜÀ» À籸¼ºÇÏ´Â ÁÖü´Â ÅØ½ºÆ® ºäÀÌ´Ù. ÅØ½ºÆ® ºä¿¡ °¢ ÆäÀÌÁöÀÇ ¿äûÀ» ó¸®ÇÏ´Â ´ÙÀ½ ¸â¹ö ÇÔ¼öµéÀ» ¼±¾ðÇÑ´Ù.
class CApiEditText : public CWindow
{
....
virtual void SelectParas(int &SelFirst,int &SelSecond,int &st,int &ed);
virtual void MergePara(int MultiEnterType,TCHAR *szRep);
virtual void SplitPara(int type, int num, BOOL bRemoveSpace, int iIndent);
virtual void AlignPara(int orient, int type, int num);
virtual void SortPara(int asc, BOOL Case, BOOL Unique);
virtual void ArrangeEmptyPara(int type, int num);
};
¹®´ÜÀ» Á¶ÀÛÇÏ´Â ÀýÂ÷´Â ´ëü·Î ºñ½ÁÇѵ¥ 1±Ç¿¡¼ °í±Þ ÆíÁý ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¶§ ¾ê±âÇßµíÀÌ ÄÚ³¢¸¦ ³ÃÀå°í¿¡ ³Ö´Â ¹æ¹ý°ú À¯»çÇÏ´Ù. ±×·¡¼ °øÅëµÇ´Â Äڵ带 »Ì¾Æ³»¾î ÇÔ¼ö ¹× ¸ÅÅ©·Î·Î ¹Ì¸® ¼±¾ðÇØ µÐ´Ù. ApiEditText.cpp¿¡ ´ÙÀ½ ÇÔ¼ö ¹× ¸ÅÅ©·Î¸¦ ¼±¾ðÇÑ´Ù.
// ¼±ÅÃµÈ ¹®´ÜÀÇ ½ÃÀÛ, ³¡ ¿ÀÇÁ¼ÂÀ» ±¸ÇØÁØ´Ù.
void CApiEditText::SelectParas(int &SelFirst,int &SelSecond,int &st,int &ed)
{
int pr1,pr2,pc;
int Line;
// ¼±Åà ¿µ¿ªÀÌ ¾øÀ¸¸é ¹®¼ Àüü¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.
if (SelStart==SelEnd) {
SelFirst=0;
SelSecond=pFrame->doclen;
} else {
SelFirst=min(SelStart,SelEnd);
SelSecond=max(SelStart,SelEnd);
}
// ½ÃÀÛ ¹®´ÜÀÇ Ã¹ ¿ÀÇÁ¼Â
GetParaFromOff(SelFirst,pr1,pc);
Line=GetParaFirstLine(pr1);
st=pLine[Line].Start;
// ³¡ ¹®´ÜÀÇ ³¡ ¿ÀÇÁ¼Â. ¼±Åà ³¡ÀÌ ¹®´Ü ¼±µÎÀ̸é ÀÌ ¹®´ÜÀº Á¦¿ÜµÈ´Ù.
GetParaFromOff(SelSecond,pr2,pc);
Line=GetParaFirstLine(pr2);
if (SelSecond==pLine[Line].Start) {
pr2--;
}
Line=GetParaLastLine(pr2);
ed=pLine[Line].End;
}
#define BEFOREARRANGEPARA \
int SelFirst, SelSecond;\
int st,ed,nDiff=0;\
TCHAR *src,*dest,*s,*d;\
SelectParas(SelFirst,SelSecond,st,ed);\
s=src=(TCHAR *)malloc(ed-st);\
d=dest=(TCHAR *)malloc(ed-st);\
memcpy(src,pFrame->buf+st,ed-st);
#define ENDARRANGEPARA(grpid) \
SelSecond-=nDiff;\
pFrame->StartUndoGroup(grpid);\
Delete(st,ed-st);\
Insert(st,dest,d-dest);\
pFrame->EndUndoGroup();\
if (SelStart == SelEnd) {\
off=SelStart=SelEnd=st;\
} else if (SelStart < SelEnd) {\
off=SelEnd=SelSecond;\
SelStart=SelFirst;\
} else {\
off=SelEnd=SelFirst;\
SelStart=SelSecond;\
}\
if (pFrame->IsInDBCS(off)) off=pFrame->GetPrevOff(off);\
if (pFrame->IsInDBCS(SelStart)) SelStart=pFrame->GetPrevOff(SelStart);\
if (pFrame->IsInDBCS(SelEnd)) SelEnd=pFrame->GetPrevOff(SelEnd);\
Invalidate(st);\
SetCaret();\
free(src);\
free(dest);
SelectParas ÇÔ¼ö´Â ÇöÀç ¼±Åà ¿µ¿ªÀ¸·ÎºÎÅÍ À籸¼ºÇÒ ¹®´ÜÀÇ ¿ÀÇÁ¼Â ¹üÀ§¸¦ ±¸ÇÑ´Ù. Á¶±ÝÀÌ¶óµµ ¼±ÅÃµÈ ¹®´ÜÀÌ ¸ðµÎ ó¸® ´ë»óÀÌ¸ç ¼±Åà ¿µ¿ªÀÌ ¾øÀ¸¸é ¹®¼ Àüü°¡ ´ë»óÀÌ´Ù. ¹®´Ü À籸¼º ÇÔ¼öµéÀº ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ´ë»ó ¹®´ÜÀ» ¼±Á¤ÇÑ´Ù.
BEFOREARRANGEPARA´Â "³ÃÀå°í ¹®À» ¿¬´Ù"¿¡ ÇØ´çÇÏ´Â ÄÚµåÀÌ´Ù. Áö¿ª º¯¼ö ¼±¾ð ¹× ¸Þ¸ð¸® ÇÒ´ç µîÀ» º°µµÀÇ ÇÔ¼ö°¡ ´ë½Å ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¸ÅÅ©·Î·Î ¼±¾ðÇß´Ù. ENDARRANGEPARA´Â "³ÃÀå°í ¹®À» ´Ý´Â´Ù"¿¡ ÇØ´çÇÏ´Â ÄÚµåÀε¥ Á¶Á¤ °á°ú¸¦ ½á ³Ö°í ¼±Åà ¿µ¿ªÀ» »õ·Î ¼³Á¤ÇÏ°í ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. Á¶Á¤ °á°ú ¿ÀÇÁ¼ÂÀ̳ª ¼±Åÿµ¿ªÀÌ DBCSÀÇ Áß°£¿¡ °ÉÄ¡Áö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â »ç¿ëÁßÀÎ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇϴµ¥ Àç»ç¿ë °¡´ÉÇÑ ÀϹÝÀûÀÎ ÇÔ¼öÀ̹ǷΠAeUtil.cpp¿¡ ÀÛ¼ºÇÑ´Ù.
void ReallocBuf(TCHAR *&mem,TCHAR *&now,int Require,int Extra)
{
unsigned toff;
toff=now-mem;
if (_msize(mem) < toff+Require) {
mem=(TCHAR *)realloc(mem,_msize(mem)+Extra);
now=mem+toff;
}
}
´Ü¼øÈ÷ reallocÇÏ´Â °Í°ú´Â ´Þ¸® ÀÌ¹Ì ÀÌ ¸Þ¸ð¸®¸¦ °¡¸®Å°´Â Æ÷ÀÎÅͰ¡ ÀÖÀ» ¶§ ±× Æ÷ÀÎÅÍÀÇ À§Ä¡±îÁö °°ÀÌ Á¶Á¤ÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. Require¿¡ ÇÊ¿ä ¸Þ¸ð¸®·®À» ÁÖ°í Extra¿¡ Ãß°¡ ÇÒ´çÇÒ ¸Þ¸ð¸®¾çÀ» ÁÖ¸é µÈ´Ù.
¹®´Ü À籸¼º ÈÄ¿¡ ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» ¹Ì¸® ¿¹ÃøÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ½ÇÇàÁß¿¡ ¸Þ¸ð¸®¸¦ Ç×»ó ÀçÇÒ´çÇØ¾ß ÇÑ´Ù. µ¥ÀÌÅͰ¡ »èÁ¦µÉ ¶§´Â ¿øº» ¹®ÀÚ¿°ú °°Àº Á¤µµ¸é ÃæºÐÇϳª »ðÀ﵃ ¶§´Â ±× ¾çÀ» ¹Ì¸® ¾Ë ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î Á¤·Ä ±â´ÉÀÇ °æ¿ì 100¹®ÀÚÆø ±âÁØÀ¸·Î ¿ìÃø Á¤·ÄÇÏ¸é °¢ ÁÙ¿¡ ÃÖ´ë 99°³ÀÇ °ø¹éÀ» ½á ³Ö¾î¾ß Çϴµ¥ ÀÌ·¸°Ô µÇ¸é ÃÖ´ë 100¹èÀÇ ¸Þ¸ð¸®°¡ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.
¹®´Ü À籸¼º ¿É¼ÇµéÀº ÅÇ ´ëÈ»óÀÚÀÇ ÆäÀÌÁö·Î »ý¼ºµÈ´Ù. ¸®¼Ò½º¿¡´Â ¸ÞÀÎ ´ëÈ»óÀÚ¿Í °¢ ÆäÀÌÁö¸¦ ±¸¼ºÇÏ´Â ´ëÈ»óÀÚµéÀÌ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Ù. ÅÇ ´ëÈ»óÀÚÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
BOOL CALLBACK ParaDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
TCITEM tie;
static HWND hTabDlg;
HWND hActive;
SInfo *pSi;
TCHAR szTemp[256];
int iTemp;
RECT art,drt,irt;
switch(iMessage) {
case WM_INITDIALOG:
MoveToParentCenter(hDlg);
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
pSi=(SInfo *)GetWindowLong(hActive,0);
GetWindowRect(pSi->Ae.GetActiveView()->hWnd,&art);
GetWindowRect(hDlg,&drt);
IntersectRect(&irt,&art,&drt);
if (!IsRectEmpty(&irt)) {
// ¿ÞÂÊ¿¡ °ø°£ÀÌ ÀÖÀ¸¸é ¿ÞÂÊ¿¡ ¸ÕÀú ºÙ¿© º»´Ù.
if (art.left > (drt.right-drt.left)) {
drt.left=art.left-(drt.right-drt.left);
// ¾Æ´Ï¸é ¿À¸¥ÂÊ¿¡ ºÙÀÌµÇ È¸éÀ» ¹þ¾î³ªÁö´Â ¾Êµµ·Ï ÇÑ´Ù.
} else {
drt.left=min(art.right,GetSystemMetrics(SM_CXSCREEN)-(drt.right-drt.left));
}
SetWindowPos(hDlg,HWND_NOTOPMOST,drt.left,drt.top,0,0,SWP_NOSIZE);
}
hParaTab=GetDlgItem(hDlg,IDC_PARATAB);
tie.mask=TCIF_TEXT;
tie.pszText="º´ÇÕ";
TabCtrl_InsertItem(hParaTab,0,&tie);
tie.pszText="ºÐÇÒ";
TabCtrl_InsertItem(hParaTab,1,&tie);
tie.pszText="¼öÆò Á¤·Ä";
TabCtrl_InsertItem(hParaTab,2,&tie);
tie.pszText="Å©±â¼ø Á¤·Ä";
TabCtrl_InsertItem(hParaTab,3,&tie);
tie.pszText="ºóÁÙ Á¶Á¤";
TabCtrl_InsertItem(hParaTab,4,&tie);
// ÅÇÀ» ¹Ù²ãµµ ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»Áö ¾ÊÀ¸¹Ç·Î Á÷Á¢ º¸³»¾ß ÇÑ´Ù.
TabCtrl_SetCurSel(hParaTab,ParaOption.startpage);
SendMessage(hDlg,WM_USER+1,ParaOption.startpage,0);
return TRUE;
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code) {
case TCN_SELCHANGE:
SendMessage(hDlg,WM_USER+1,TabCtrl_GetCurSel(hParaTab),0);
break;
}
return TRUE;
case WM_USER+1:
if (hTabDlg) {
DestroyWindow(hTabDlg);
}
switch (wParam) {
case 0:
hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA1),hDlg,Para1Proc);
break;
case 1:
hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA2),hDlg,Para2Proc);
break;
case 2:
hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA3),hDlg,Para3Proc);
break;
case 3:
hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA4),hDlg,Para4Proc);
break;
case 4:
hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA5),hDlg,Para5Proc);
break;
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
case IDC_BTNAPPLY:
hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);
pSi=(SInfo *)GetWindowLong(hActive,0);
switch (TabCtrl_GetCurSel(hParaTab)) {
case 0:
ParaOption.p1_MultiEnter=SendDlgItemMessage(hTabDlg,IDC_P1_CB1,CB_GETCURSEL,0,0);
if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA1)==BST_CHECKED) {
ParaOption.p1_Type=0;
lstrcpy(szTemp,"");
}
if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA2)==BST_CHECKED) {
ParaOption.p1_Type=1;
lstrcpy(szTemp," ");
}
if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA3)==BST_CHECKED) {
ParaOption.p1_Type=2;
lstrcpy(szTemp,"\t");
}
if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA4)==BST_CHECKED) {
ParaOption.p1_Type=3;
GetDlgItemText(hTabDlg,IDC_P1_ED1,ParaOption.p1_szRep,32);
lstrcpy(szTemp,ParaOption.p1_szRep);
}
pSi->Ae.GetActiveView()->MergePara(ParaOption.p1_MultiEnter,szTemp);
break;
case 1:
if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA1)==BST_CHECKED) {
ParaOption.p2_Type=0;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA2)==BST_CHECKED) {
ParaOption.p2_Type=1;
ParaOption.p2_nChar=iTemp=GetDlgItemInt(hTabDlg,IDC_P2_ED1,NULL,FALSE);
if (ParaOption.p2_nChar < 2) {
MessageBox(hDlg,"¹®ÀÚ¼ö´Â ÃÖ¼ÒÇÑ 2ÀÚ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);
return TRUE;
}
}
if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA3)==BST_CHECKED) {
ParaOption.p2_Type=2;
ParaOption.p2_nPixel=iTemp=GetDlgItemInt(hTabDlg,IDC_P2_ED1,NULL,FALSE);
if (ParaOption.p2_nPixel < 100) {
MessageBox(hDlg,"È¸éÆøÀº ÃÖ¼ÒÇÑ 100Çȼ¿ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);
return TRUE;
}
}
if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA4)==BST_CHECKED) {
ParaOption.p2_Type=3;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P2_CHK1)==BST_CHECKED) {
ParaOption.p2_bIndent=TRUE;
ParaOption.p2_nIndent=GetDlgItemInt(hTabDlg,IDC_P2_ED2,NULL,TRUE);
if (ParaOption.p2_nIndent > 32 || ParaOption.p2_nIndent < -32) {
MessageBox(hDlg,"µé¿©¾²±â(³»¾î¾²±â)´Â -32~32»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);
return TRUE;
}
} else {
ParaOption.p2_bIndent=FALSE;
}
ParaOption.p2_bRemoveSpace=!(IsDlgButtonChecked(hTabDlg,IDC_P2_CHK2)==BST_CHECKED);
pSi->Ae.GetActiveView()->SplitPara(ParaOption.p2_Type,iTemp,ParaOption.p2_bRemoveSpace,
ParaOption.p2_bIndent ? ParaOption.p2_nIndent:0);
break;
case 2:
if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA1)==BST_CHECKED) {
ParaOption.p3_Orient=0;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA2)==BST_CHECKED) {
ParaOption.p3_Orient=1;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA3)==BST_CHECKED) {
ParaOption.p3_Orient=2;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA4)==BST_CHECKED) {
ParaOption.p3_Type=1;
ParaOption.p3_nChar=iTemp=GetDlgItemInt(hTabDlg,IDC_P3_ED1,NULL,FALSE);
if (iTemp < 2) {
MessageBox(hDlg,"¹®ÀÚ¼ö´Â ÃÖ¼ÒÇÑ 2ÀÚ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);
return TRUE;
}
}
if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA5)==BST_CHECKED) {
ParaOption.p3_Type=2;
ParaOption.p3_nPixel=iTemp=GetDlgItemInt(hTabDlg,IDC_P3_ED1,NULL,FALSE);
if (iTemp < 100) {
MessageBox(hDlg,"È¸éÆøÀº ÃÖ¼ÒÇÑ 100Çȼ¿ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);
return TRUE;
}
}
pSi->Ae.GetActiveView()->AlignPara(ParaOption.p3_Orient,ParaOption.p3_Type,iTemp);
break;
case 3:
if (IsDlgButtonChecked(hTabDlg,IDC_P4_RA1)==BST_CHECKED) {
ParaOption.p4_Type=0;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P4_RA2)==BST_CHECKED) {
ParaOption.p4_Type=1;
}
ParaOption.p4_Case=IsDlgButtonChecked(hTabDlg,IDC_P4_CHK1);
ParaOption.p4_Unique=IsDlgButtonChecked(hTabDlg,IDC_P4_CHK2);
pSi->Ae.GetActiveView()->SortPara(ParaOption.p4_Type,ParaOption.p4_Case,ParaOption.p4_Unique);
break;
case 4:
if (IsDlgButtonChecked(hTabDlg,IDC_P5_RA1)==BST_CHECKED) {
ParaOption.p5_Type=0;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P5_RA2)==BST_CHECKED) {
ParaOption.p5_Type=1;
}
if (IsDlgButtonChecked(hTabDlg,IDC_P5_RA3)==BST_CHECKED) {
ParaOption.p5_Type=2;
}
ParaOption.p5_Num=GetDlgItemInt(hTabDlg,IDC_P5_ED1,NULL,FALSE);
if (ParaOption.p5_Num < 0 || ParaOption.p5_Num > 16) {
MessageBox(hDlg,"ºó ÁÙ ¼ö´Â 0~16»çÀÌ¿©¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);
return TRUE;
}
pSi->Ae.GetActiveView()->ArrangeEmptyPara(ParaOption.p5_Type,ParaOption.p5_Num);
break;
}
if (LOWORD(wParam)==IDOK) {
EndDialog(hDlg,IDOK);
}
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
}
return FALSE;
}
return FALSE;
}
WM_INITDIALOG¿¡¼ ´ëÈ»óÀÚÀÇ À§Ä¡¸¦ Á¶Á¤ÇÏ¿© ¼±ÅÃÇØ ³õÀº ¹®´ÜÀ» °¡¸®Áö ¾Ê°Ô ÇÑ´Ù. ¹®´ÜÀ» À籸¼ºÇϱâ À§Çؼ´Â ¸ÕÀú ¼±ÅÃÀ» Çϴµ¥ ÀÌ ¿µ¿ª¿¡ ´ëÈ»óÀÚ¿¡ °¡·Á º¸ÀÌÁö ¾ÊÀ¸¸é ±²ÀåÈ÷ Â¥Áõ³¯ °ÍÀÌ´Ù. ±×·¡¼ ¸ÕÀú ¿ÞÂÊÀ¸·Î ´ëÈ»óÀÚ¸¦ ¿Å°Ü º¸µÇ, °ø°£ÀÌ ºÎÁ·ÇÏ¸é ¿À¸¥ÂÊÀ¸·Î ºÙÀδÙ. ´Ü, ȸéÀ» ¹þ¾î³ªÁö´Â ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.
ÅÇ ÄÁÆ®·Ñ¿¡ 4°³ÀÇ ÆäÀÌÁö¸¦ Ãß°¡Çϰí startpage¸¦ ¼±ÅÃÇÑ´Ù. ÀÌ °ªÀÇ µðÆúÆ®´Â 0À̹ǷΠù ¹øÂ° ÆäÀÌÁö°¡ ¿¸®°ÚÁö¸¸ º¯°æ ÈÄ ´Ù½Ã ÀÌ ´ëÈ»óÀÚ¸¦ ¿ ¶§´Â ÃÖÈÄ ÀÛ¾÷ÇÏ´ø ÆäÀÌÁö°¡ ¿¸°´Ù. ÅÇÀ» º¯°æÇÑ´Ù°í ÇØ¼ ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»Áö ¾ÊÀ¸¹Ç·Î ÅÇ º¯°æ½Ã °ü·Ã ÆäÀÌÁö¸¦ »ý¼ºÇÏ´Â ÄÚµå´Â WM_USER+1¿¡ µ¶¸³½ÃÄÑ µÎ¾ú´Ù. TCN_SELCHANGE ¶Ç´Â óÀ½ ´ëÈ»óÀÚ¸¦ ¿ ¶§ WM_USER+1 ¸Þ½ÃÁö¸¦ º¸³» ù ÆäÀÌÁö¸¦ ¿¬´Ù.
Àû¿ë ¹öưÀ» ´©¸£¸é ÇöÀç ¿¸° ÆäÀÌÁöÀÇ ¿É¼ÇµéÀ» Àоî ApiEdit¿¡°Ô ¹®´Ü À籸¼ºÀ» ¿äûÇÑ´Ù. °¢ ÆäÀÌÁöÀÇ ¿É¼Ç Àǹ̿¡ ´ëÇØ¼´Â °³º°ÀûÀ¸·Î ¼³¸íÇÒ °ÍÀÌ´Ù. OnCommand¿¡¼ ÀÌ ´ëÈ»óÀÚ¸¦ È£ÃâÇÑ´Ù.
void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
case IDM_TOOL_PARA:
if (pView->ViewType != HEXA_VIEW)
DialogBox(g_hInst,MAKEINTRESOURCE(IDD_PARA),hWnd,ParaDlgProc);
break;
ÀÌ ÇÔ¼ö´Â Ȱ¼º ºä°¡ ¾øÀ¸¸é ¾Æ¿¹ È£ÃâµÇÁö ¾Ê´Â´Ù. ¶ÇÇÑ ¹®´ÜÀÇ °³³äÀÌ ¾ø´Â Çí»ç ºä¿¡´Â Àû¿ëÇÒ ¼ö ¾ø´Ù. ¾î¶² °æ¿ì¶óµµ Çí»ç ºä°¡ pLineÀ» ÂüÁ¶Çϵµ·Ï ³»¹ö·Á µÎ¸é ApiEdit´Â Áï»çÇÑ´Ù. ÅØ½ºÆ® ºä¿Í Çí»ç ºä·Î ºÐÇÒµÈ »óÅ¿¡¼ ÅØ½ºÆ® ºä°¡ Ȱ¼º »óÅÂÀ̸é ÀÌ ¸í·ÉÀ» ¾µ ¼ö ÀÖ´Ù. ¹®´Ü À籸¼º ¸í·ÉÀ» ¾ðÁ¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö OnInitMenu¿¡¼ °ü¸®ÇÑ´Ù.
void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (pView->ViewType==HEXA_VIEW) {
EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(hMenu,IDM_TOOL_PARA, MF_BYCOMMAND | MF_GRAYED);
} else {
EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_ENABLED);
EnableMenuItem(hMenu,IDM_TOOL_PARA, MF_BYCOMMAND | MF_ENABLED);
....
¿¸ðµå³ª °¡»ó À§Ä¡ ¿É¼Ç°ú ¸¶Âù°¡Áö·Î Çí»ç ºä¿¡¼´Â ¾µ ¼ö ¾ø´Ù.
º´ÇÕÀº µÑ ÀÌ»óÀÇ ¹®´ÜÀ» ÇϳªÀÇ ¹®´ÜÀ¸·Î ÇÕÄ¡´Â °ÍÀÌ´Ù. ¹®´ÜÀ» ³Ê¹« ª°Ô ÀÛ¼ºÇßÀ» °æ¿ì ÀÌ ¸í·ÉÀ¸·Î ¹®´ÜµéÀ» ÀüºÎ ÇÕÄ¥ ¼ö ÀÖ´Ù. ¹®´ÜÀº °³Çà ÄÚµå·Î ºÐ¸®µÈ ¹®ÀÚ¿µéÀ̹ǷΠÁß°£¿¡ ÀÖ´Â °³Çà Äڵ常 Á¦°ÅÇÏ¸é ½±°Ô º´ÇÕÇÒ ¼ö ÀÖ´Ù. À̶§ ¸î °¡Áö ¿É¼ÇÀ» Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¿ì¼± °³Çà Äڵ带 Á¦°ÅÇÏ´Â ´ë½Å °ø¹éÀ̳ª ÅÇ ¶Ç´Â ±âŸ ¹®ÀÚ·Î ´ëüÇÒ ¼ö Àִµ¥ °³Çà Äڵ带 Á¦°Å¸¸ ÇÏ¸é µÎ ¹®´ÜÀÌ µü ºÙ¾î ¹ö¸®¹Ç·Î ¿ø·¡ ºÐ¸®µÈ ¹®´ÜÀ̶ó´Â °ÍÀ» Ç¥½ÃÇϱâ À§ÇØ ´Ù¸¥ ¹®ÀÚ¿À» ³¢¿ö ³ÖÀ» ¼ö ÀÖ°Ô Çß´Ù. º¹¼ö °³ÀÇ °³Çà Äڵ尡 ¿¬ÀÌ¾î ³ª¿Ã ¶§ ÃÖÃÊÀÇ °³Çà ÄÚµå ´ÙÀ½¿¡ À̾îÁö´Â °³Çà Äڵ带 ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡µµ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
BOOL CALLBACK Para1Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
RECT prt;
switch(iMessage) {
case WM_INITDIALOG:
ParaOption.startpage=0;
GetWindowRect(hParaTab,&prt);
TabCtrl_AdjustRect(hParaTab,FALSE,&prt);
ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);
SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);
SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_ADDSTRING,0,(LPARAM)"¹«Á¶°Ç ´ëü");
SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_ADDSTRING,0,(LPARAM)"¹«Á¶°Ç »èÁ¦");
SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_ADDSTRING,0,(LPARAM)"¿ø·¡´ë·Î À¯Áö");
SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_SETCURSEL,ParaOption.p1_MultiEnter,0);
CheckRadioButton(hDlg,IDC_P1_RA1,IDC_P1_RA4,IDC_P1_RA1+ParaOption.p1_Type);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P1_RA1+ParaOption.p1_Type,BN_CLICKED),0);
SetDlgItemText(hDlg,IDC_P1_ED1,ParaOption.p1_szRep);
SendDlgItemMessage(hDlg,IDC_P1_ED1,EM_LIMITTEXT,31,0);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_P1_RA1:
case IDC_P1_RA2:
case IDC_P1_RA3:
EnableWindow(GetDlgItem(hDlg,IDC_P1_ED1),FALSE);
break;
case IDC_P1_RA4:
EnableWindow(GetDlgItem(hDlg,IDC_P1_ED1),TRUE);
break;
}
return FALSE;
}
return FALSE;
}
WM_INITDIALOG¿¡¼ ÀÚ½ÅÀÇ À§Ä¡¸¦ ÅÇ ÄÁÆ®·Ñ ¾ÈÀ¸·Î ¿Å±â°í SParaOption¿¡ ±â¾ïµÈ ¿É¼Ç´ë·Î ÄÁÆ®·ÑÀ» ÃʱâÈÇÑ´Ù. WM_COMMAND¿¡¼´Â ÄÁÆ®·ÑÀÇ Á¾¼Ó °ü°è¸¦ ó¸®Çϴµ¥ "±âŸ ¹®ÀÚ¿·Î ´ëü" ¶óµð¿À ¹Ú½º°¡ ¼±ÅõǾî¾ß ´ëü ¹®ÀÚ¿À» ÀԷ¹޴ ¿¡µðÆ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ApiEdit´Â °¢ ÆäÀÌÁöÀÇ ¹®´Ü Á¶Á¤ ¸í·ÉÀ» ó¸®ÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö°¡ º´ÇÕÀ» ó¸®ÇÑ´Ù.
void CApiEditText::MergePara(int MultiEnterType,TCHAR *szRep)
{
BEFOREARRANGEPARA
BOOL bPrevEnter=FALSE;
for (;;) {
ReallocBuf(dest,d,1024,2048);
if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {
if (MultiEnterType!=0 && bPrevEnter) {
if (MultiEnterType==1) {
s+=2;
nDiff+=2;
} else {
*d++=*s++;
*d++=*s++;
}
} else {
lstrcpy(d,szRep);
d+=lstrlen(szRep);
s+=2;
nDiff+=2-lstrlen(szRep);
bPrevEnter=TRUE;
}
} else {
if (IsDBCSLeadByte(*s)) {
*d++=*s++;
}
*d++=*s++;
bPrevEnter=FALSE;
}
if (s==src+ed-st) {
break;
}
}
ENDARRANGEPARA(28)
}
BEFOREARRAGEPARA ¸ÅÅ©·Î¿¡¼ ÇÊ¿äÇÑ Áö¿ª º¯¼ö¸¦ ¼±¾ðÇÏ°í ¹öÆÛ¸¦ ÇÒ´çÇϸç Á¶Á¤ ´ë»ó ¹üÀ§¸¦ Á¶»çÇÑ´Ù. ENDARRANGEPARA ¸ÅÅ©·Î´Â Á¶Á¤µÈ °á°ú¸¦ ¹®¼¿¡ ´Ù½Ã ±â·ÏÇÏ°í µÞ Á¤¸®¸¦ ÇÑ´Ù. ±×·¡¼ ¹®´Ü À籸¼º ÇÔ¼öµéÀº ÀÌ µÎ ¸ÅÅ©·ÎÀÇ Áß°£¿¡¼ st, ed »çÀÌÀÇ ¹®´ÜÀ» ¿É¼Ç¿¡ ¸Â°Ô Á¶Á¤ÇÏ¸é¼ nDiff¸¸ Àß °ü¸®ÇÏ¸é µÈ´Ù. ÀÌÈÄÀÇ ÇÔ¼öµéµµ ¸¶Âù°¡Áö ±¸Á¶·Î µÇ¾î ÀÖ´Ù. ÀÌÈÄ Ã³¸® ´ë»ó ¹öÆÛ¸¦ ¼øÈ¸ÇÏ¸é¼ °¢ ¹®ÀÚ¸¦ ÀÛ¾÷¿¡ ¸Â°Ô ó¸®ÇÑ´Ù.
°³Çà Äڵ尡 ¾Æ´Ï¸é ´Ü¼øÈ÷ º¹»çÇÑ´Ù. À̶§ *d++=*s++;·Î º¹»çÇØ¼´Â ¾ÈµÈ´Ù. DBCS ¹®ÀÚÀÎ °æ¿ì´Â ¹Ýµå½Ã 2¹ÙÀÌÆ®¸¦ ÇѲ¨¹ø¿¡ º¹»çÇØ¾ß Çϴµ¥ 0xb0,0x0d,0x0a°°Àº Àç¼ö¾øÀº ½ºÆ®¸²ÀÌ ÀÖÀ» °æ¿ì ÇÑ ¹ÙÀÌÆ®¾¿ º¹»çÇϸé 0xb0 º¹»ç ÈÄ °³Çà Äڵ尡 ÀÖ´Ù°í ¿ÀÆÇÀ» ÇÏ°Ô µÈ´Ù. °³Çà Äڵ带 ¸¸³ª¸é ´ëü ¹®ÀÚ¿·Î ¹Ù²ãÄ¡±â ÇÑ´Ù. ¿øº»°ú Á¶Á¤ÈÄÀÇ ¹®ÀÚ¿ÀÌ ´Þ¶óÁú ¶§´Â nDiff¿¡ ±× Â÷À̸¦ Àß ±â·ÏÇØ µÐ´Ù. º¹¼ö °³ÀÇ °³Çà Äڵ带 ¸¸³µÀ» ¶§´Â ÆäÀÌÁö¿¡¼ ¼±ÅÃÇÑ ¿É¼Ç¿¡ µû¶ó 󸮰¡ ´Þ¶óÁø´Ù. 0¹øÀ̰ųª óÀ½ ¸¸³ª´Â °æ¿ì´Â ¹«Á¶°Ç ´ëüÇÑ´Ù. 1¹øÀÎ °æ¿ì´Â ¹«Á¶°Ç »èÁ¦Çϰí 2¹øÀÎ °æ¿ì´Â ´Ü¼øÈ÷ º¹»çÇϱ⸸ ÇÏ¸é µÈ´Ù.
º´ÇÕÀº °³Çà Äڵ带 »èÁ¦ÇϹǷΠ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °æ¿ì´Â °ÅÀÇ ¾ø´Ù. ´Ü, ´ëü ¹®ÀÚ¿ÀÌ ±æ °æ¿ì´Â ¸Þ¸ð¸®°¡ ´õ ´Ã¾î³¯ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ëü ¹®ÀÚ¿ÀÌ "¿©±â¼ Çà¹Ù²Þ"À¸·Î ÁöÁ¤Çß´Ù¸é 2¹ÙÀÌÆ®ÀÇ °³Çà Äڵ尡 13¹ÙÀÌÆ®·Î ´Ã¾î³¯ °ÍÀÌ´Ù. ±×·¡¼ ·çÇÁ¸¦ µ¹ ¶§¸¶´Ù ReallocBuf ÇÔ¼ö·Î destÀÇ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÏÁö ¾ÊÀºÁö °Ë»çÇÏ¿© ÃÖ¼ÒÇÑ 1024¹ÙÀÌÆ®¸¸ÅÀÇ ¿©À¯¸¦ °¡Áöµµ·Ï Çß´Ù. ¾îÂ÷ÇÇ Àӽà ¸Þ¸ð¸®¶ó Á» ³Ë³ËÇÏ°Ô ÇÒ´çÇØµµ »ó°ü¾ø´Ù. ÀÌÈÄÀÇ ÇÔ¼öµé¿¡¼µµ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °¡´É¼ºÀÌ Á¶±ÝÀÌ¶óµµ ÀÖ´Â À§Ä¡¿¡¼ ¼ö½Ã·Î ReallocBuf ÇÔ¼ö¸¦ È£ÃâÇØ´í´Ù.
ºÐÇÒÀº Å« ¹®´ÜÀ» ÀÏÁ¤ÇÑ ±âÁØ¿¡ µû¶ó ¿©·¯ °³ÀÇ ¹®´ÜÀ¸·Î Âɰ³´Â °ÍÀÌ´Ù. ºÐÇÒ ¹æ¹ýÀÌ ¾ÆÁÖ ´Ù¾çÇϱ⠶§¹®¿¡ Äڵ嵵 º´ÇÕº¸´Ù ´õ º¹ÀâÇÏ´Ù. ºÐÇÒ ±âÁØ¿¡ ¸Â´Â À§Ä¡¿¡ °³Çà Äڵ带 »ðÀÔÇϸé ÀÌ À§Ä¡ÀÇ ¾Õ µÚ ¹®ÀÚ¿ÀÌ µ¶¸³µÈ ¹®´ÜÀ¸·Î ºÐÇҵȴÙ. ÆäÀÌÁö ´ëÈ»óÀÚÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
BOOL CALLBACK Para2Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
RECT prt;
switch(iMessage) {
case WM_INITDIALOG:
ParaOption.startpage=1;
GetWindowRect(hParaTab,&prt);
TabCtrl_AdjustRect(hParaTab,FALSE,&prt);
ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);
SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);
CheckRadioButton(hDlg,IDC_P2_RA1,IDC_P2_RA4,IDC_P2_RA1+ParaOption.p2_Type);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_RA1+ParaOption.p2_Type,BN_CLICKED),0);
SendDlgItemMessage(hDlg,IDC_P2_SPIN2,UDM_SETRANGE,0,MAKELPARAM(32,-32));
SetDlgItemInt(hDlg,IDC_P2_ED2,ParaOption.p2_nIndent,TRUE);
CheckDlgButton(hDlg,IDC_P2_CHK1,(ParaOption.p2_bIndent ? BST_CHECKED:BST_UNCHECKED));
CheckDlgButton(hDlg,IDC_P2_CHK2,(ParaOption.p2_bRemoveSpace ? BST_UNCHECKED:BST_CHECKED));
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_CHK1,BN_CLICKED),0);
return TRUE;
case WM_COMMAND:
// ¸¶Ä§Ç¥, ȸé´ë·Î ÀÏ ¶§´Â µé¿©¾²±â ÇÒ ¼ö ¾øÀ½. ¹®ÀÚ¼ö³ª Çȼ¿¼ö¸¦ ÀÔ·ÂÇÒ Çʿ䵵 ¾øÀ½
if (LOWORD(wParam)==IDC_P2_RA1 || LOWORD(wParam)==IDC_P2_RA4) {
CheckDlgButton(hDlg,IDC_P2_CHK1,BST_UNCHECKED);
EnableWindow(GetDlgItem(hDlg,IDC_P2_CHK1),FALSE);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_CHK1,BN_CLICKED),0);
EnableWindow(GetDlgItem(hDlg,IDC_P2_ED1),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_P2_SPIN1),FALSE);
} else if (LOWORD(wParam)==IDC_P2_RA2 || LOWORD(wParam)==IDC_P2_RA3) {
EnableWindow(GetDlgItem(hDlg,IDC_P2_CHK1),TRUE);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_CHK1,BN_CLICKED),0);
EnableWindow(GetDlgItem(hDlg,IDC_P2_ED1),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_P2_SPIN1),TRUE);
}
switch (LOWORD(wParam)) {
case IDC_P2_RA2:
SetDlgItemInt(hDlg,IDC_P2_ED1,ParaOption.p2_nChar,FALSE);
SetDlgItemText(hDlg,IDC_P2_ST1,"¹®ÀÚ");
SendDlgItemMessage(hDlg,IDC_P2_SPIN1,UDM_SETRANGE,0,MAKELPARAM(1024,2));
break;
case IDC_P2_RA3:
SetDlgItemInt(hDlg,IDC_P2_ED1,ParaOption.p2_nPixel,FALSE);
SetDlgItemText(hDlg,IDC_P2_ST1,"Çȼ¿");
SendDlgItemMessage(hDlg,IDC_P2_SPIN1,UDM_SETRANGE,0,MAKELPARAM(4096,100));
break;
case IDC_P2_CHK1:
if (IsDlgButtonChecked(hDlg,IDC_P2_CHK1)==BST_CHECKED) {
EnableWindow(GetDlgItem(hDlg,IDC_P2_ED2),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_P2_SPIN2),TRUE);
CheckDlgButton(hDlg,IDC_P2_CHK2,BST_UNCHECKED);
EnableWindow(GetDlgItem(hDlg,IDC_P2_CHK2),FALSE);
} else {
EnableWindow(GetDlgItem(hDlg,IDC_P2_ED2),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_P2_SPIN2),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_P2_CHK2),TRUE);
}
break;
}
return FALSE;
}
return FALSE;
}
ÄÁÆ®·ÑÀ» °ü¸®ÇÏ´Â ±ÔÄ¢ÀÌ Á¶±Ý º¹ÀâÇÏ´Ù. ¹®ÀÚ¼ö³ª Çȼ¿¼ö·Î ºÐÇÒÇÒ ¶§¸¸ µé¿©¾²±â¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç µé¿©¾²±â¸¦ ÇÒ ¶§´Â ¹®´Ü óÀ½ÀÇ °ø¹éÀ» ¹«Á¶°Ç Á¦°ÅÇØ¾ß ÇÑ´Ù. ±×·¡¼ °¢ ¿É¼Ç°£ÀÇ Á¾¼Ó °ü°è¸¦ ó¸®ÇÏ´Â Äڵ尡 Á¶±Ý ¸¹´Ù. ¹®´ÜÀ» ºÐÇÒÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.
void CApiEditText::SplitPara(int type, int num, BOOL bRemoveSpace, int iIndent)
{
BEFOREARRANGEPARA
int acwidth;
int sl,el,l;
int *arWrap,idx;
int i;
switch (type) {
case 0:
for (;;) {
ReallocBuf(dest,d,1024,2048);
if (IsDBCSLeadByte(*s)) {
*d++=*s++;
}
*d++=*s++;
if (s[-1]=='.') {
*d++='\r';
*d++='\n';
nDiff-=2;
// ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀº °Ç³Ê ¶Ü
if (bRemoveSpace) {
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
}
}
if (s==src+ed-st) {
break;
}
}
break;
// Áß°£¿¡ ¹®´Ü ±¸Á¶°¡ ¹Ù²î±â ¶§¹®¿¡ pLine ¹è¿Àº ÂüÁ¶ÇÒ ¼ö ¾øÀ½
case 1:
case 2:
ReallocBuf(dest,d,1024,2048);
acwidth=0;
// ¹®´Ü óÀ½Àº Ç×»ó µé¿©¾²±â ÇÑ´Ù.
if (iIndent > 0) {
for (i=0;i<iIndent;i++) {
*d++=' ';
nDiff--;
if (type==1) {
acwidth++;
} else {
acwidth+=GetCharWidth(" ",1);
}
}
// °ø¹éÀº °Ç³Ê ¶Ù¾î¾ß ÇÑ´Ù.
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
}
for (;;) {
ReallocBuf(dest,d,1024,2048);
if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {
*d++=*s++;
*d++=*s++;
acwidth=0;
// µé¿©¾²±â ÇÑ´Ù.
if (iIndent > 0) {
for (i=0;i<iIndent;i++) {
*d++=' ';
nDiff--;
if (type==1) {
acwidth++;
} else {
acwidth+=GetCharWidth(" ",1);
}
}
// °ø¹éÀº °Ç³Ê ¶Ù¾î¾ß ÇÑ´Ù. µé¿©¾²±â¸¦ ÇÏÁö ¾ÊÀ» ¶§´Â ±×³É µÐ´Ù
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
}
} else {
// ÇöÀç ¹®ÀÚ±îÁö ´õÇßÀ» ¶§ÀÇ ÆøÀ» °è»êÇÑ´Ù.
if (type==1) {
if (IsDBCSLeadByte(*s)) {
acwidth+=2;
} else {
acwidth++;
}
} else {
if (*s=='\t') {
acwidth=(acwidth/TabSize+1)*TabSize;
} else {
if (IsDBCSLeadByte(*s)) {
acwidth+=GetCharWidth(s,2);
} else {
acwidth+=GetCharWidth(s,1);
}
}
}
// ÆøÀ» ³Ñ¾úÀ» ¶§ ºÐÇÒ. °°À» ¶§´Â ºÐÇÒÇÏÁö ¾ÊÀ½
if (acwidth > num) {
*d++='\r';
*d++='\n';
acwidth=0;
nDiff-=2;
// »ðÀÔµÈ °³ÇàÄÚµå ´ÙÀ½ÀÇ °ø¹éÀº °Ç³Ê ¶Ü
if (bRemoveSpace) {
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
}
// ³»¾î ¾²±âÇÑ´Ù.
if (iIndent < 0) {
for (i=0;i>iIndent;i--) {
*d++=' ';
nDiff--;
if (type==1) {
acwidth++;
} else {
acwidth+=GetCharWidth(" ",1);
}
}
}
// ³ÑÁö ¾Ê¾ÒÀ¸¸é ¹®ÀÚ º¹»ç
} else {
if (IsDBCSLeadByte(*s)) {
*d++=*s++;
}
*d++=*s++;
}
}
if (s==src+ed-st) {
break;
}
}
break;
case 3:
GetRCFromOff(st,sl,l);
GetRCFromOff(ed,el,l);
arWrap=(int *)malloc((el-sl)*sizeof(int));
// elÁÙÀº ¹®´Ü ³¡À̹ǷΠº¼ ÇÊ¿ä¾øÀ½. l+1Àº Ç×»ó À¯È¿ÇÔ
for (l=sl,idx=0;l<el;l++) {
if (pLine[l+1].nLine) {
arWrap[idx]=pLine[l].End;
idx++;
}
}
for (idx=0;;) {
ReallocBuf(dest,d,1024,2048);
// ÇöÀç ¿ÀÇÁ¼ÂÀÌ ÀÚµ¿ °³ÇàµÈ ¿ÀÇÁ¼Â°ú °°À¸¸é
if (s-src+st == arWrap[idx]) {
*d++='\r';
*d++='\n';
nDiff-=2;
idx++;
// ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀº °Ç³Ê ¶Ü
if (bRemoveSpace) {
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
}
} else {
if (IsDBCSLeadByte(*s)) {
*d++=*s++;
}
*d++=*s++;
}
if (s==src+ed-st) {
break;
}
}
free(arWrap);
break;
}
ENDARRANGEPARA(29)
}
ÄÉÀ̽º º°·Î ºÐ¼®ÇØ º¸ÀÚ.
¸¶Ä§Ç¥¸¦ ¸¸³¯ ¶§¸¶´Ù °³Çà Äڵ带 »ðÀÔÇϱ⸸ ÇÏ¸é µÈ´Ù. °³ÇàµÇ±â Á÷ÀüÀÇ ¹®ÀÚ±îÁö º¹»çÇØ¾ß ÇϹǷΠÀÏ´Ü ¹®ÀÚ¸¦ ¸ÕÀú º¹»çÇÑ ÈÄ ¹æ±Ý º¹»çÇÑ ¹®ÀÚ°¡ ¸¶Ä§Ç¥ÀÎÁö º»´Ù. DBCSÀÏ °æ¿ì´Â ¸¶Ä§Ç¥ÀÏ ¸®°¡ ¾øÀ¸¹Ç·Î °è¼Ó ·çÇÁ¸¦ µ¹±â¸¸ ÇÏ¸é µÈ´Ù. DBCSÀÎ °æ¿ìµµ ¸¶Ä§Ç¥ÀÎÁö º¸°Ô µÈ´Ù¸é 0xb0 0x2e ½ºÆ®¸²ÀÇ °æ¿ì s[-1]ÀÌ '.'ÀÌ µÇ´Â Á¶°ÇÀÌ ¿ì¿¬È÷ ¸¸Á·ÇÏ°Ô µÈ´Ù.
¸¶Ä§Ç¥¸¦ ¸¸³ª¸é °³Çà Äڵ带 »ðÀÔÇØ ³Ö´Â´Ù. À̶§ nDiff´Â 2 °¨¼ÒÇÏ¿© ¼±Åà ¿µ¿ªÀÌ 2¸¸Å ´õ ¾ÕÂÊÀ¸·Î À̵¿ÇØ¾ß ÇÔÀ» ±â·ÏÇØ ³õ´Â´Ù. bRemoveSpace ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀ» °Ç³Ê¶Ú´Ù. º¸Åë ÀÌ ¿É¼ÇÀº ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁÀºµ¥ ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÏÁö ¾ÊÀ» °æ¿ì ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀÌ ´ÙÀ½ ¹®´ÜÀÇ ¼±µÎ¿¡ ¿À°Ô µÇ¹Ç·Î º¸±â ÁÁÁö ¾Ê´Ù.
µÎ ¿É¼ÇÀº 󸮰¡ ºñ½ÁÇÏ´Ù. ÀÏ´Ü µé¿©¾²±â, ³»¾î¾²±â´Â ¹«½ÃÇÏ°í ºÐ¼®ÇØ º¸ÀÚ. acwidth¿¡ ÆøÀ» ´©Àû½ÃŰ´Ù°¡ ÀÌ ÆøÀÌ ±âÁØÆøÀ» ³Ñ¾úÀ» ¶§ °³Çà Äڵ带 »ðÀÔÇØ ³ÖÀ¸¸é µÈ´Ù. acwidth¿¡ ¹®ÀÚ °³¼ö¸¦ ´©Àû½Ãų °ÍÀÎÁö ¹®ÀÚÀÇ ¼öÆòÆøÀ» ´©Àû½Ãų °ÍÀÎÁö°¡ ´Ù¸¦ »ÓÀÌ´Ù.
typeÀÌ 1À̸é acwidth¿¡ ¹®ÀÚ¼ö¸¦ ´©Àû½ÃÄÑ ³ª°¡°í 2À̸é GetCharWidth·Î ±¸ÇÑ ¹®ÀÚÀÇ ÆøÀ» ´©Àû½ÃÄÑ ³ª°£´Ù. È¸éÆøÀÇ °æ¿ì ÅÇ ¹®Àڴ Ưº°È÷ µû·Î °ü¸®ÇØ¾ß ÇÑ´Ù. ÅÇÀ» ¸¸³ª¸é ´ÙÀ½ ÅÇ À§Ä¡¸¦ Á÷Á¢ °è»êÇÏ¿© acwidth¿¡ ´ëÀÔÇÑ´Ù. °³Çà Äڵ带 ¸¸³ª¸é acwidth´Â 0ÀÌ µÈ´Ù. acwidth°¡ ±âÁØÆøÀ» ³Ñ¾úÀ» ¶§ °³Çà Äڵ带 »ðÀÔÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¹®ÀÚ¸¦ °è¼Ó º¹»çÇÑ´Ù.
ƯÁ¤ ¿ÀÇÁ¼ÂÀÇ Ä÷³ ¹øÈ£³ª Çȼ¿¼ö´Â GetRCFromOff, GetXYFromOff ÇÔ¼ö·Î ±¸ÇÒ ¼ö ÀÖÀ¸¹Ç·Î Á» ´õ °£´ÜÇÑ ³í¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» °Í °°´Ù. ±×·¯³ª ÀÌ °æ¿ì´Â Áß°£¿¡ ¾ÕÂÊ µ¥ÀÌÅͰ¡ ¼ö½Ã·Î ¹Ù²î±â ¶§¹®¿¡ pLine ¹è¿À» ÂüÁ¶ÇÒ ¼ö ¾øÀ¸¸ç Á÷Á¢ ¹®ÀÚÆø°ú Çȼ¿ÆøÀ» ´©ÀûÇØ¾ß ÇÑ´Ù.
¹®ÀÚÆøÀ̳ª È¸éÆøÀ¸·Î ºÐÇÒÇÒ ¶§´Â ºÐÇÒÇÏ¸é¼ µé¿©¾²±â¿Í ³»¾î¾²±â¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. µé¿©¾²±â´Â ¹°¸®ÀûÀÎ ¹®´Ü óÀ½¿¡ ´ëÇØ¼ Àû¿ëµÇ´Âµ¥ ÃÖÃÊ ·çÇÁ¿¡ ÁøÀÔÇϱâ Àü¿¡ ù ¹®´Ü¿¡ ´ëÇØ µû·Î ó¸®ÇÏ¸ç ¶ÇÇÑ ·çÇÁ¸¦ µ¹´Ù°¡ ¹°¸®ÀûÀÎ °³Çà Äڵ带 ¸¸³µÀ» ¶§µµ ó¸®ÇÑ´Ù. µÑ ´Ù iIndent°¡ 0 ÀÌ»óÀÏ ¶§¸¸ ó¸®ÇÑ´Ù.
µé¿©¾²±â ±íÀ̸¸Å °ø¹é ¹®ÀÚ¸¦ ´õ »ðÀÔÇ쵂 À̶§ Á¦´ë·Î µé¿©¾²±â°¡ µÇ·Á¸é ¹®´Ü óÀ½ÀÇ °ø¹éÀº Á¦°ÅÇØ¾ß ÇÑ´Ù. ±×·¡¼ µé¿©¾²±â¸¦ ÇÒ ¶§´Â ¹®´Ü óÀ½ÀÇ °ø¹é Á¦°ÅÇÏÁö ¾ÊÀ½ ¿É¼ÇÀ» ¼±ÅÃÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù. ³»¾î¾²±â´Â °Á¦·Î ºÐÇÒµÈ ¹®´Ü¿¡ ´ëÇØ Àû¿ëµÈ´Ù. ÆøÀ» ³Ñ¾î¼ ¹®´ÜÀ» ºÐÇÒÇÒ ¶§ iIndent°¡ 0 ÀÌÇÏÀÇ À½¼öÀ̸é ÀÌ ¼ö¸¸Å °ø¹éÀ» ´õ »ðÀÔÇÑ´Ù.
ÀÌ ¿É¼ÇÀº ÀÚµ¿ °³Çà »óÅ¿¡¼ ÇöÀç È¸é Æø¿¡ ¸Â°Ô Á¤·ÄµÇ¾î ÀÖ´Â »óÅ ±×´ë·Î ¹®´ÜÀ» ºÐÇÒÇÑ´Ù. ¾îµð°¡ ÁÙÀÇ ³¡ÀÎÁö´Â pLine ¹è¿À» ÂüÁ¶ÇÏ¸é ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù. ¸ðµç Á¤º¸¸¦ ¸ÕÀú Á¶»çÇÑ ÈÄ Àû¿ëÇϱ⠶§¹®¿¡ pLine ¹è¿À» ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. arWrap ¹è¿¿¡ ÀÚµ¿ °³ÇàµÈ ¿ÀÇÁ¼Â À§Ä¡¸¦ Á¶»çÇØ µÐ´Ù. ´ÙÀ½ ÁÙÀÇ nLineÀÌ 0ÀÌ ¾Æ´Ï¸é ÀÌ ÁÙÀº ÀÚµ¿ °³ÇàµÇ¾úÀ½À» ½±°Ô ¾Ë ¼ö ÀÖ´Ù.
elÁÙÀº ¹®´ÜÀÇ ³¡ÀÌ¸ç ¹°¸®ÀûÀÎ °³Çà Äڵ带 °¡Áö°í ÀÖÀ¸¹Ç·Î Á¶Á¤ ´ë»ó¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ±×·¡¼ lÀº elº¸´Ù ÇÑÄ ¾ÕÂÊ ÁÙ±îÁö¸¸ ·çÇÁ¸¦ µ¹¸ç l+1ÁÙÀº Ç×»ó À¯È¿ÇÏ´Ù. arWrap¿¡ ÀÚµ¿ °³ÇàµÈ ¿ÀÇÁ¼ÂÀ» Á¶»çÇÑ ÈÄ ·çÇÁ¸¦ µ¹¸é¼ ÀÌ ¿ÀÇÁ¼Â°ú °°Àº À§Ä¡¸¦ Áö³¯ ¶§ d¿¡ °³Çà Äڵ带 ½½Â½ »ðÀÔÇØ ³ÖÀ¸¸é ÇöÀç ȸ鿡 º¸À̴´ë·Î ¹®´ÜÀÌ ³ª´©¾îÁø´Ù.
¼öÆò Á¤·Ä(Alignment)Àº ¹®´ÜÀÇ ¼öÆòÀûÀÎ ¹èÄ¡ »óŸ¦ ÀǹÌÇÏ¸ç ¿ÞÂÊ Á¤·Ä, Áß¾Ó Á¤·Ä, ¿À¸¥ÂÊ Á¤·Ä µîÀÌ ÀÖ´Ù. ·¹Äڵ带 Å©±â ¼øÀ¸·Î ³ª¿ÇÏ´Â Á¤·Ä(Sort)°¡ ¾Æ´ÔÀ» ÁÖÀÇÇÏÀÚ. ±âÁØÆøº¸´Ù ªÀº ¹®ÀÚ¿ ¾Õ¿¡ °ø¹éÀ» Àû´çÈ÷ »ðÀÔÇϸé Á¤·ÄµÈ´Ù. Á¤·ÄÀ» À§ÇØ ½ÇÁ¦·Î ¹®ÀÚ¸¦ »ðÀÔÇÑ´Ù´Â Á¡¿¡¼ ¿öµå ÇÁ·Î¼¼¼ÀÇ Á¤·Ä°ú´Â ´Ù¸£´Ù.
BOOL CALLBACK Para3Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
RECT prt;
switch(iMessage) {
case WM_INITDIALOG:
ParaOption.startpage=2;
GetWindowRect(hParaTab,&prt);
TabCtrl_AdjustRect(hParaTab,FALSE,&prt);
ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);
SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);
CheckRadioButton(hDlg,IDC_P3_RA1,IDC_P3_RA3,IDC_P3_RA1+ParaOption.p3_Orient);
CheckRadioButton(hDlg,IDC_P3_RA4,IDC_P3_RA5,IDC_P3_RA4+ParaOption.p3_Type-1);
SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P3_RA4+ParaOption.p3_Type-1,BN_CLICKED),0);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_P3_RA4:
SetDlgItemInt(hDlg,IDC_P3_ED1,ParaOption.p3_nChar,FALSE);
SetDlgItemText(hDlg,IDC_P3_ST1,"¹®ÀÚ");
SendDlgItemMessage(hDlg,IDC_P3_SPIN1,UDM_SETRANGE,0,MAKELPARAM(1024,2));
return TRUE;
case IDC_P3_RA5:
SetDlgItemInt(hDlg,IDC_P3_ED1,ParaOption.p3_nPixel,FALSE);
SetDlgItemText(hDlg,IDC_P3_ST1,"Çȼ¿");
SendDlgItemMessage(hDlg,IDC_P3_SPIN1,UDM_SETRANGE,0,MAKELPARAM(4096,100));
return TRUE;
}
return FALSE;
}
return FALSE;
}
ÆäÀÌÁö¿¡¼´Â ¹æÇâ°ú ±âÁØÆøÀ» ÀԷ¹޴´Ù. ½ÇÁ¦ Á¤·ÄÀº ´ÙÀ½ ÇÔ¼ö°¡ ¼öÇàÇÑ´Ù.
void CApiEditText::AlignPara(int orient, int type, int num)
{
BEFOREARRANGEPARA
int acwidth,extra;
int i;
TCHAR *s2;
for (;;) {
acwidth=0;
// ¾ÕÂÊ °ø¹éÀº °Ç³Ê¶Ú´Ù.
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
s2=s;
// ¹®´Ü ³¡±îÁö Æø °è»ê
for (;;) {
if ((s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') || (s==src+ed-st)) {
break;
}
if (type==1) {
if (IsDBCSLeadByte(*s)) {
acwidth+=2;
s++;
} else {
acwidth++;
}
} else {
if (*s=='\t') {
acwidth=(acwidth/TabSize+1)*TabSize;
} else {
if (IsDBCSLeadByte(*s)) {
acwidth+=GetCharWidth(s,2);
s++;
} else {
acwidth+=GetCharWidth(s,1);
}
}
}
s++;
}
// ±âÁØÆøº¸´Ù ´õ ±æ¸é ±×´ë·Î º¹»ç
if (acwidth >= num || orient==0) {
for (;s2!=s;) {
*d++=*s2++;
}
} else {
ReallocBuf(dest,d,1024,2048);
extra=(num-acwidth);
if (type==2) {
extra=extra/GetCharWidth(" ",1);
}
switch (orient) {
case 1:
// Áß¾Ó:¿©ºÐ °ø¹éÀÇ Àý¹Ý¸¸ »ðÀÔ
for (i=0;i<extra/2;i++) {
*d++=' ';
nDiff--;
}
break;
case 2:
// ¿À¸¥ÂÊ:¿©ºÐ °ø¹é »ðÀÔ ÈÄ º¹»ç
for (i=0;i<extra;i++) {
*d++=' ';
nDiff--;
}
break;
}
for (;s2!=s;) {
*d++=*s2++;
}
}
if (s==src+ed-st) {
break;
}
// ¹®´Ü ³¡ÀÇ °³Çà ÄÚµå º¹»ç. ¸¶Áö¸· ¹®´Ü¿¡´Â ÀÌ °³Çà Äڵ尡 ¾øÀ½
*d++=*s++;
*d++=*s++;
}
ENDARRANGEPARA(30)
}
Á¤·ÄÀ̶õ ´«¿¡ º¸ÀÌ´Â ¹®ÀÚµéÀÇ À§Ä¡¸¦ ¹Ù²Ù´Â °ÍÀ̹ǷΠ°ø¹éÀº ´ë»ó¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ±×·¡¼ ¹®´Ü óÀ½ÀÇ °ø¹éÀº ¹«Á¶°Ç °Ç³Ê¶Ù°í ÀÌ À§Ä¡¸¦ s2¿¡ ±â¾ïÇØ µÐ´Ù. ºñ°ø¹é ¹®ÀÚ¿¡¼ºÎÅÍ ½ÃÀÛÇØ¼ °³Çà Äڵ带 ¸¸³¯ ¶§±îÁöÀÇ ¹®´Ü ÆøÀ» °è»êÇÑ´Ù. type¿¡ µû¶ó ¹®ÀÚ¼ö ¶Ç´Â Çȼ¿¼ö·Î ÆøÀ» ´©ÀûÇÏ¸é µÈ´Ù. ÀÌ ÆøÀÌ ±âÁØÆøº¸´Ù ´õ ±æ¸é ÀÌ ¹®´ÜÀº Á¤·Ä ´ë»óÀÌ ¾Æ´Ï¹Ç·Î ´Ü¼ø º¹»çÇÑ´Ù. ±âÁØÆøº¸´Ù ªÀ¸¸é ¾ÕÂÊ¿¡ °ø¹éÀ» ³Ö°í s2, Áï ºñ°ø¹é ¹®ÀÚµéÀ» º¹»çÇÑ´Ù.
¿ÞÂÊ Á¤·ÄÀÌ¸é º°´Ù¸¥ ó¸®ÇÒ ÇÊ¿ä ¾øÀÌ º¹»ç¸¸ ÇÑ´Ù. ÀÌ·¸°Ô ÇÏ´õ¶óµµ s2¿¡´Â ÀÌ¹Ì °ø¹éÀ» °Ç³Ê¶Ú Æ÷ÀÎÅͰ¡ ´ëÀԵǾî ÀÖÀ¸¹Ç·Î ¿ÞÂÊ Á¤·ÄµÈ´Ù. ¿À¸¥ÂÊ Á¤·ÄÀÌ¸é ±âÁØÆø¿¡¼ ºÎÁ·ÇÑ Æø¸¸Å °ø¹éÀ» »ðÀÔÇÏ°í ¹®ÀÚ¿À» º¹»çÇÑ´Ù. ¿¹¸¦ µé¾î ±âÁØÆøÀÌ 80¹®ÀÚÀε¥ ÇöÀç ¹®´ÜÀÌ 10ÀÚ¹Û¿¡ ¾ÈµÈ´Ù¸é ¾Õ¿¡ 70ÀÚÀÇ °ø¹éÀ» ¸ÕÀú »ðÀÔÇÏ°í ¹®´Ü ³»¿ëÀ» µÚ¿¡ µ¡ºÙÀÌ¸é µÈ´Ù. Çȼ¿ ±âÁØÀÏ ¶§µµ ÇÊ¿äÇÑ °ø¹é ¼ö¸¦ °è»êÇÏ´Â ¹æ¹ý¸¸ ´Ù¸¦ »Ó ³í¸®´Â µ¿ÀÏÇÏ´Ù.
Áß¾Ó Á¤·ÄÀÏ °æ¿ì ÇÊ¿äÇÑ ¿©ºÐ °ø¹éÀÇ Àý¹Ý¸¸Å¸¸ »ðÀÔÇÏ¸é µÈ´Ù. À§ ¿¹ÀÇ °æ¿ì 70°³ÀÇ °ø¹é Áß ±× Àý¹ÝÀÎ 35°³¸¸ »ðÀÔÇϸé Á¤È®ÇÏ°Ô ÀÌ ¹®´ÜÀº Áß¾ÓÀ¸·Î Á¤·ÄµÈ´Ù.
¹®´Ü Å©±â¼ø Á¤·Ä ±â´ÉÀº ¹®´ÜÀÇ ¹®ÀÚµéÀ» ±âÁØÀ¸·Î Á¤·Ä(Sort)ÇÑ´Ù. ¿À¸§Â÷¼ø/³»¸²Â÷¼øÀ» ¼±ÅÃÇÒ ¼ö ÀÖÀ¸¸ç Á¤·ÄÀÇ °¡Àå ÀϹÝÀûÀÎ ¿É¼ÇÀÎ ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿É¼ÇÀÌ ÀÖ´Ù. ÀÌ ¿Ü¿¡ Áߺ¹µÇ´Â ÇàÀ» Á¦°ÅÇÏ´Â ±â´ÉÀÌ Àִµ¥ Á¤·Ä °á°ú ¿ÏÀüÈ÷ ÀÏÄ¡ÇÏ´Â ¹®´ÜÀ» Á¦°ÅÇÑ´Ù. Á¤·ÄÀü¿¡´Â Áߺ¹ÇàÀÌ µû·Î ¶³¾îÁ® ÀÖÁö¸¸ Á¤·ÄÇÏ¸é ¾Æ·¡ À§·Î ÀÎÁ¢ÇÏ°Ô µÇ¹Ç·Î ÇÊ¿ä¾øÀ» ¼öµµ Àִµ¥ ƯÈ÷ Áß°£ Áß°£ÀÇ ºóÁÙÀÌ ¾ÕÂÊ¿¡ ¿©·¯ °³ ¸ðÀÏ ¼ö ÀÖÀ¸¹Ç·Î Á¦°ÅÇÒ Çʿ䰡 ÀÖ´Ù. ´ëÈ»óÀÚ ÇÁ·Î½ÃÀú´Â °£´ÜÇÏ´Ù.
BOOL CALLBACK Para4Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
RECT prt;
switch(iMessage) {
case WM_INITDIALOG:
ParaOption.startpage=3;
GetWindowRect(hParaTab,&prt);
TabCtrl_AdjustRect(hParaTab,FALSE,&prt);
ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);
SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);
CheckRadioButton(hDlg,IDC_P4_RA1,IDC_P4_RA2,IDC_P4_RA1+ParaOption.p4_Type);
CheckDlgButton(hDlg,IDC_P4_CHK1,ParaOption.p4_Case);
CheckDlgButton(hDlg,IDC_P4_CHK2,ParaOption.p4_Unique);
return TRUE;
}
return FALSE;
}
¿É¼Ç°ªÀ» Àоî¿Í ÄÁÆ®·Ñ¿¡ ´ëÀÔÇÏ´Â µ¿ÀÛ¸¸ ó¸®ÇÑ´Ù. ÄÁÆ®·Ñ°£ÀÇ Á¾¼Ó °ü°è°¡ ¾ø°í ¿É¼ÇÀÌ ¹Ù²ð ¶§ Áï½Ã ¾î¶² µ¿ÀÛÀ» ÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡ WM_COMMAND¿¡¼ Ưº°È÷ ÇÒ ÀÏÀÌ ¾ø´Ù. ¹®´Ü Á¤·ÄÀº ´ÙÀ½ ÇÔ¼ö°¡ ó¸®ÇÑ´Ù. ±æÀÌ¿¡ ºñÇØ ±²ÀåÈ÷ º¹ÀâÇÏ´Ù.
// ¹®´Ü Å©±â¼ø Á¤·Ä
void CApiEditText::SortPara(int asc, BOOL Case, BOOL Unique)
{
BEFOREARRANGEPARA
struct stPara {
TCHAR *ptr; // ¹®´Ü ½ÃÀÛ À§Ä¡
int len; // ¹®´ÜÀÇ ±æÀÌ
int order; // ¼ø¼°ª
};
stPara *arPara;
int nPara,i,j;
TCHAR *p;
int result,order;
int same;
// src¿¡´Â ³Î ¹®ÀÚºÐ, dest´Â ¸¶Áö¸· °³Çà ÄÚµåºÐÀ» Ãß°¡ÇÒ´çÇÑ´Ù.
s=src=(TCHAR *)realloc(src,ed-st+1);
src[ed-st]=0;
d=dest=(TCHAR *)realloc(dest,ed-st+2);
// ¹®´Ü °³¼ö¸¦ ±¸Çϰí arPara¸¦ ÇÒ´çÇÑ´Ù.
for (p=src,nPara=1;*p;p++) {
if (*p=='\r' && *(p+1)=='\n') {
nPara++;
*p++=0;
*p=0;
}
}
arPara=(stPara *)malloc(nPara*sizeof(stPara));
// °¢ ¹®´ÜÀÇ ½ÃÀÛ À§Ä¡¿Í ±æÀ̸¦ ±¸ÇÑ´Ù.
for (i=0,p=src;i<nPara;i++) {
arPara[i].ptr=p;
arPara[i].len=lstrlen(p);
p+=(arPara[i].len+2);
}
// °¢ ¹®´ÜÀÇ ¼ø¼¸¦ ±¸ÇÑ´Ù.
for (i=0;i<nPara;i++) {
order=0;
for (j=0;j<nPara;j++) {
if (i == j) continue;
if (Case) {
result=strcmp(arPara[i].ptr,arPara[j].ptr);
} else {
result=strcmpi(arPara[i].ptr,arPara[j].ptr);
}
if (asc) {
if (result < 0) order++;
} else {
if (result > 0) order++;
}
}
arPara[i].order=order;
}
// ¼ø¼´ë·Î dest·Î º¹»çÇÑ´Ù. °°Àº ¼øÀ§°¡ ÀÖÀ» ¼ö ÀÖ°í ºüÁö´Â ¼øÀ§µµ ÀÖ´Ù.
for (i=0;i<nPara;i++) {
for (j=0,same=0;j<nPara;j++) {
if (arPara[j].order == i) {
same++;
// °°Àº ¼øÀ§°¡ µÑ ÀÌ»óÀ̰í Áߺ¹ Á¦°Å ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì
if (same > 1 && Unique) {
nDiff+=(arPara[j].len+2);
} else {
memcpy(d,arPara[j].ptr,arPara[j].len);
d+=arPara[j].len;
*d++='\r';
*d++='\n';
}
}
}
}
// ¸¶Áö¸·ÀÇ ºÒÇÊ¿äÇÑ °³Çà ÄÚµå Á¦°Å
d-=2;
free(arPara);
ENDARRANGEPARA(31)
}
BEFOREARRANGEPARA¿¡¼ ¿øº» ¹®ÀÚ¿À» src¿¡ ±¸Çϴµ¥ ³Ê¹« Á¤È®ÇÑ ±æÀ̸¸Å¸¸ Á¶»çÇϱ⠶§¹®¿¡ srcÀÇ Á¦ÀÏ ³¡ ¹®´Ü °³Çà ÄÚµå´Â Ç×»ó Á¦¿ÜµÇ¸ç ³Î·Î ³¡³ªÁöµµ ¾Ê´Â´Ù. ±×·¡¼ ÀÛ¾÷ÀÇ ÆíÀÇ»ó src¸¦ 1¹ÙÀÌÆ® ´õ Å©°Ô ÀçÇÒ´çÇϰí Á¦ÀÏ ³¡¿¡ ³Î Á¾·á ¹®ÀÚ¸¦ µÎ¾ú´Ù. ¸¶Áö¸· ¹®´Üµµ NULL·Î ³¡³ª°Ô ÇÏ¿© µ¿ÁúÀÇ ¹®´ÜÀ» ¸¸µé¾î ³õÀ¸¸é ¹®´ÜÀ» ºñ±³, ±³È¯ÇÒ ¶§ º°µµÀÇ ¿¹¿Ü 󸮸¦ ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. dest´Â ¿øº» src¿Í µ¿ÀÏÇÑ ±æÀÌ·Î ÇÒ´çµÇ´Âµ¥ Àӽà °³Çà Äڵ带 À§ÇØ 2¹ÙÀÌÆ®°¡ ´õ ÇÊ¿äÇϹǷΠÃß°¡ ÀçÇÒ´çÇØ µÎ¾ú´Ù.
Á¤·Ä ¾Ë°í¸®ÁòÀº ¸¹ÀÌ °³¹ßµÇ¾î ÀÖÁö¸¸ ÀÌ °æ¿ì¿¡´Â ±âÁ¸ÀÇ Á¤·Ä Äڵ带 Àû¿ëÇÏ±â ¾î·Æ´Ù. ¿Ö³ÄÇϸé Á¤·Ä ´ë»óÀÌ ºÐ¸®µÈ ±â¾ïÀå¼Ò¿¡ µû·Î ÀúÀåµÈ °ÍÀÌ ¾Æ´Ï¶ó Å« ¹öÆÛ Çϳª¿¡ ¿Ë±âÁ¾±â ¸ð¿© ÀÖ°í °³Çà Äڵ峪 ³Î ¹®ÀÚ¸¦ ¸¸³ª¾ß ·¹ÄÚµåÀÇ ³¡ÀÌ¸ç ±æÀ̵µ °¡º¯À̱⠶§¹®ÀÌ´Ù. ÀϹÝÀûÀÎ Á¤·Ä ¾Ë°í¸®ÁòÀº ºñ±³, ±³È¯À» ¹Ýº¹Çϴµ¥ ¹®´Ü Á¤·ÄÀº ·¹Äڵ帶´Ù ±æÀ̰¡ ´Þ¶ó ºñ±³ Áï½Ã ±³È¯Çϱ⵵ ¾î·Æ´Ù. ¶ÇÇÑ ÀúÀåµÈ °ø°£ÀÌ °°±â ¶§¹®¿¡ ´Ù¸¥ ·¹Äڵ带 ÆÄ±«ÇÏÁö ¾Ê°í ±³È¯ÇÏ´Â °Íµµ ºÒ°¡´ÉÇÏ´Ù.
±×·¡¼ ÀÌ ÇÔ¼ö´Â °£´ÜÇÏÁö¸¸ ³ª¸§´ë·ÎÀÇ Á¤·Ä ¾Ë°í¸®ÁòÀ» Á÷Á¢ ±¸ÇöÇÑ´Ù. ¸ÕÀú Á¤·Ä ´ë»óÀÎ ·¹ÄÚµåÀÇ °³¼ö¸¦ ±¸ÇÑ´Ù. ¹®´Ü °³¼ö´Â °³Çà Äڵ带 ¸¸³¯ ¶§¸¶´Ù Áõ°¡Çϴµ¥ À̶§ °³Çà ÄÚµå´Â ¸ðµÎ NULL ¹®ÀÚ·Î º¯°æÇÑ´Ù. ±×·¡¾ß °¢ ¹®´Ü¿¡ ´ëÇØ strcmp µîÀÇ ¹®ÀÚ¿ ºñ±³ ÇÔ¼ö¸¦ ¹Ù·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù. ±×¸®°í arPara ±¸Á¶Ã¼¿¡ °¢ ·¹ÄÚµåÀÇ ½ÃÀÛ À§Ä¡¿Í ±æÀÌ Á¤º¸¸¦ ¼öÁýÇÑ´Ù. src´Â ¹®´Üº°·Î ²÷¾îÁø ³Î ±¸ºÐ ¹®ÀÚ¿ÀÌ µÇ¸ç arPara ±¸Á¶Ã¼´Â ÀÌ ¹®´ÜµéÀÇ Á¤º¸¸¦ °¡Áø´Ù. ÀÌÈÄ Á¤·ÄÀº arPara ±¸Á¶Ã¼¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.
¹®´Ü³¢¸® Á÷Á¢ ±³È¯ÀÌ ¾î·Á¿ì¹Ç·Î ¹®´ÜÀÇ ¼ø¼¸¦ ±¸ÇØ arParaÀÇ order ¸â¹ö¿¡ Á¶»çÇÑ´Ù. ºñ±³ ¹æ½ÄÀº Case¿Í asc Àμö¿¡ µû¶ó ´Þ¶óÁø´Ù. ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϸé strcmp ÇÔ¼ö¸¦ ¾²°í ¾Æ´Ï¸é strcmpi ÇÔ¼ö¸¦ »ç¿ëÇÏ¸ç ¿À¸§Â÷¼øÀ̸é ÀÛÀº ¹®´ÜÀ» ¾Õ¿¡ ³õ°í ³»¸²Â÷¼øÀ̸é Å« ¹®´ÜÀ» ¾Õ¿¡ ³õ´Â´Ù. ºñ±³°¡ ³¡³ª¸é °¢ ¹®´ÜÀº 0~nPara-1±îÁöÀÇ ¼ø¼°ªÀ» °¡Áö¸ç ÀÌ ¼ø¼´ë·Î dest·Î º¹»çÇÏ¸é µÈ´Ù. À̶§ order°¡ ¹Ýµå½Ã ¿¬¼ÓÀûÀ̶ó°í º¸ÀåÇÒ ¼ö ¾ø´Âµ¥ µ¿ÀÏ ¼øÀ§°¡ Á¸ÀçÇÒ ¼ö ÀÖÀ¸¸ç µ¿ÀÏ ¼øÀ§ ´ÙÀ½Àº Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î 4°³ÀÇ ¹®´ÜÀ» ºñ±³Çϸé 0, 1, 2, 3 ¼øÀÇ ¼ø¼°¡ ³ª¿À´Â °ÍÀÌ º¸ÆíÀûÀÌÁö¸¸ Áß°£ÀÇ µÎ ¹®´ÜÀÌ °°´Ù¸é 0, 1, 1, 3ÀÇ ¼ø¼°¡ µÉ ¼öµµ ÀÖ´Ù. ±×·¡¼ Áߺ¹µÈ ¼øÀ§µµ ´Ù º¹»çÇØ¾ß ÇÏ¸ç °Ô´Ù°¡ Unique ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ÇϳªÀÇ ¹®´Ü¸¸ º¹»çÇØ¾ß ÇÑ´Ù.
º¹»ç ·çÇÁ ³»ºÎ°¡ ´Ù¼Ò º¹ÀâÇѵ¥ 0ºÎÅÍ nPara-1±îÁö ¹Ýº¹µÇ´Â i ·çÇÁ´Â ¼øÀ§¿¡ ´ëÇÑ ·çÇÁÀÌ´Ù. ¿©±â¼ nPara-1Àº ¹®´ÜÀÇ °³¼ö¸¦ ÀǹÌÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °¡´ÉÇÑ ÃÖ´ë ¼ø¼°ªÀ» ÀǹÌÇÑ´Ù. j·çÇÁ´Â °¢ ¼ø¼°ª¿¡ ´ëÇØ ¸ðµç ¹®´ÜÀ» °Ë»öÇÏ¿© ÀÌ ¼ø¼¿¡ ÇØ´çÇÏ´Â ¹®´ÜÀ» dest·Î º¹»çÇÑ´Ù. À̶§ °¢ ¹®´Ü ³¡¿¡´Â ¹«Á¶°Ç °³Çà Äڵ带 ºÙÀδÙ. ¿øº»ÀÇ ¸¶Áö¸· ¹®´Ü¿¡´Â °³Çà Äڵ尡 ¾ø´Âµ¥ Á¤·Ä °á°ú´Â °³Çà Äڵ带 ºÙ¿´À¸¹Ç·Î º¹»ç ÈÄ d-=2·Î ¸¶Áö¸· °³Çà ÄÚµå´Â Á¦°ÅÇØ¾ß ÇÑ´Ù.
Áï ¸¶Áö¸· ¹®´Ü¿¡´Â ¿ø·¡ ¾ø´ø °³Çà ÄÚµå´Â ÀÏ´Ü ºÙ¿´´Ù°¡ Á¤¸®ÇÏ´Â ¼ÀÀε¥ À̸¦ À§ÇØ ¼±µÎ¿¡¼ dest¸¦ 2¹ÙÀÌÆ® ´õ Å©°Ô ÀçÇÒ´çÇß´Ù. ÀÌ·¸°Ô ÇÒ ¹Ù¿¡¾ß ¾Æ¿¹ ¸¶Áö¸· ¹®´Ü¿¡¸¸ °³Çà Äڵ带 ºÙÀÌÁö ¾Ê´Â ¹æ¹ýÀ» ¾²´Â °ÍÀÌ ´õ °£´ÜÇÒ °Íó·³ »ý°¢µÈ´Ù. ±×·¯³ª Á÷Á¢ ±¸ÇöÇØ º» °á°ú ´ë´ÜÈ÷ °ñÄ¡¾ÆÇ °æ¿ì°¡ ¸¹¾Ò´Ù. ¿ì¼± ¸¶Áö¸· ¹®´ÜÀÎÁö¸¦ ÆÇ´ÜÇÏ´Â °ÍÀÌ ¾î·Á¿îµ¥ i°¡ nPara-1À̶ó°í ÇØ¼ À̰ÍÀÌ ¸¶Áö¸· ¹®´ÜÀ̶ó°í º¼ ¼ö´Â ¾ø´Ù. ¿Ö³ÄÇÏ¸é µ¿¼øÀ§¿¡ ÀÇÇØ ¸¶Áö¸· ¼øÀ§°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¼ö Àִµ¥ ¿¹¸¦ µé¾î 4°³ÀÇ ¹®´Ü ¼ø¼°ªÀÌ 0, 1, 2, 2 À̸é 3¹ø ¼øÀ§ÀÇ ¹®´ÜÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ÀÌ °æ¿ì ¼øÀ§ 2¹øÀ» µÎ ¹ø ¾²µÇ µÑ ´Ù ¸¶Áö¸· ¼øÀ§°¡ ¾Æ´Ï¹Ç·Î °³Çà Äڵ带 ´Ù ºÙÀÌ°Ô µÇ°í ±×·¯¸é destÀÇ ¹üÀ§¸¦ ¹þ¾î³ª¹Ç·Î ´Ù¿îµÈ´Ù.
¸¶Áö¸· ¼øÀ§¸¦ ²À ¾Ë¾Æ ³»·Á¸é º¹»çµÇ´Â ¹®´ÜÀÇ °³¼ö¸¦ º°µµÀÇ º¯¼ö¿¡ Ä«¿îÆÃÇÏ´Â ¹æ¹ýÀ» ¾µ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ ¹æ¹ýµµ Unique ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ´Â °æ¿ì ¸¶Áö¸· º¹»çµÇ´Â ¹®´ÜÀÎÁö¸¦ ¹Ì¸® ¾Ë ¼ö ¾ø´Â ¹®Á¦°¡ ÀÖ´Ù. ¸»·Î ¼³¸íÇϱâ´Â ±²ÀåÈ÷ ¾î·Á¿îµ¥ ´ÙÀ½ÀÇ ÂªÀº ¿¹Á¦ ¹®¼¸¦ º¸ÀÚ.
bbb\r\n
aaa\r\n
bbb
ÀÌ ¹®¼¸¦ Á¤·ÄÇϸé ÀÏ´Ü aaa\r\nÀÌ dest·Î º¹»çµÈ´Ù. ´ÙÀ½ bbb ¹®´ÜÀº ¾ÆÁ÷ ³¡ÀÌ ¾Æ´Ï¹Ç·Î bbb\r\nÀ¸·Î º¹»çµÈ´Ù. ¸¶Áö¸· bbb´Â Áߺ¹µÈ ÇàÀ̹ǷΠÁ¦°ÅµÇ´Âµ¥ ÀÌ·¸°Ô µÇ¸é µÎ ¹øÂ° ºÙÀÎ \r\nÀ» ´Ù½Ã Á¦°ÅÇØ¾ß ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ÀÌ ¹®Á¦µµ ¾î¶µç Ç® ¼ö´Â ÀÖÁö¸¸ Áߺ¹µÈ ÇàÀÌ ºó ÁÙÀÌ°í ¿ª¼ø Á¤·Ä ¿É¼Ç¿¡ ÀÇÇØ ºóÁÙÀÌ ¸¶Áö¸·¿¡ ¿Ã °æ¿ì Ãß°¡ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¹®¼ÀÇ ¸ð¾ç°ú ¿É¼Ç¿¡ µû¶ó ¸¶Áö¸· ÁÙÀ» ó¸®ÇϱⰡ ¹«Ã´ ±î´Ù·Ó±â ¶§¹®¿¡ ¹«Á¶°Ç °³Çà Äڵ带 ºÙ¿© ³õ°í ¸¶Áö¸·ÀÇ °³Çà Äڵ带 »èÁ¦ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇߴµ¥ ÀÌ ¹æ¹ýÀº °¢ ¹®´ÜÀ» º¹»çÇÏ´Â ¹æ¹ýÀÌ Á¤±ÔȵǾî ÀÖ¾î ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Ù. ¾î·°Å³ª ÀÌ·± ¹®Á¦´Â Á÷Á¢ ¹ö±×¸¦ ¸ñ°ÝÇÏÁö ¾Ê´Â ÇÑ ¸»·Î ¼³¸íÇϱâ´Â Âü ¾î·Æ´Ù.
sameÀº µ¿ÀÏÇÑ ¼øÀ§ÀÇ ¹®´Ü °³¼öÀε¥ µÑ ÀÌ»óÀÇ °°Àº ¼øÀ§ ¹®´ÜÀ» º¹»çÇÒ ¶§ Unique ¿É¼Ç¿¡ µû¶ó ÀÌ ¹®´ÜÀ» º¹»ç ´ë»ó¿¡¼ Á¦¿ÜÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. ¹®´ÜÀ» Á¦¿ÜÇÒ ¶§´Â º¹»çÇÏÁö ¾Ê°í nDiff¸¦ ¹®´Ü ±æÀÌ + °³Çà ÄÚµå ±æÀ̸¸Å Áõ°¡ÇÏ¿© ó¸® ÈÄ ¼±Åà ¿µ¿ªÀÌ À̸¸Å ¾ÕÂÊÀ¸·Î À̵¿ÇÏ°Ô ÇÑ´Ù. ¹°·Ð ÀÌ Ã³¸®´Â Unique ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾ÊÀ¸¸é ÀüÇô ÇÒ Çʿ䰡 ¾ø´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ arPara¸¦ ÇØÁ¦ÇÏ°í ³ª¸ÓÁö µÞ󸮴 ENDARRANGEPARA ÇÔ¼ö¿¡°Ô ³Ñ±ä´Ù. ¿øº»Àº Áö¿ì°í dest¸¦ »ðÀÔÇÒ °ÍÀÌ´Ù. ¼¼ ¹®´ÜÀ¸·Î ±¸¼ºµÈ ¹®¼ÀÇ Á¤·Ä °úÁ¤À» ±×¸²À¸·Î ±×·Áº¸¸é ´ÙÀ½°ú °°´Ù.

srcÀÇ °³Çà Äڵ带 ¸ðµÎ 0À¸·Î ¹Ù²Ù°í Á¦ÀÏ ³¡¿¡ °³Çà Äڵ带 Ãß°¡·Î ºÙ¿© ¹®´Ü°£ ºñ±³¸¦ ½±°Ô ¸¸µç´Ù. ±×¸®°í srcÀÇ Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î °¢ ¹®´ÜÀÇ À§Ä¡, ±æÀÌ, ¼ø¼°ªÀ» arPara ±¸Á¶Ã¼ ¹è¿¿¡ ÀÛ¼ºÇϰí ÀÌ Á¤º¸´ë·Î srcÀÇ ¹®´ÜµéÀ» dest·Î º¹»çÇϸé Á¤·ÄÀÌ ¿Ï·áµÈ´Ù. ¿©±â¿¡ ¼¼ °³ÀÇ ¿É¼Ç°ªÀ» Àû¿ëÇÏ´Ù º¸´Ï ¼Ò½º°¡ º¹ÀâÇÏ°í ¾î·Æ´Ù.
¿©±â¿¡ ¾à°£ÀÇ ±â´ÉÀ» ´õÇÑ´Ù¸é ¾ÕÂÊ °ø¹éÀ» Á¦°ÅÇѴٰųª Á¤·Ä ±âÁØ ÄÀ» ÁöÁ¤ÇÏ¿© ¼±µÎ°¡ ¾Æ´Ñ Áß°£ÂëÀÇ ¹®ÀÚ¿À» ±âÁØÀ¸·Î Á¤·ÄÇÒ ¼öµµ Àִµ¥ º¹Àâµµ°¡ ³Ê¹« Ä¿Áú °Í °°¾Æ ±âº» ±â´É Á¤µµ¸¸ ±¸ÇöÇß´Ù. ¶ÇÇÑ Á¤·Ä ¾Ë°í¸®ÁòÀÌ ³Ê¹« ´Ü¼øÇÏ´Ù º¸´Ï ºñ±³ ȸ¼ö°¡ ±²ÀåÈ÷ ¸¹¾Æ ¼Óµµ°¡ Á¶±Ý ´À¸° °Íµµ ºÒ¸¸Àε¥ ¹®´Ü °³¼öÀÇ Á¦°ö¸¸Å ºñ±³¸¦ ¹Ýº¹ÇØ¾ß ÇÑ´Ù. ¼Óµµ¸¦ °³¼±ÇÏ·Á¸é Á¶±Ý ´õ Ä¡¹ÐÇÑ Á¤·Ä ¾Ë°í¸®ÁòÀÌ ÇÊ¿äÇÏ´Ù.
ºóÁÙ Á¶Á¤Àº ¹®´Ü »çÀÌÀÇ ºóÁÙÀ» °Á¦·Î ³Ö°Å³ª »©´Â ±â´ÉÀÌ´Ù. ¸Å ¹®´Ü¸¶´Ù ºóÁÙÀ» Çϳª¾¿ ³Ö°í ½Í´Ù°Å³ª ¸ðµç ºóÁÙÀ» »èÁ¦ÇÒ ¶§ ÀÌ ±â´ÉÀ» »ç¿ëÇÑ´Ù. Á» ´õ À¯¿¬¼ºÀ» ÁÖ±â À§ÇØ ÃÖ¼Ò, ÃÖ´ë ¿É¼Çµµ °°ÀÌ ±¸ÇöÇß´Ù.
BOOL CALLBACK Para5Proc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
RECT prt;
switch(iMessage) {
case WM_INITDIALOG:
ParaOption.startpage=4;
GetWindowRect(hParaTab,&prt);
TabCtrl_AdjustRect(hParaTab,FALSE,&prt);
ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);
SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);
CheckRadioButton(hDlg,IDC_P5_RA1,IDC_P5_RA3,IDC_P5_RA1+ParaOption.p5_Type);
SetDlgItemInt(hDlg,IDC_P5_ED1,ParaOption.p5_Num,FALSE);
SendDlgItemMessage(hDlg,IDC_P5_SPIN1,UDM_SETRANGE,0,MAKELPARAM(16,0));
return TRUE;
}
return FALSE;
}
´ëÈ»óÀÚ ÇÁ·Î½ÃÀú´Â ¹«Ã´ °£´ÜÇѵ¥ ¿É¼Ç°ª¸¸ ÄÁÆ®·Ñ¿¡ ´ëÀÔÇÏ¸é µÈ´Ù. ¿É¼Ç°£ÀÇ Á¾¼Ó °ü°è°¡ ¾ø±â ¶§¹®¿¡ WM_COMMAND´Â ó¸®ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.
void CApiEditText::ArrangeEmptyPara(int type, int num)
{
BEFOREARRANGEPARA
int nEmpty,i;
for (;;) {
ReallocBuf(dest,d,1024,2048);
// °³Çà ÄÚµå. ÀÏ´Ü º¹»ç ÈÄ ºóÁÙ ¼ö¸¦ ¸ÂÃã
if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {
*d++=*s++;
*d++=*s++;
// ºó ÁÙ ¼ö °è»ê
for (nEmpty=0;;) {
while (AeIsWhiteSpace(*s)) {
s++;
nDiff++;
}
if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {
nEmpty++;
s+=2;
nDiff+=2;
} else {
break;
}
}
// ºóÁÙ¼ö °è»ê
switch (type) {
case 0:
i=max(nEmpty,num);
break;
case 1:
i=num;
break;
case 2:
i=min(nEmpty,num);
break;
}
// °è»êµÈ ºóÁÙ ¼ö »ðÀÔ
for (;i>0;i--) {
*d++='\r';
*d++='\n';
nDiff-=2;
}
} else {
if (IsDBCSLeadByte(*s)) {
*d++=*s++;
}
*d++=*s++;
}
if (s==src+ed-st) {
break;
}
}
ENDARRANGEPARA(32)
}
°³Çà Äڵ尡 ¾Æ´Ï¸é ´Ü¼ø º¹»çÇÏ°í °³Çà Äڵ带 ¸¸³ª¸é ÀÏ´Ü ¸ÕÀú º¹»çÇÑ´Ù. ±×¸®°í À̾îÁö´Â °³Çà Äڵ尡 ¸î °³³ª ´õ ÀÖ´ÂÁö º»´Ù. À̶§ °ø¹éÀ̳ª ÅÇÀ¸·Î¸¸ ±¸¼ºµÈ ¹®´Üµµ ½ÇÁ¦ ³»¿ëÀÌ ¾øÀ¸¹Ç·Î ºó ÁÙ·Î °£ÁÖÇÑ´Ù.
type¿¡ µû¶ó ºóÁÙÀÇ °³¼ö¸¦ °Á¦·Î ¸ÂÃá´Ù. °íÁ¤ÀÎ °æ¿ì num¿¡ ¸ÂÃß°í ÃÖ¼ÒÀÎ °æ¿ì numÀ̳ª Á¶»çµÈ ºóÁÙ °³¼ö Áß Å« °ªÀ» ÃëÇÑ´Ù. Áï, numº¸´Ù ´õ ÀÛÀº ºóÁÙÀÌ ÀÖÀ¸¸é ÃÖ¼ÒÇÑ num °³ÀÇ ºó ÁÙÀ» ³¢¿ö ³Ö´Â °ÍÀÌ´Ù. ÃÖ´ëÀÎ °æ¿ì ´õ ÀÛÀº °ªÀ» ÃëÇÏ¸é µÈ´Ù. ÀÌ·¸°Ô Á¶Á¤µÈ ºó ÁÙ °³¼ö¸¸Å °³Çà Äڵ带 »ðÀÔÇØ ³ÖÀ¸¸é µÈ´Ù.