2.º£Å¸ 1

°¡.°£´ÜÇÑ ÃÖÀûÈ­

º£Å¸1À» ¸±¸®ÁîÇϱâ Àü¿¡ °£´ÜÇÑ ÃÖÀûÈ­ ¸î °¡Áö¸¦ ÇÒ °ÍÀÌ´Ù. ¼º´É °³¼±¿¡ Å« µµ¿òÀÌ µÇ´Â ¸î °¡Áö ÃÖÀûÈ­°Å¸®°¡ ÀÖ±â´Â ÇÏÁö¸¸ ÀÌ·± °ÍµéÀº Á» ´õ ±â´ÉÀÌ ¿Ï¼ºµÈ ÈÄ¿¡ ÇÏ´Â °ÍÀÌ ÄÚµå À¯Áö¿¡ À¯¸®ÇØ ´ÙÀ½À¸·Î ¿¬±âÇÏ°í ¾ÆÁÖ °£´ÜÇÑ ÃÖÀûÈ­¸¸ ÇÒ °ÍÀÌ´Ù.

AeTextOut

´ç±ÙÀÇ ±âº» ¹®ÀÚ¿­ Ãâ·Â ÇÔ¼ö´Â Ŭ¸®ÇÎ ±â´É°ú ÀÚ°£ Á¶Àý ±â´ÉÀÌ ÀÖ´Â ExtTextOutÀÌ´Ù. ´Ü, ¸î °¡Áö ¹®Á¦·Î ÀÎÇØ ÀÌ ÇÔ¼ö¸¦ Á÷Á¢ »ç¿ëÇÏÁö ¾Ê°í AeTextOutÀ̶ó´Â ÇÔ¼ö¸¦ ´ë½Å »ç¿ëÇϴµ¥ ÀÌ ÇÔ¼öÀÇ Äڵ带 º¸ÀÚ.

 

void CApiEditText::AeTextOut(HDC hdc,int x,int y,TCHAR *str,int len)

{

     int i;

    int *lpDx;

     int boff;

 

     boff=str-pFrame->buf;

    lpDx=(int *)malloc(len*sizeof(int));

     for (i=0;i<len;) {

          if (pFrame->IsDBCS(boff+i)) {

              lpDx[i++]=GetCharWidth(str+i,2);

              lpDx[i++]=0;

          } else {

              lpDx[i++]=GetCharWidth(str+i,1);

          }

     }

     ExtTextOut(hdc,x,y,0,NULL,str,len,lpDx);

    free(lpDx);

}

 

lpDx ¹è¿­¿¡ °¢ ¹®ÀÚÀÇ ¼öÆò À§Ä¡¸¦ ¹Ì¸® ±¸ÇØ ³õ°í ÇѲ¨¹ø¿¡ Ãâ·ÂÇÑ´Ù. °¢ ¹®ÀÚÀÇ ÆøÀ» ´©ÀûÇÏ¿© ´ÙÀ½ ±ÛÀÚÀÇ À§Ä¡¸¦ ±¸Çϴµ¥ ÀÌ °úÁ¤¿¡¼­ ÀÚ°£°ú ´Ü¾î °£°Ý µîÀÇ ¿É¼ÇÀÌ Àû¿ëµÈ´Ù. ÀÌ ÇÔ¼ö´Â lpDx ¹è¿­À» ¸Å¹ø ¹®ÀÚ¿­ ±æÀ̸¸Å­ ÇÒ´çÇÏ°í ÇØÁ¦Çϴµ¥ Å« ¸Þ¸ð¸®´Â ¾Æ´ÏÁö¸¸ È£Ãâ ȸ¼ö°¡ ³Ê¹« ºó¹øÇϱ⠶§¹®¿¡ ¼º´É¿¡ ¸·´ëÇÑ ¿µÇâÀ» ¹ÌÄ£´Ù. ¸Å¹ø ÇÒ´çÇÏ´Â °Íº¸´Ù ¹Ì¸® ÇÒ´çÇØ ³õ°í °è¼Ó »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

 

class CApiEditText : public CWindow

{

     ....

     int *lpDx;

 

BOOL CApiEditText::OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     ....

     lpDx=(int *)malloc(1025*sizeof(int));

     return TRUE;

}

 

void CApiEditText::OnDestroy(HWND hWnd)

{

     ....

     free(lpDx);

}

 

lpDx¸¦ ºäÀÇ ¸â¹ö·Î ¼±¾ðÇÏ°í ºä°¡ »ý¼ºµÉ ¶§ 1025ÀÇ Å©±â·Î ¹Ì¸® ÇÒ´çÇßÀ¸¸ç Æı«µÉ ¶§ ÇØÁ¦ÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é ºä°¡ Á¸ÀçÇÏ´Â µ¿¾È lpDx°¡ Á¸ÀçÇϹǷΠAeTextOut ÇÔ¼ö¿¡¼­ ÀÏÀÏÀÌ lpDx¸¦ ÇÒ´çÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ÇÔ¼öÀÇ lpDx °ü¸® ÄÚµå´Â ¸ðµÎ »èÁ¦ÇÑ´Ù. ´Ü, ÀÌ·¸°Ô µÇ¸é AeTextOut ÇÔ¼ö´Â ÇÑ ¹ø¿¡ Ãâ·ÂÇÒ ¼ö ÀÖ´Â ¹®ÀÚ¿­ ±æÀÌ¿¡ Á¦¾àÀÌ »ý±â´Âµ¥ DrawLine ÇÔ¼ö¿¡¼­ ¼¼±×¸ÕÆ® Å©±â¸¦ 1024·Î ÁÙÀδÙ.

 

int CApiEditText::DrawLine(HDC hdc, int Line)

{

     ....

     for (;;) {

          for (len=0;;) {

              assert(nowoff+len <= pLine[Line].End);

           if (nowoff+len == pLine[Line].End || len >= 1024) {

 

¿ø·¡ ÀÌ °ªÀº 4096À̾ú´Âµ¥ Á¶±Ý ´õ ÁÙ¿´´Ù. DrawLine¿¡¼­ 1024 ÀÌ»óÀÏ ¶§ ¼¼±×¸ÕÆ®¸¦ ÀÚ¸£´Âµ¥ lpDx´Â ¿Ö 1025Àΰ¡ Çϸé 1023 À§Ä¡°¡ DBCSÀ̸é Àç¼ö¾ø°Ô 1024¸¦ ³ÑÀ» ¼öµµ Àֱ⠶§¹®ÀÌ¸ç ±×·¡¼­ 1¹ÙÀÌÆ®ÀÇ ¿©À¯°¡ ÇÊ¿äÇÏ´Ù.

±ä ¹®ÀÚ¿­ÀÇ Ãë¼Ò ·¹ÄÚµå ºÐÇÒ

ApiEdit´Â ¿¬¼ÓÀ¸·Î ÀԷµǴ ¹®ÀÚ¿­ÀÇ Ãë¼Ò ·¹Äڵ带 º´ÇÕÇÑ´Ù. ¸Å ±ÛÀÚ³ª À½¼Ò¸¶´Ù Ãë¼Ò ·¹Äڵ带 ÀÛ¼ºÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î º´ÇÕ Ã³¸®´Â »ý·«ÇÒ ¼ö ¾ø´Ù. ±×·¯³ª Ŭ¸³º¸µå¿¡¼­ ¹®ÀÚ¿­À» ¿¬¼ÓÀûÀ¸·Î ºÙ¿© ³ÖÀ¸¸é °¢ ¹®ÀÚ¿­µéÀÌ ¸ðµÎ º´ÇյǾî ÇÑ ¹ø¿¡ ºÙ¿© ³Ö¾îÁø °Íó·³ ±â·ÏµÈ´Ù. ÀÌ »óÅ¿¡¼­ Ctrl+Z·Î Ãë¼ÒÇÏ¸é ºÙ¿©³Ö¾îÁø ¸ðµç ¹®ÀÚ¿­ÀÌ ÇѲ¨¹ø¿¡ Ãë¼ÒµÇ¾î ºÒÆíÇÏ´Ù. ÀÔ·Â ·¹Äڵ带 Àû´çÈ÷ º´ÇÕÇϱâ´Â Ç쵂 ³Ê¹« ±æÁö ¾Êµµ·Ï °ü¸®ÇÏ´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù.

 

void CApiEdit::URInsert(int nPos, TCHAR *str, int len)

{

     if (CanRedo()) {

          ClearRedo();

     } else {

          if (pUR[nowur].action==UR_INSERT) {

              // »ðÀÔ À§Ä¡°¡ ¿¬¼ÓÀÌ°í ±æÀÌ°¡ 64 ¹Ì¸¸ÀÏ ¶§¸¸ º´ÇÕÇÑ´Ù.

           if (pUR[nowur].pos + pUR[nowur].len==nPos && pUR[nowur].len < 64) {

                   AllocURData(nowur,pUR[nowur].len+len,5);

                   memcpy(pUR[nowur].data+pUR[nowur].len,str,len);

                   pUR[nowur].len+=len;

 

                   // ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÌ °ø¹éÀ̳ª °³Çà ÄÚµåÀÌ¸é ºÐÇÒÇÑ´Ù.

                   if (str[0]==' ' || str[0]=='\r') {

                        NextRecord();

                   }

                   return;

              } else {

          ....

 

°°Àº »ðÀÔ ·¹ÄÚµåÀÌ°í À§Ä¡°¡ ¿¬¼ÓÀûÀÌ´õ¶óµµ ÀÌÀü ·¹ÄÚµåÀÇ ±æÀÌ°¡ 64 ¹Ì¸¸ÀÏ ¶§¸¸ º´ÇÕÇÑ´Ù. À̶§ 64¶ó´Â °ªÀº ´Ü¼øÇÑ ÀÓÀÇ°ªÀε¥ °ø¹éÀ̳ª °³Çà¾øÀÌ ÀÌ Á¤µµ ¹®ÀÚ¿­À» °è¼Ó ÀÔ·ÂÇÒ ¸®°¡ ¾øÀ¸¹Ç·Î ÀÌ Á¤µµ ±æÀÌÀÇ ¹®ÀÚ¿­ÀÌ µé¾î ÀÖ´Ù¸é ÀÌÀü¿¡ Ŭ¸³º¸µå¿¡¼­ ºÙ¿©Áø °ÍÀ¸·Î ÆÇ´ÜÇÏ´Â °ÍÀÌ´Ù. ¼³»ç ÀÌ ÆÇ´ÜÀÌ Æ²·È´Ù ÇÏ´õ¶óµµ Ãë¼Ò ·¹Äڵ常 ºÐÇÒµÉ »Ó Ưº°ÇÑ ºÎÀÛ¿ëÀº ¾ø´Ù.

¿É¼Ç ÀúÀå ÃÖ¼ÒÈ­

´ç±ÙÀº »ç¿ëÀÚ°¡ ¼³Á¤ÇÑ ¿É¼ÇÀ» ·¹Áö½ºÆ®¸®¿¡ öÀúÈ÷ ±â·ÏÇÑ´Ù. ¸ÞÀÎ À©µµ¿ì°¡ Æı«µÇ´Â ½ÃÁ¡ÀÎ OnDestroy¿¡ ´ÙÀ½°ú °°Àº Äڵ尡 ÀÖ´Ù.

 

void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     Option.Save(KEY);

     DgMacro.SaveToReg(KEY);

     DgShortCut.Save(KEY);

     ....

 

¿É¼Ç, ¸ÅÅ©·Î, ´ÜÃàÅ° µîÀ» ¸ðµÎ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÑ´Ù. ¹®Á¦´Â ÀÌ ÇÔ¼öµéÀÇ ¾ÈÂÊÀÌ ³Ê¹« °Å´ëÇؼ­ ·¹Áö½ºÆ®¸®¿¡ ±²ÀåÈ÷ ¸¹Àº °ªµéÀ» ±â·ÏÇÑ´Ù´Â °ÍÀÌ´Ù. °ªÀÌ Á¶±ÝÀÌ¶óµµ º¯°æµÇ¾ú´Ù¸é ÀúÀåÇÏ´Â °ÍÀÌ ¸¶¶¥ÇÏ°ÚÁö¸¸ ±×·¸Áö ¾Ê´Ù¸é ¶È°°Àº °ªÀ» ºÒÇÊ¿äÇÏ°Ô ±â·ÏÇϸç Á¾·á ¼Óµµµµ ´À·ÁÁö°í ¿î¿µÃ¼Á¦µµ ·¹Áö½ºÆ®¸® ij½Ã¿¡ ¸¹Àº ÀÚ¿øÀ» ³¶ºñÇÒ °ÍÀÌ´Ù. ½ÇÁ¦·Î °ªÀÌ ¹Ù²ð ¶§¸¸ ÀúÀåÇÏ´Â °ÍÀÌ È¿À²ÀûÀε¥ °ª º¯°æ ¿©ºÎ¸¦ Á¶»çÇϱâ À§ÇÑ ¸â¹ö¸¦ Ãß°¡ÇÑ´Ù.

 

struct SOption

{

     BOOL bModified;

     ....

 

SOption::SOption()

{

     int i;

     for (i=0;i<sizeof(arFtp)/sizeof(arFtp[0]);i++) {

          lstrcpy(arFtp[i].Name,"");

     }

     Init();

     bModified=FALSE;

}

 

class CMacro

{

public:

     CMacro();

     ~CMacro();

 

     SMacro *arMacro;

     int Size;

     int Num;

     BOOL bModified;

 

CMacro::CMacro()

{

     Size=0;

     Num=0;

     arMacro=NULL;

     bModified=FALSE;

}

 

class CShortCut

{

public:

     SShortCut *arShortCut;

     BOOL bModified;

 

CShortCut::CShortCut()

{

     arShortCut=NULL;

     bModified=FALSE;

}

 

°¢ Ŭ·¡½º¿¡ bModified ¸â¹ö¸¦ Ãß°¡ÇÏ°í »ý¼ºÀÚ¿¡¼­ FALSE·Î ÃʱâÈ­ÇÑ´Ù. ±×¸®°í ÀÌ ±¸Á¶Ã¼°¡ Á¶±ÝÀÌ¶óµµ º¯°æµÉ ¶§ TRUE·Î º¯°æÇÑ´Ù. ¿É¼ÇÀÇ °æ¿ì´Â ´ÙÀ½ ÇÑ ÁÙ¸¸ ÀÛ¼ºÇÏ¸é µÈ´Ù.

 

void Config()

{

     PROPSHEETPAGE psp[11];

     PROPSHEETHEADER psh;

 

     NewOption=Option;

     NewOption.bModified=TRUE;

     ....

 

NewOptionÀÇ bModified¸¦ TRUE·Î ÃʱâÈ­Çϸé ApplyNow¿¡¼­ ÀÌ ±¸Á¶Ã¼¸¦ Option¿¡ ´ëÀÔÇÒ °ÍÀÌ´Ù. »ç¿ëÀÚ°¡ ±âº» ¼³Á¤ ´ëÈ­»óÀÚ¸¦ ¿­¾î¼­ ¿É¼ÇÀº º¯°æÇÏÁö ¾Ê°í ¹Ù·Î ´Ý¾Ò´Ù¸é OptionÀº º¯ÇÏÁö ¾Ê´Â´Ù. ¼³»ç ¿É¼ÇÀ» º¯°æÇß´Ù ÇÏ´õ¶óµµ Ãë¼Ò ¹öÆ°À» ´­·¯ NewOptionÀ» OptionÀ¸·Î ´ëÀÔÇÏÁö ¾ÊÀ¸¸é ¸ðµç ¿É¼Ç º¯°æÀº ¹«È¿°¡ µÈ´Ù. ´ÜÃàÅ°¿Í ¸ÅÅ©·Î´Â °ü¸® ´ëÈ­»óÀÚ¸¦ ¿­ ¶§ º¯°æµÈ °ÍÀ¸·Î °£ÁÖÇÑ´Ù.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     case IDM_TOOL_MACRO:

          DgMacro.bModified=TRUE;

          DgShortCut.bModified=TRUE;

          DialogBox(g_hInst,MAKEINTRESOURCE(IDD_MACRO),hWnd,MacroDlgProc);

          break;

     case IDM_TOOL_SHORTCUT:

          DgShortCut.bModified=TRUE;

          DialogBox(g_hInst,MAKEINTRESOURCE(IDD_SHORTCUTLIST),hWnd,ShortCutListProc);

          break;

 

´ëÈ­»óÀÚ¸¦ ¿­Áö ¾Ê°í ´ÜÃàÅ°³ª ¸ÅÅ©·Î¸¦ ÆíÁýÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ÀÌ ±æ¸ñÀ» ÁöÅ°°í ÀÖÀ¸¸é º¯°æ ½ÃÁ¡À» È®½ÇÈ÷ ¾Ë ¼ö ÀÖ´Ù. ¹°·Ð ´ëÈ­»óÀÚ¸¦ ´Ü¼øÈ÷ ¿­±â¸¸ ÇÏ°í ¹Ù·Î ´Ý¾Æµµ º¯°æµÈ °ÍÀ¸·Î °£ÁÖÇϴµ¥ ÀÌ·¸°Ô µÇ¸é ºÒÇÊ¿äÇÏ°Ô ·¹Áö½ºÆ®¸®¿¡ Áߺ¹ ÀúÀåÇÏ°ÚÁö¸¸ ±×·¸´Ù°í Çؼ­ º° ºÎÀÛ¿ëÀº ¾ø´Ù. ½ÇÁ¦·Î ¸ÅÅ©·Î¿Í ´ÜÃàÅ°°¡ ÆíÁýµÇ¾ú´ÂÁö¸¦ Á¤È®ÇÏ°Ô ÆÇ´ÜÇÏ´Â °Íµµ °¡´ÉÀº ÇÏ°ÚÁö¸¸ ±×´ÙÁö Á¤È®ÇÒ ÇÊ¿äµµ ¾ø´Ù. ¿É¼ÇµéÀÌ º¯°æµÇ´Â ¶Ç´Ù¸¥ ½ÃÁ¡Àº ÃÖÃÊ ¼³Ä¡µÉ ¶§ÀÌ´Ù.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     if (SHRegReadInt(SHCU,KEY"Setting","StartAction",1000) == 1000) {

          Option.GetStyleColor();

          DgShortCut.Init();

          FindFlag=AE_FIND_WRAP | AE_FIND_RECURSIVE | AE_FIND_SHORTPATH;

          arFind[3].num=2;

          arFind[3].Set(0,"*.*");

          arFind[3].Set(1,"*.cpp;*.hpp;*.c;*.h;*.inl");

        Option.bModified=TRUE;

        DgMacro.bModified=TRUE;

        DgShortCut.bModified=TRUE;

     } else {

     ....

 

ÃÖÃÊ ¼³Ä¡½Ã´Â ·¹Áö½ºÆ®¸®¿¡¼­ °ªÀ» ÀÐÁö ¾Ê°í º°µµÀÇ ÃʱâÈ­ ÇÔ¼ö¸¦ È£ÃâÇϴµ¥ À̶§´Â »ç¿ëÀÚ°¡ Á÷Á¢ ÆíÁýÇÏÁö ¾Ê¾Ò´õ¶óµµ Á¾·áÇÒ ¶§ ¹«Á¶°Ç ¿É¼ÇÀ» ÀúÀåÇØ¾ß ÇÑ´Ù. °¢ Ŭ·¡½º°¡ º¯°æ ¿©ºÎ¸¦ ½º½º·Î °ü¸®ÇϹǷΠÁ¾·á½ÃÀÇ ¿É¼Ç ÀúÀå ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¸é µÈ´Ù.

 

void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     // ÀúÀåÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§¸¸ ÀúÀåÇÑ´Ù.

     if (Option.bModified) Option.Save(KEY);

     if (DgMacro.bModified) DgMacro.SaveToReg(KEY);

     if (DgShortCut.bModified) DgShortCut.Save(KEY);

     ....

 

½ÇÁ¦·Î º¯°æµÈ ¿É¼Ç¿¡ ´ëÇؼ­¸¸ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇß´Ù. ÀÌ·¸°Ô Çϸé Á¾·á ¼Óµµ°¡ ÈξÀ ´õ »¡¶óÁø´Ù.

³ª.¼Ò½º Á¤¸®

±³À°¿ë ÇÁ·ÎÁ§Æ®¸¦ °³¹ßÇÏ´Ù º¸´Ï ´Ü°è¼øÀ¸·Î ½Ç½ÀÀ» ÁøÇàÇÒ ¼ö¹Û¿¡ ¾ø°í ±×·¯´Ù º¸´Ï ¼Ò½º°¡ ¹«Ã´À̳ª ÁöÀúºÐÇÑ °÷ÀÌ ÀÖ´Ù. ´ëÇ¥ÀûÀ¸·Î Dangeun.cppÀÇ OnInitMenu ÇÔ¼ö¸¦ µé ¼ö Àִµ¥ ¸Þ´º Ç׸ñÀÌ ¸Å¹ø ÇÑ µÎ°³¾¿ °³º°ÀûÀ¸·Î Ãß°¡µÇ°í ±×·¸´Ù º¸´Ï ÀÌ ¸Þ´º Ç׸ñÀ» °ü¸®ÇÏ´Â Äڵ嵵 °³º°ÀûÀ¸·Î Ãß°¡µÇ¾î ¿ÏÀüÈ÷ ¾û¸ÁÀÌ µÇ¾î ¹ö·È´Ù. ´ÙÀ½°ú °°ÀÌ ±ò²ûÇÏ°Ô Á¤¸®ÇÏÀÚ.

 

#define DGCHECKMENUITEM(ID,Con) CheckMenuItem(hMenu,ID, MF_BYCOMMAND | ((Con) ? MF_CHECKED:MF_UNCHECKED))

#define DGENABLEMENUITEM(ID,Con) EnableMenuItem(hMenu,ID, MF_BYCOMMAND | ((Con) ? MF_ENABLED:MF_GRAYED))

void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     HMENU hMenu;

     HWND hActive;

     SInfo *pSi;

     int s,e;

     CApiEditText *pView;

     BOOL bHexa,bText,bSel;

 

     hMenu=(HMENU)wParam;

     UpdateMenuCaption(hMenu);

     hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

     if (hActive) {

          pSi=(SInfo *)GetWindowLongPtr(hActive,0);

          pView=pSi->Ae.GetActiveView();

 

          // Çí»ç ºä¿Í ¼±Åÿµ¿ª À¯¹« ¹Ì¸® Á¶»ç

          bHexa=(pView->ViewType==HEXA_VIEW);

          bText=(pView->ViewType==TEXT_VIEW);

          pSi->Ae.GetSelect(s,e);

          bSel=(s != e);

 

          DGENABLEMENUITEM(IDM_EDIT_VIRT,bText);

          DGENABLEMENUITEM(IDM_EDIT_COLUMN,bText);

          DGENABLEMENUITEM(IDM_TOOL_PARA,bText);

          DGCHECKMENUITEM(IDM_EDIT_VIRT,pView->GetVirtualPos() && bText);

          DGCHECKMENUITEM(IDM_EDIT_COLUMN,pView->GetColumnMode() && bText);

          DGCHECKMENUITEM(IDM_VIEW_HEXA,bHexa);

 

          DGCHECKMENUITEM(IDM_FILE_READONLY,pSi->Ae.GetReadOnly());

          DGENABLEMENUITEM(IDM_FILE_REVERT,pSi->Ae.GetModified() &&

              strncmp(pSi->NowFile,"À̸§¾øÀ½",8)!=0);

 

          DGENABLEMENUITEM(IDM_EDIT_CUT,bSel);

          DGENABLEMENUITEM(IDM_EDIT_COPY,bSel);

          DGENABLEMENUITEM(IDM_EDIT_CUTAPPEND,bSel);

          DGENABLEMENUITEM(IDM_EDIT_COPYAPPEND,bSel);

          DGENABLEMENUITEM(IDM_EDIT_UPPERSENT,bSel);

          DGENABLEMENUITEM(IDM_EDIT_TOTAB,bSel && !bHexa);

          DGENABLEMENUITEM(IDM_EDIT_TOSPACE,bSel && !bHexa);

          DGENABLEMENUITEM(IDM_EDIT_PASTE,IsClipboardFormatAvailable(CF_TEXT)==FALSE);

 

          DGCHECKMENUITEM(IDM_VIEW_WORDWRAP,pSi->Ae.GetWrap() != 0);

          DGCHECKMENUITEM(IDM_VIEW_CODE,pSi->Ae.GetShowState(SHOWENTER));

 

          // ÁÙ°£ Ç¥½Ã

          for (s=IDM_LINE_1;s<=IDM_LINE_5;s++) DGCHECKMENUITEM(s,FALSE);

          switch (pSi->Ae.GetLineRatio()) {

          case 100:DGCHECKMENUITEM(IDM_LINE_1,TRUE);break;

          case 120:DGCHECKMENUITEM(IDM_LINE_2,TRUE);break;

          case 150:DGCHECKMENUITEM(IDM_LINE_3,TRUE);break;

          case 200:DGCHECKMENUITEM(IDM_LINE_4,TRUE);break;

          case 300:DGCHECKMENUITEM(IDM_LINE_5,TRUE);break;

          }

 

          DGENABLEMENUITEM(IDM_EDIT_UNDO,pSi->Ae.CanUndo());

          DGENABLEMENUITEM(IDM_EDIT_REDO,pSi->Ae.CanRedo());

 

          // ¹®¹ý Ç¥½Ã

          for (s=IDM_SYN_NONE;s<=IDM_SYN_SQL;s++) DGCHECKMENUITEM(s,FALSE);

          switch (int(pSi->Ae.GetParser()->GetInfo(0))) {

          case 0:DGCHECKMENUITEM(IDM_SYN_NONE,TRUE);break;

          case 1:DGCHECKMENUITEM(IDM_SYN_CPP,TRUE);break;

          case 2:DGCHECKMENUITEM(IDM_SYN_HTML,TRUE);break;

          case 3:DGCHECKMENUITEM(IDM_SYN_SQL,TRUE);break;

          }

 

          DGENABLEMENUITEM(IDM_SEARCH_NEXT,lstrlen(arFind[0].Get(0)) != 0);

          DGENABLEMENUITEM(IDM_SEARCH_PREV,lstrlen(arFind[0].Get(0)) != 0);

          DGENABLEMENUITEM(IDM_EDIT_INDENT,!bHexa);

          DGENABLEMENUITEM(IDM_EDIT_UNINDENT,!bHexa);

          DGENABLEMENUITEM(IDM_EDIT_COPYUP,!bHexa);

          DGENABLEMENUITEM(IDM_EDIT_COPYDOWN,!bHexa);

 

          DGENABLEMENUITEM(IDM_EDIT_COMMENT,lstrlen(pSi->Ae.GetParser()->GetInfo(2)) && !bHexa);

          DGENABLEMENUITEM(IDM_EDIT_UNCOMMENT,lstrlen(pSi->Ae.GetParser()->GetInfo(2)) && !bHexa);

 

          // ¹®¼­ Æ÷¸Ë Ç¥½Ã

          switch (pSi->Ae.GetFormat()) {

          case AE_FORMAT_WIN:

              CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_WIN,MF_BYCOMMAND);

              break;

          case AE_FORMAT_UNIX:

              CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UNIX,MF_BYCOMMAND);

              break;

          case AE_FORMAT_MAC:

              CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_MAC,MF_BYCOMMAND);

              break;

          case AE_FORMAT_UNICODE:

              CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UNICODE,MF_BYCOMMAND);

              break;

          case AE_FORMAT_UNIBIG:

              CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UNIBIG,MF_BYCOMMAND);

              break;

          case AE_FORMAT_UTF8:

              CheckMenuRadioItem(hMenu,IDM_FILE_WIN,IDM_FILE_UTF_8,IDM_FILE_UTF_8,MF_BYCOMMAND);

              break;

          }

     }

 

     DGCHECKMENUITEM(IDM_VIEW_OUTPUT,bShowOutput);

     DGCHECKMENUITEM(IDM_VIEW_TOOLBAR,Option.bShowToolBar);

     DGCHECKMENUITEM(IDM_VIEW_STATUS,Option.bShowStatus);

     DGCHECKMENUITEM(IDM_VIEW_FILE,Option.bShowFileWnd);

     DGCHECKMENUITEM(IDM_VIEW_FILETAB,Option.bShowFileTab);

     DGCHECKMENUITEM(IDM_EDIT_COMMODE,bComMode);

     DGCHECKMENUITEM(IDM_VIEW_CLIP,Option.bShowClipWnd);

}

 

¸Þ´º Ç׸ñÀÇ »ç¿ë °¡´É¼º ¿©ºÎ¿Í üũ ¿©ºÎ¸¦ Á¦¾îÇÏ´Â µÎ °³ÀÇ ¸ÅÅ©·Î ÇÔ¼ö¸¦ Á¤ÀÇÇÏ°í ÀÌ ÇÔ¼öµé·Î ¸Þ´º Ç׸ñÀ» °ü¸®Çß´Ù. °ü¸® ´ë»ó°ú Á¶°Ç¸¸ Àμö·Î Àü´ÞÇϹǷΠÀб⠽±°í ¼Ò½º·®µµ ÈξÀ ´õ ÁÙÀÏ ¼ö ÀÖ´Ù. »Ó¸¸ ¾Æ´Ï¶ó »ïÇ× Á¶°Ç ¿¬»êÀÚ·Î Àμö¸¸ ¼±ÅÃÇÏ°í ¸Å¹ø ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾ÊÀ½À¸·Î½á ¼Óµµ¿Í Å©±â¿¡µµ À¯¸®ÇÏ´Ù. ÇÔ¼ö ³»ºÎ´Â µû·Î ºÐ¼®ÇÏÁö ¾Ê¾Æµµ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ¿Ü¿¡µµ OnIdle, ApplyNow, SetSetting µîÀÇ ÇÔ¼öµµ Á¤¸® ´ë»óÀÌ´Ù. ´õ Á¤¸®ÇÒ¸¸ÇÑ °÷ÀÌ ¾îµð ÀÌ »ÓÀ̰ڴ°¡¸¸ ´ëÃæ Á¤¸®ÇÏ´Â Èä³»¸¸ ³»±â·Î ÇÑ´Ù. ÀÌ·± ½ÄÀ¸·Î ¼Ò½º¸¦ Á¤¸®ÇÏ´Ù°¡´Â ¾Æ¸¶ Àüü ¼Ò½º¸¦ ´Ù½Ã ÀÛ¼ºÇØ¾ß ÇÒ °ÍÀÌ´Ù. ´ÙÀ½¿¡ ¹®¼­È­°¡ ³¡³­ ÈÄ¿¡ Çѹø¿¡ Á¤¸®ÇÒ »ý°¢ÀÌ´Ù.

´Ù.¹ö±× ¼öÁ¤

¾ËÆÄ 5 ¹öÀü±îÁö ´ç±ÙÀº ¹«¼öÈ÷ ¸¹Àº ¹ö±×µéÀÌ Á¸ÀçÇß´Ù. »ç¼ÒÇÑ ¹ö±×³ª ´Ü¼ø ¿ÀŸµéÀÌ ¸¹Áö¸¸ °¡²û¾¿ ÇÁ·Î±×·¥À» ´Ù¿î½ÃÅ°´Â Ä¡¸íÀûÀÎ ¹ö±×µµ ÀÖ¾ú´Ù. °³¹ß ÀÚü¿¡¸¸ ³Ê¹« Ä¡ÁßÇÏ´Ù º¸´Ï Á» Ȳ´çÇÑ ¹ö±×µµ ÀÖ¾ú´Âµ¥ ¾îÂ÷ÇÇ °³¹ßÀÚ¿¡°Ô ¹ö±×´Â ÇÇÇÒ ¼ö ¾ø´Â ¼÷¸íÀÌ´Ù. ÀÌ ¹ö±×µé ´ëºÎºÐÀº ¾ÕÂÊÀÇ ½Ç½À °úÁ¤À» ¼öÁ¤ÇÏ¿© ÀÌ¹Ì ÇØ°áÇØ ³õ¾Ò´Ù. ¸¶Áö¸·¿¡ ¹ß°ßµÈ ¸î °¡Áö »ç¼ÒÇÑ ¹®Á¦¸¸ ÇØ°áÇÏ¸é µÈ´Ù.

ÆÄÀÏ ¿ÀÇ Á÷ÈÄÀÇ »óŶõ Á¤º¸Áß ÀϺΰ¡ ºÎÁ¤È®ÇÑ ¹®Á¦°¡ ÀÖ´Ù. ƯÈ÷ ÁÙ ¼ö°¡ Á¦´ë·Î °»½ÅµÇÁö ¾Ê´Âµ¥ ÆÄÀÏÀ» ¿©´Â ¹æ¹ý¿¡ µû¶ó µÇ´Â °æ¿ìµµ ÀÖ°í ¾ÈµÇ´Â °æ¿ìµµ ÀÖ´Ù. ¹®¼­°¡ Á¤·ÄµÇ°í ³­ ÈÄ¿¡ ÅëÁö ¸Þ½ÃÁö¸¦ ¹Þ´Â°¡ ¾Æ´Ï¸é Á¤·ÄÀü¿¡ ÅëÁö ¸Þ½ÃÁö¸¦ ¹Þ´Â°¡¿¡ µû¶ó ´Þ¶óÁö´Âµ¥ ÆÄÀÏÀ» ¿¬ ÈÄ ¹«Á¶°Ç »óŶõÀ» °»½ÅÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.

 

BOOL OpenFileToChild(HWND hChild, TCHAR *Path)

{

     ....

     SetStatusText(0xffff);

     return TRUE;

}

 

ÀϹÝÀûÀ¸·Î ÆÄÀÏÀÌ ¹Ù²î¸é ¿µÇâÀ» ¹Þ´Â Á¤º¸°¡ ¸¹À¸¹Ç·Î »óŶõÀÇ ¸ðµç ÆÄÆ®¸¦ ÀüºÎ ´Ù½Ã °»½ÅÇß´Ù. ÆÄÀÏÀ» ¿©´Â µ¿ÀÛÀº ±×´ÙÁö ÀÚÁÖ ÀÖ´Â ÀÏÀÌ ¾Æ´Ï¹Ç·Î Àüü¸¦ ´Ù ¹Ù²ãµµ ¼Óµµ»óÀÇ ºÒÀÌÀÍÀº °ÅÀÇ ¾ø´Ù.

Åø¹ÙÀÇ ÀúÀå ¹öÆ° µ¿ÀÛÀÌ Á¶±Ý ÀÌ»óÇѵ¥ ´Ù¸¥ ¹öÆ°°ú´Â ´Þ¸® ´­·¯µµ ¾¦ µé¾î°¡Áö ¾ÊÀ¸¸ç Ç×»ó À§·Î ¼Ú¾Æ ÀÖ´Ù. OnIdle¿¡¼­ ÀÌ ¹öÆ°À» °ü¸®ÇÒ ¶§ È°¼ºÃ¢ÀÌ Àִ°¡¿¡ µû¶ó »ç¿ë°¡´É¼ºÀ» °ü¸®Çϴµ¥ ¹öÆ°À» ´©¸¦ ¶§µµ »óŸ¦ °­Á¦·Î º¯°æÇϱ⠶§¹®¿¡ Ç×»ó »ç¿ë °¡´ÉÇϸ鼭 ¾÷µÈ »óÅ·θ¸ º¸ÀÌ´Â °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void OnIdle()

{

void OnIdle()

{

     HWND hActive;

     SInfo *pSi;

     int s,e;

     CApiEditText *pView;

 

     hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

     if (hActive) {

          pSi=(SInfo *)GetWindowLongPtr(hActive,0);

          pView=pSi->Ae.GetActiveView();

          // ÀúÀå ¹öÆ°Àº »ç¿ë±ÝÁö »óÅÂÀÏ ¶§¸¸ »óŸ¦ º¯°æÇÑ´Ù.

        if ((SendMessage(hToolBar,TB_GETSTATE,IDM_FILE_SAVE,0) & TBSTATE_ENABLED)==0) {

              SendMessage(hToolBar,TB_SETSTATE,IDM_FILE_SAVE,MAKELONG(TBSTATE_ENABLED,0));

        }

 

          pSi->Ae.GetSelect(s,e);

     ....

 

»ç¿ë ±ÝÁö »óÅÂÀÏ ¶§¸¸ »ç¿ë°¡´ÉÇÏ°Ô º¯°æÇÏ°í ±×·¸Áö ¾ÊÀ» °æ¿ì´Â ÀúÀå ¹öÆ°ÀÇ »óŸ¦ º°µµ·Î Á¶ÀÛÇÏÁö ¾Ê´Â´Ù. Á¶°Ç¸¸ Çϳª¸¸ Ãß°¡Çϸé ÀÏ¹Ý ¹öưó·³ Á¦´ë·Î µ¿ÀÛÇÑ´Ù.

¶ó.µðÆúÆ® ¼³Á¤ Á¶Á¤

Á¦Ç°À» ¸±¸®ÁîÇϱâ Àü¿¡ µðÆúÆ® ¿É¼ÇÀ» ÀûÀýÇÏ°Ô ¼öÁ¤ÇÑ´Ù. ¿É¼ÇÀ̶ó´Â °ÍÀº »ç¿ëÀÚ°¡ ¾ðÁ¦µçÁö ¼öÁ¤ÇÒ ¼ö ÀÖÁö¸¸ ´ëºÎºÐÀÇ »ç¿ëÀÚµéÀº ¿É¼ÇÀ» Á¶Á¤ÇÏÁö ¾Ê°í °³¹ß»ç°¡ óÀ½ ¸ÂÃç ³õÀº µðÆúÆ®¸¦ ±×´ë·Î »ç¿ëÇÑ´Ù. µû¶ó¼­ ¸±¸®Áî¿¡ Àû¿ëµÈ ¿É¼ÇÀº ½ÇÁúÀûÀ¸·Î »ç¿ëÀÚµéÀÌ Ã³À½ º¸´Â Á¦Ç°ÀÇ ¸ð½ÀÀ» ¹Ý¿µÇÏ¸ç ¼±ÅõÇÁö ¾ÊÀº ¿É¼ÇÀº ±â´ÉÀÇ Á¸À縦 ¾ËÁöµµ ¸øÇÏ´Â °æ¿ì°¡ Çã´ÙÇÏ´Ù. ±×·¡¼­ »ó¿ë ÇÁ·Î±×·¥µéÀº ÃÖ´ëÇÑ ¸ðµç ±â´ÉÀ» ´Ù ¼±ÅÃÇÑ Ã¤·Î ¸±¸®ÁîÇÏ¿© ±â´ÉÀÇ Á¸À縦 Àû±ØÀûÀ¸·Î ¾Ë¸°´Ù.

ÇÏÁö¸¸ ´ç±ÙÀº »ó¿ë ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï¹Ç·Î ÀÚ½ÅÀÇ ¸ðµç ±â´ÉÀ» ¾Ö½á »Ë³¾ ÇÊ¿ä°¡ ¾ø´Ù. »ç¿ëÀÚ°¡ ºÒÆíÇÏÁö ¾ÊÀ» Á¤µµÀÇ ±âº» ¿É¼Ç¸¸ ¼±ÅÃÇÏ°í ³ª¸ÓÁö´Â ¾Ë¾Æ¼­ ¾²µµ·Ï ±â´ÉÀ» °¨Ãá´Ù. ÀÌ·¸°Ô µÇ¸é Èûµé°Ô ¸¸µç ÀϺΠ±â´ÉÀº È°¿ëµÇÁö ¸øÇÏ´Â ¾Ö¼®ÇÔÀÌ ÀÖÁö¸¸ °í±Þ ±â´ÉÀ» µå·¯³»´Â °Íº¸´Ù ÀÚ¿¬½º·¯¿òÀ» ´õ Áß¿ä½ÃÇÑ´Ù´Â ÀÔÀåÀÌ´Ù. µðÆúÆ® ¿É¼Ç Áß ÀϺθ¦ Á¶Á¤ÇÑ´Ù.

 

void SOption::Init()

{

     int i;

 

     StartAction=2;

    bExplorerPopup=TRUE;

     ....

    MaxMru=3;

     ....

    bShowFileWnd=TRUE;

     ....

    bWrap=TRUE;

     ....

    memset(&logfont,0,sizeof(LOGFONT));

    lstrcpy(logfont.lfFaceName,"±¼¸²");

    logfont.lfHeight=10;

    logfont.lfCharSet=HANGEUL_CHARSET;

    logfont.lfPitchAndFamily=VARIABLE_PITCH | FF_MODERN;

     ....

    bUseLineEnd=FALSE;

 

 

Ž»ö±â Æ˾÷ ¸Þ´º¸¦ ±âº»À¸·Î ¼±ÅÃÇߴµ¥ 1.2¿¡¼­´Â COM °´Ã¼¸¦ Á¦´ë·Î ¸¸µé¾úÀ¸¹Ç·Î ¸ðµç À©µµ¿ìÁî ¹öÀü¿¡ º° ¹®Á¦°¡ ¾ø´Ù. µðÆúÆ®°¡ TRUEÀ̹ǷΠ¼³Ä¡ ´ëÈ­»óÀÚ¿¡¼­ ¿É¼Ç ºñ¼±Åýà FALSE·Î ¹Ù²Ùµµ·Ï Äڵ带 ¼öÁ¤ÇÑ´Ù. ¼³Á¤ ´ëÈ­»óÀÚ¿¡¼­ Æ˾÷ ¿É¼ÇÀ» ²ø ¶§¸¸ Æ˾÷ ¸Þ´º¸¦ ´ÞÁö ¾Ê´Â´Ù.

 

BOOL CALLBACK SetupDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDOK:

          case IDCANCEL:

              if (IsDlgButtonChecked(hDlg,IDC_IS_POPUP)==BST_CHECKED) {

                   RegisterPopup(TRUE);

               Option.bExplorerPopup=TRUE;

           } else {

               Option.bExplorerPopup=FALSE;

           }

 

MRU´Â ±âº» 20°³·Î ´Ã·È´Âµ¥ ¸¹¾Æ¼­ ³ª»Ü °Ç ¾øÀ¸¹Ç·Î Á» ¿©À¯ÀÖ°Ô Çß´Ù. ÆÄÀÏâÀº ±âº»ÀûÀ¸·Î Ç¥½ÃÇÏ°í ±Û²ÃÀº ±¼¸² 10Æ÷ÀÎÆ®·Î ¸ÂÃß¾ú´Ù. ½Ã½ºÅÛ ±Û²ÃÀº º°·Î ¿¹»ÚÁöµµ ¾Ê°í ÁÁÁö ¾Ê¾Æ °¡Àå ¹«³­ÇÑ ±Û²ÃÀ» ¼±ÅÃÇߴµ¥ ÀÌ·¸°Ô ±Û²ÃÀ» °íÁ¤ÇØ ¹ö¸®¸é ±¹Á¦È­¿¡´Â ºÒ¸®ÇÏ´Ù. ApiEdit¿¡ ±Û²ÃÀ» Àû¿ëÇÏ´Â SetSetting ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù.

 

void SetSetting(CApiEdit &Ae)

{

     ....

    if (Option.logfont.lfHeight != 0) {

          tFont=Option.logfont;

          hdc=GetDC(NULL);

          tFont.lfHeight=Option.logfont.lfHeight*GetDeviceCaps(hdc,LOGPIXELSY)/72;

          tFont.lfWidth=0;

          ReleaseDC(NULL,hdc);

          Ae.SetFont(&tFont);

     }

 

³ôÀÌ°¡ 0ÀÌ ¾Æ´Ï¸é, Áï ½Ã½ºÅÛ ÆùÆ®°¡ ¾Æ´Ï¸é ¹«Á¶°Ç ÆùÆ®¸¦ Àû¿ëÇØ¾ß ÇÑ´Ù. ÀÚµ¿ °³ÇàÀº ¾Æ¹«·¡µµ óÀ½ºÎÅÍ Àû¿ëÇÏ´Â °ÍÀÌ ÁÁÀ» °Í °°°í bUseLineEnd´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù. ¾Æ¹«·¡µµ ºÎÀÚ¿¬½º·¯¿ö º¸ÀδÙ. ÀÌ µÎ ¿É¼ÇÀº ÄÁÆ®·ÑÀÇ µðÆúÆ®µµ ¼öÁ¤ÇÑ´Ù.

 

void CApiEditText::SetDefaultSetting()

{

     if (pLine) {

          SetLineRatio(120);

        SetWrap(2);

          SetTabWidth(4);

          SetShowState(SHOWMARGIN,TRUE);

     } else {

          LineRatio=120;

        nWrap=2;

          TabWidth=4;

          MarginWidth=25;

     }

 

CApiEdit::CApiEdit()

{

     ....

    bUseLineEnd=FALSE;

 

C ±¸¹® ºÐ¼®±âÀÇ µðÆúÆ® »ö»óµµ Á¶±Ý ¼öÁ¤ÇÑ´Ù. ´ç±Ù 1.0Àº ¼ýÀÚ¸¦ ÆĶõ»öÀ¸·Î Å°¿öµå¸¦ »¡°£»öÀ¸·Î Ç¥½ÃÇϴµ¥ ´«¿¡ ´õ Àß ¶ç´Â ÆĶõ»öÀ» ºóµµ°¡ ³ôÀº Å°¿öµå Ç¥½Ã¿¡ »ç¿ëÇÏ´Â °ÍÀÌ ´õ ÁÁÀ» °Í °°´Ù. ¹°·Ð »ç¿ëÀÚ°¡ ¾ðÁ¦µçÁö ÆíÁýÇÒ ¼ö ÀÖ´Â ´ë»óÀ̱â´Â ÇÏÁö¸¸ µðÆúÆ®¸¦ ¹«³­ÇÏ°Ô ¼³Á¤ÇÏ¿© ÆíÁýÇÏÁö ¾Ê°íµµ ¹Ù·Î ¾µ ¼ö ÀÖ´Â °ÍÀÌ ´õ ÁÁ´Ù. CParseCpp Ŭ·¡½º »ý¼ºÀÚÀÇ Ãʱ⠻ö»ó¸¸ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¸é µÈ´Ù.

 

CParseCpp::CParseCpp()

{

     ....

     lstrcpy(arStyle[4].name,"¼ýÀÚ");

    arStyle[4].fore=RGB(255,0,0);

     lstrcpy(arStyle[5].name,"Å°¿öµå");

    arStyle[5].fore=RGB(0,0,255);

     lstrcpy(arStyle[6].name,"Àü󸮱â");

     arStyle[6].fore=RGB(255,0,255);

}

 

ÃÖÃÊ ½ÇÇà½Ã ÆÄÀÏâ, »ó¿ë±¸ âÀÌ ´Ù º¸À̴µ¥ ¾Æ¹« °Íµµ Ç¥½ÃµÇÁö ¾Ê´Â °ÍÀº È¥¶õÀ» ÁÙ ¼ö ÀÖ´Ù. ƯÈ÷ »ó¿ë±¸ âÀº óÀ½ ½ÇÇàÇÏ¸é ¸Ö°Ç Èò À©µµ¿ì¸¸ º¸¿©, Àú°Ô Æ®¸®ºäÀÎÁö, ¸®½ºÆ® ¹Ú½ºÀÎÁöµµ ±¸ºÐÀÌ ¾ÈµÇ¸ç ¿ëµµ¸¦ ÁüÀÛÇϱ⵵ ¾î·Æ´Ù. ±×·¡¼­ ÃÖÃÊ ½ÇÇà½Ã »ùÇà ÆÄÀÏÀ» ¿¬´Ù. OnTimer¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     TCHAR Drive[_MAX_DRIVE];

     TCHAR Dir[_MAX_DIR];

 

     switch (wParam) {

     ....

     case 100:

          ....

          // óÀ½ ½ÇÇàÇÒ ¶§ »ùÇà ÇÁ·ÎÁ§Æ®¿Í »ó¿ë±¸¸¦ ¿¬´Ù

        if (SHRegReadInt(SHCU,KEY"Project","Num",101092)==101092) {

           SHRegReadString(SHCU,KEY"Setting","InstPath","",Path,MAX_PATH);

           _splitpath(Path,Drive,Dir,NULL,NULL);

           wsprintf(Path,"%s%sSample.dgp",Drive,Dir);

           if (_access(Path,0)==0) {

               LoadProject(Path,FALSE);

           }

           wsprintf(Path,"%s%sSample.dgc",Drive,Dir);

           if (_access(Path,0)==0) {

               LoadClipFile(Path,FALSE);

           }

        }

 

          Option.bMaxFirstChild=bOldMaxFirstChild;

          SHRegReadString(SHCU,KEY"Setting","LastFolder","",Path,MAX_PATH);

          GotoFolderInTree(Path);

          break;

     }

}

 

óÀ½ ½ÇÇàÇßÀ¸¸é ·¹Áö½ºÆ®¸®¿¡´Â InstPath Å°¸¸ ÀÖ°í ¾ÆÁ÷ ¾Æ¹« Å°µµ ¾ø´Ù. Project ¼­ºêÅ°ÀÇ NumÀ» ÀÐ¾î º¸µÇ µðÆúÆ®¸¦ 101092·Î ÁÖ°í ÀÌ °ªÀÌ ±×´ë·Î ¸®ÅϵǸé óÀ½ ½ÇÇàÇÑ °ÍÀ¸·Î ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. óÀ½ ½ÇÇàÇßÀ¸¸é ¼³Ä¡ Æú´õ¿¡ ÀÖ´Â Sample.dgp, Sample.dgc¸¦ ¿¬´Ù. ÀÌ ±â´ÉÀÌ Á¦´ë·Î µ¿ÀÛÇÏ·Á¸é ¹èÆ÷ÇÒ ¶§ Dangeun.exe¿Í »ùÇà ÆÄÀϵéÀ» °°ÀÌ ¹èÆ÷ÇØ¾ß ÇÑ´Ù. ¹°·Ð Çʼö ÆÄÀÏÀº ¾Æ´Ï´Ù. ¸¸¾à ´©±º°¡°¡ Dangeun.exe¸¸ º¹»çÇؼ­ ½ÇÇàÇß´õ¶óµµ »ùÇà ÆÄÀÏÀÌ ¿­¸®Áö ¾ÊÀ» »ÓÀÌÁö µ¿ÀÛ¿¡´Â ¾Æ¹« ¹®Á¦°¡ ¾ø¾î¾ß ÇÑ´Ù. ÆÄÀÏÀÇ Á¸Àç ¿©ºÎ¸¦ ¸ÕÀú Á¶»çÇÏ¿© ¿¡·¯ ¸Þ½ÃÁöÁ¶Â÷µµ Ãâ·ÂÇÏÁö ¾Ê¾Ò´Ù. ¾øÀ¸¸é ¾ø´Â´ë·Î ±×³É Á¶¿ëÈ÷ ½ÇÇàµÇ¾î¾ß ÇÑ´Ù.

¸¶Áö¸·À¸·Î Á¤È®ÇÑ ¹öÀüÀ» Ç¥½ÃÇÑ´Ù. ÇÁ·Î±×·¥ÀÇ ¹öÀüÀº ¿©·¯ ±ºµ¥ Ç¥½ÃµÇ´Âµ¥ ´ç±ÙÀÇ °æ¿ì ÇÁ·Î±×·¥ ¼Ò°³ ´ëÈ­»óÀÚ¿Í ¸ÞÀÎ À©µµ¿ì¿¡ Ç¥½ÃµÈ´Ù. About ´ëÈ­»óÀÚ¿¡ ÇöÀç ¾ËÆÄ 5¶ó°í µÇ¾î Àִµ¥ º£Å¸ 1·Î ¼öÁ¤ÇÑ´Ù. ±×¸®°í ¸ÞÀÎ À©µµ¿ìÀÇ Å¸ÀÌƲ ¹ÙÀÇ ¹®ÀÚ¿­µµ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

            ,LPSTR lpszCmdParam,int nCmdShow)

{

     ...

     hWnd=CreateWindow(lpszClass,"´ç±Ù Beta1",WS_OVERLAPPEDWINDOW | WS_VISIBLE |

          WS_CLIPCHILDREN,

          CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

          NULL,(HMENU)NULL,hInstance,NULL);

 

¿©±â¼­ ¸±¸®ÁîÇÏ´Â ¹öÀüÀº º£Å¸ 1ÀÌ´Ù. ±× ÀÌÀü¿¡µµ ¾ËÆÄ1, 2, 3, 4, 5¸¦ °³¹ßÇß¾ú´Âµ¥ ¾ËÆÄ ¹öÀüÀÇ ¼öÁ¤ »çÇ×µéÀº ¸ðµÎ ¾ÕÂÊ ½Ç½À °úÁ¤¿¡ ¹Ì¸® ¹Ý¿µÇØ µÎ¾ú´Ù. °³¹ßÀÚ ³»ºÎ ¹öÀüÀ̹ǷΠ¾ÆÁ÷±îÁö ¹ö±×°¡ ¸¹ÀÌ ³²¾Æ Àִµ¥ Àá½Ã ÈÄ ¿¬ÀÌ¾î º£Å¸ 2¸¦ ÀÛ¼ºÇÒ °ÍÀÌ´Ù. º£Å¸ ¹öÀüºÎÅÍ´Â ÀÌ¹Ì ¿Ï·áµÈ ½Ç½À ¹®¼­´Â ±×´ë·Î À¯ÁöÇÏ°í µû·Î ¹ö±×¸¦ ¼öÁ¤ÇÒ °ÍÀÌ´Ù. ÇÁ·ÎÁ§Æ® Àüü¸¦ Ç® ºôµåÇÏ¸é ¸±¸®Áî°¡ ¿Ï·áµÈ´Ù.

VC 6.0À¸·Î ÄÄÆÄÀÏÇϸé 612K, VC 8.0À¸·Î ÄÄÆÄÀÏÇϸé 632KÀÇ Å©±â·Î ºôµåµÈ´Ù. DgCmd.dll°ú »ùÇà ºñÆ®¸Ê µîÀÌ Æ÷ÇÔµÇ¾î ½ÇÇà ÆÄÀÏ Å©±â°¡ ´Ù¼Ò Å©´Ù. º¯°æµÈ ÃÊ±â ¿É¼Ç Àû¿ëÀ» À§Çؼ­´Â ¼³Ä¡ ÇØÁ¦ ÈÄ ´Ù½Ã ½ÇÇàÇØ¾ß ÇÑ´Ù.