3.¹è°æ ºñÆ®¸Ê

°¡.¹è°æ ºñÆ®¸Ê

ÀÌ ±â´ÉÀº Æ÷¸ËÆà ¿µ¿ª ¹è°æ¿¡ ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ´Â ±â´ÉÀÌ´Ù. ÅؽºÆ® ÆíÁý±â¿¡´Â ´Ù¼Ò »çÄ¡½º·¯¿ö º¸ÀÌ´Â ±â´ÉÀε¥ ¾ÖÀÎÀ̳ª ¾Æ±â, ÁÁ¾ÆÇÏ´Â ¿¬¿¹ÀÎÀ̳ª dz°æÈ­ µîÀ» ±ò¾Æ ³õ°í ÀÌ ±×¸²À» ´Ã»ó º¸¸é¼­ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù. ¿î¿µÃ¼Á¦ÀÇ ¹è°æ º®Áö ±â´É°úµµ ºñ½ÁÇѵ¥ ¹è°æ º®Áö´Â ¹Ø¹Ù´Ú¿¡ ±ò·Á¸¸ ÀÖÁö¸¸ ´ç±ÙÀÇ ¹è°æ ºñÆ®¸ÊÀº ±ÛÀÚÀÇ È¹»çÀÌ·Î º¸Àδٴ Á¡ÀÌ ´Ù¸£´Ù.

¹è°æ¿¡ ºñÆ®¸ÊÀ» ±ò¾Æ ³õ´Â´Ù°í Çؼ­ ±â´ÉÀÌ Å©°Ô °³¼±µÇ´Â °Íµµ ¾Æ´Ï°í ¿ÀÈ÷·Á ó¸® ¼Óµµ¸¸ ´À·ÁÁö¹Ç·Î ºÒÇÊ¿äÇÑ ±â´ÉÀÎ °Íó·³ º¸À̳ª ÀÀ¿ëÇϱ⿡ µû¶ó¼­´Â ¾ÆÁÖ ¼¼·ÃµÈ È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù. ¹è°æ»ö¸¸À¸·Î ¿øÇÏ´Â ºÐÀ§±â¸¦ ¸¸µé±â ¾î·Á¿îµ¥ ÀÌ·² ¶§ ÅؽºÃ³ ºñÆ®¸ÊÀ» ÁöÁ¤ÇØ ³õÀ¸¸é ¹è°æÀÌ ¾ÆÁÖ ºÎµå·¯¿öÁö°í ´«µµ Æí¾ÈÇØÁø´Ù. À¥ ÆäÀÌÁö¸¦ ºñÆ®¸ÊÀ¸·Î ŸÀÏÇϵíÀÌ ±ò¾Æ ³õ´Â ºñÆ®¸Ê¿¡ µû¶ó ÆíÁý±âÀÇ ºÐÀ§±â°¡ ¿ÏÀüÈ÷ ´Þ¶óÁú ¼öµµ ÀÖ´Ù.

»ó¾÷ÀûÀ¸·Îµµ Àǹ̰¡ Àִµ¥ ȸ»çÀÇ ·Î°í¸¦ ¿À¸¥ÂÊ ¾Æ·¡ Á¤µµ¿¡ »ì¦Äô ±ò¾Æ ³õÀ¸¸é ´«¿¡ °Å½½¸®Áöµµ ¾Ê°í ±¤°íµµ ÇÒ ¼ö À־ ¾ÆÁÖ ÁÁ´Ù. ´ÙÀ½Àº "È¥ÀÚ ¿¬±¸ÇÏ´Â C/C++"À̶ó´Â Ã¥ÀÇ ¿¹Á¦ ½©¿¡ »ç¿ëµÈ ApiEdit ÄÁÆ®·ÑÀÇ ¸ð½ÀÀÌ´Ù. ¾Æ·¡ ¿À¸¥ÂÊ¿¡ Çпø ŸÀÌƲ ºñÆ®¸ÊÀÌ È帴ÇÏ°Ô Ç¥½ÃµÇ¾î Àִµ¥ ±¤°í È¿°úµµ ÀÖ°í ¿îÄ¡µµ ÀÖ´Ù. ±×¸®°í ¹«¾ùº¸´Ù Ç¥ÁØ ¿¡µðÆ® ÄÁÆ®·ÑÀÌ ¾Æ´Ï¶ó´Â Á¡À» È®½ÇÇÏ°Ô º¸¿©ÁÙ ¼öµµ ÀÖ¾î Á¤¼ºÀÌ µé¾î°£ °Íó·³ º¸À̱⵵ ÇÑ´Ù.

±â´É ±¸ÇöÀ» À§ÇÑ º¯¼ö¸¦ ¸ÕÀú ¼±¾ðÇÑ´Ù.

 

enum { AEBB_LEFTTOP, AEBB_RIGHTTOP, AEBB_LEFTBOTTOM, AEBB_RIGHTBOTTOM,

     AEBB_CENTER, AEBB_TILE, AEBB_TILESCROLL };

 

class CApiEdit : public CWindow

{

private:

     ....

     HBITMAP hBackBit;

     int BackBitPos;

 

public:

     ....

     HBITMAP GetBackBit() { return hBackBit; }

     void SetBackBit(HBITMAP hBit);

     int GetBackBitPos() { return BackBitPos; }

     void SetBackBitPos(int aValue);

};

 

hBackBit´Â ¹è°æ ºñÆ®¸ÊÀÇ ÇÚµéÀ̸ç BackBitPos´Â ºñÆ®¸ÊÀ» ¹èÄ¡ÇÒ ¹æ¹ýÀ» ÁöÁ¤ÇÏ´Â ¿É¼Ç º¯¼öÀÌ´Ù. »ý¼ºÀÚ¿¡¼­ ÀÌ º¯¼öµéÀ» ÃʱâÈ­ÇÏ°í ¾×¼¼½º ÇÔ¼öµµ ÀÛ¼ºÇÑ´Ù.

 

CApiEdit::CApiEdit()

{

     ....

     hBackBit=NULL;

     BackBitPos=0;

}

 

void CApiEdit::SetBackBit(HBITMAP hBit)

{

     hBackBit=hBit;

     ForAllView(Invalidate(-1))

}

 

void CApiEdit::SetBackBitPos(int aValue)

{

     BackBitPos=aValue;

     ForAllView(Invalidate(-1))

}

 

ÄÁÆ®·ÑÀº ¿ÜºÎ ÆÄÀÏÀ» Á÷Á¢ ´Ù·ê ¼ö°¡ ¾ø´Ù. ±×·¡¼­ È£½ºÆ®°¡ ºñÆ®¸ÊÀÇ ÇÚµéÀ» ³Ñ°ÜÁÖ¸é ÀÌ ÇÚµé·Î ºñÆ®¸ÊÀ» Ãâ·ÂÇØ¾ß ÇÑ´Ù. CApiEdit´Â ºñÆ®¸ÊÀÇ ÆÄÀÏ °æ·Î¸¦ °¡Áö´Â °ÍÀÌ ¾Æ´Ï¶ó ºñÆ®¸ÊÀÇ Çڵ鸸À» °¡Áø´Ù. È£½ºÆ®´Â ÆÄÀÏÀ» ¿­µçÁö ¾Æ´Ï¸é ÀÚ½ÅÀÌ ¸®¼Ò½º·Î º¸À¯ÇÑ ºñÆ®¸ÊÀ» ³Ñ±âµçÁö ¾î¶² ¹æ¹ýÀ¸·Îµç ºñÆ®¸ÊÀ» ÄÁÆ®·Ñ¿¡ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ¿ÜºÎ ÆÄÀÏÀº DIB·Î µÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ÆÄÀÏÀ» »ç¿ëÇÏ·Á¸é DDB·Î ÀüȯÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â È£½ºÆ®°¡ »ç¿ëÇϹǷΠUtil.cpp¿¡ ÀÛ¼ºÇÑ´Ù.

 

HBITMAP MakeDDBFromDIB(TCHAR *Path)

{

     HDC hdc;

     HANDLE hFile;

     DWORD FileSize, dwRead;

     BITMAPFILEHEADER *fh;

     HBITMAP hBit;

     PVOID ih;

     TCHAR AbsPath[MAX_PATH];

 

     lstrcpy(AbsPath,Path);

     MakeAbsolutePath(AbsPath);

     hFile=CreateFile(AbsPath,GENERIC_READ,0,NULL,

          OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

     if (hFile==INVALID_HANDLE_VALUE) {

          return NULL;

     }

 

     FileSize=GetFileSize(hFile,NULL);

 

     fh=(BITMAPFILEHEADER *)malloc(FileSize);

     ReadFile(hFile,fh,FileSize,&dwRead,NULL);

     CloseHandle(hFile);

 

     ih=((PBYTE)fh+sizeof(BITMAPFILEHEADER));

     hdc=GetDC(NULL);

     hBit=CreateDIBitmap(hdc,(BITMAPINFOHEADER *)ih,CBM_INIT,

          (PBYTE)fh+fh->bfOffBits,(BITMAPINFO *)ih,DIB_RGB_COLORS);

     ReleaseDC(NULL,hdc);

 

     free(fh);

     return hBit;

}

 

BOOL MakeRelativePath(TCHAR *Path)

{

     TCHAR ExePath[MAX_PATH];

     TCHAR Drive[_MAX_DRIVE];

     TCHAR Dir[_MAX_DIR];

 

     GetModuleFileName(g_hInst,ExePath,MAX_PATH);

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

     if (strnicmp(ExePath,Path,lstrlen(Drive)+lstrlen(Dir))==0) {

          lstrcpy(ExePath,Path);

          lstrcpy(Path,ExePath+lstrlen(Drive)+lstrlen(Dir));

          return TRUE;

     } else {

          return FALSE;

     }

}

 

void MakeAbsolutePath(TCHAR *Path)

{

     TCHAR ExePath[MAX_PATH];

     TCHAR Drive[_MAX_DRIVE];

     TCHAR Dir[_MAX_DIR];

 

     if (strchr(Path,':')==NULL) {

          GetModuleFileName(g_hInst,ExePath,MAX_PATH);

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

          lstrcpy(ExePath,Path);

          wsprintf(Path,"%s%s%s",Drive,Dir,ExePath);

     }

}

 

Àμö·Î Àü´ÞµÈ DIBÆÄÀÏÀ» Àоî DDB·Î º¯È¯ÇÏ¿© ÇÚµéÀ» ¸®ÅÏÇϴµ¥ ÀÌ ÇÔ¼ö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº API Á¤º¹ Á¦ 2ÆÇ 29ÀåÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù. »ó´ë°æ·Î·Î Àü´ÞµÈ ºñÆ®¸Ê ÆÄÀϵµ ÀÐÀ» ¼ö ÀÖ´Ù.

³ª.ºñÆ®¸Ê Ãâ·Â

È£½ºÆ®¿¡ ¾ÆÁ÷ UI°¡ ¸¸µé¾îÁ® ÀÖÁö ¾ÊÀ¸¹Ç·Î ÀÓ½ÃÀûÀ¸·Î ApiEdit°¡ Á÷Á¢ ¹è°æ ºñÆ®¸ÊÀ» Àоî¿Àµµ·Ï ÇÏÀÚ. Å×½ºÆ®¸¦ À§ÇÑ Àӽà ÄÚµåÀ̹ǷΠ»èÁ¦ ÄÚµå´Â ÀÛ¼ºÇÏÁö ¾Ê¾Ò´Ù.

 

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

{

     hBackBit=MakeDDBFromDIB("c:\\BackBit.bmp");

     ....

 

·çÆ® µð·ºÅ丮¿¡ BackBit.bmp¶ó´Â ÆÄÀÏÀ» Çϳª ¸¸µé¾î µÎ¸é ÀÌ ÆÄÀÏÀ» Àоî¿Í Æ÷¸ËÆà ¿µ¿ª¿¡ Ãâ·ÂÇÒ °ÍÀÌ´Ù. ±×·¸´Ù¸é ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ´Â ÁÖü´Â °ú¿¬ ´©±¸Àϱî? ºñÆ®¸ÊÀº Å« ±×¸²À̹ǷΠOnPaint¿¡¼­ Ãâ·ÂÇØ ³õ°í ±× À§¿¡ DrawLine µîÀÇ Á¹º´ ÇÔ¼öµéÀÌ ÅؽºÆ®¸¦ Ãâ·ÂÇÏ´Â ¹æ½ÄÀ» ¸ÕÀú ¶°¿Ã¸± ¼ö Àִµ¥ ÀÌ ¹æ¹ýÀº ºÒ°¡´É¤·ÇÏ´Ù. ¿Ö³ÄÇϸé ApiEdit´Â ÁÙ ´ÜÀ§·Î ´õºí ¹öÆÛ¸µÀ» ÇϹǷΠOnPaint¿¡¼­ ¾Æ¹«¸® ¿¹»Û ±×¸²À» ±×·Á ºÁ¾ß DrawLineÀÌ ¹è°æÀ» µ¤¾î ¹ö¸®±â ¶§¹®ÀÌ´Ù.

±×·¡¼­ DrawLineÀÌ °¢ ÁÙÀ» Ãâ·ÂÇÒ ¶§ ÀÌ ÁÙ¿¡ ´ëÀÀµÇ´Â ºñÆ®¸Ê À§Ä¡¸¦ ã¾Æ Á¶°¢ Á¶°¢ ³ª´©¾î Ãâ·ÂÇØ¾ß ÇÑ´Ù. Á¶±Ý ¹ø°Å·Ó±â´Â ÇÏÁö¸¸ ²À ÇÊ¿äÇÑ ºÎºÐ¸¸ Ãâ·ÂÇϹǷΠºñÆ®¸Ê Àüü¸¦ ÇѲ¨¹ø¿¡ Ãâ·ÂÇÏ´Â °Íº¸´Ù ¼Óµµ´Â ¿ÀÈ÷·Á ÀÌÂÊÀÌ ´õ ºü¸£´Ù. Ãâ·ÂÇÒ ºñÆ®¸Ê ºÎºÐÀ» ã´Â ¿¬»ê °úÁ¤ÀÌ »ó´çÈ÷ º¹ÀâÇϹǷΠDrawLineÀÌ ÀÌ ÀÛ¾÷À» Á÷Á¢ ÇÏ´Â °Íº¸´Ù´Â º°µµÀÇ Àü´ã ÇÔ¼ö¸¦ ¸¸µå´Â °ÍÀÌ ÁÁÀ» °Í °°´Ù.

 

void CApiEditText::DrawBackBit(HDC hdc,int nLine)

{

     int sLine;

     HDC hMemDC;

     HBITMAP OldBitmap;

     BITMAP bit;

     int bx,by,ys,xs;

     int ax,ay,bs;

 

     hMemDC=CreateCompatibleDC(hdc);

     OldBitmap=(HBITMAP)SelectObject(hMemDC,pFrame->hBackBit);

     GetObject(pFrame->hBackBit,sizeof(BITMAP),&bit);

     bx=bit.bmWidth;

     by=bit.bmHeight;

 

     // 6¹ø¿Ü¿¡´Â È­¸é»óÀÇ ÁÙ ¼ö¸¦ ±âÁØÀ¸·Î ÇÑ´Ù.

     if (pFrame->BackBitPos==AEBB_TILESCROLL) {

          sLine=nLine;

     } else {

          sLine=nLine-yPos/LineHeight;

     }

 

     switch (pFrame->BackBitPos) {

     case AEBB_LEFTTOP:

          if (sLine*LineHeight < by) {

              BitBlt(hdc,frt.left,0,frt.right,LineHeight,hMemDC,0,

                   sLine*LineHeight,SRCCOPY);

          }

          break;

     case AEBB_RIGHTTOP:

          if (sLine*LineHeight < by) {

              BitBlt(hdc,max(frt.right-bx,frt.left),0,frt.right,LineHeight,hMemDC,0,

                   sLine*LineHeight,SRCCOPY);

          }

          break;

     case AEBB_LEFTBOTTOM:

          // ºñÆ®¸Ê Ãâ·Â ½ÃÀÛ À§Ä¡ = Æ÷¸ËÆà ¿µ¿ª ³ôÀÌ - ºñÆ®¸Ê ³ôÀÌ

          ys=max(0,(frt.bottom-frt.top)-by);

          // ÇöÀçÁÙÀÇ ½ÃÀÛ ÁÂÇ¥°¡ ºñÆ®¸Ê Ãâ·Â ½ÃÀÛ ÁÂÇ¥ ÀÌ»óÀ̸é. ´ëÀÀµÇ´Â ºñÆ®¸Ê ºÎºÐ Ãâ·Â

          if (sLine*LineHeight >= ys) {

              BitBlt(hdc,frt.left,0,frt.right,LineHeight,hMemDC,0,

                   sLine*LineHeight-ys,SRCCOPY);

          // ³¡ ÁÂÇ¥°¡ ºñÆ®¸Ê Ãâ·Â ÁÂÇ¥ ÀÌ»óÀ̸é(ºñÆ®¸ÊÀÌ Ãâ·ÂµÇ´Â ùÁÙ¿¡¸¸ ÇØ´çµÈ´Ù)

          } else if (sLine*LineHeight+LineHeight-1 >= ys) {

              BitBlt(hdc,frt.left,ys % LineHeight,frt.right,LineHeight,hMemDC,0,

                   0,SRCCOPY);

          }

          break;

     case AEBB_RIGHTBOTTOM:

          ys=max(0,(frt.bottom-frt.top)-by);

          if (sLine*LineHeight >= ys) {

              BitBlt(hdc,max(frt.right-bx,frt.left),0,frt.right,LineHeight,hMemDC,0,

                   sLine*LineHeight-ys,SRCCOPY);

          } else if (sLine*LineHeight+LineHeight-1 >= ys) {

              BitBlt(hdc,max(frt.right-bx,frt.left),ys % LineHeight,frt.right,LineHeight,hMemDC,0,

                   0,SRCCOPY);

          }

          break;

     case AEBB_CENTER:

          ys=max(0,(frt.bottom-frt.top)-by)/2;

          xs=max(0,(frt.right-frt.left)-bx)/2;

          if (sLine*LineHeight >= ys) {

              BitBlt(hdc,xs,0,frt.right,LineHeight,hMemDC,0,

                   sLine*LineHeight-ys,SRCCOPY);

          } else if (sLine*LineHeight+LineHeight-1 >= ys) {

              BitBlt(hdc,xs,ys % LineHeight,frt.right,LineHeight,hMemDC,0,

                   0,SRCCOPY);

          }

          break;

     case AEBB_TILE:

     case AEBB_TILESCROLL:

          // by-bs : ½ÇÁ¦ Ãâ·ÂµÈ ³ôÀÌ. ºñÆ®¸Ê Ãâ·Â ½ÃÀÛÁ¡ ÀÌÈÄÀÇ ³²Àº Çȼ¿¼ö.

          for (ay=0;ay < LineHeight;ay+=(by-bs)) {

              // Ãâ·ÂÀ» ½ÃÀÛÇÒ ºñÆ®¸ÊÀÇ ¼öÁ÷ ÁÂÇ¥

              if (ay==0) {

                   bs=sLine*LineHeight % by;

              } else {

                   bs=0;

              }

              // ¼öÆòÀ¸·Î ¹Ýº¹ Ãâ·Â

              for (ax=frt.left;;ax+=bx) {

                   if (ax >= frt.right) {

                        break;

                   }

                   BitBlt(hdc,ax,ay,ax+bx,LineHeight,hMemDC,0,

                        bs,SRCCOPY);

              }

          }

          break;

     }

    

     SelectObject(hMemDC,OldBitmap);

     DeleteDC(hMemDC);

}

 

ÀÌ ÇÔ¼ö´Â ±æÀ̵µ ªÁö ¾ÊÁö¸¸ ³»ºÎ ÄÚµå´Â ±æÀ̺¸´Ù ÈξÀ ´õ º¹ÀâÇÏ´Ù. ¸ÕÀú ¸Þ¸ð¸® DC¿¡ ºñÆ®¸ÊÀ» ÀÐ¾î ³õ°í ºñÆ®¸ÊÀÇ Å©±â¸¦ ¹Ì¸® ±¸ÇØ ³õ´Â´Ù. sLineÀº È­¸é»óÀÇ ÁÙ ¹øÈ£ÀÌµÇ AEBB_TILESCROLLÀÇ °æ¿ì´Â ¹®¼­»óÀÇ ÁÙ ¹øÈ£°¡ µÇ¾î¾ß ÇÑ´Ù. °¢ À¯Çüº°·Î ºÐ¼®ÇØ º¸ÀÚ.

À§ÂÊ¿¡ Ãâ·Â

À§ÂÊ¿¡ Ãâ·ÂÇÏ´Â µÎ °æ¿ì´Â ¾ÆÁÖ ½±´Ù. ¸ÕÀú AEBB_LEFTTOPÀ» ºÐ¼®ÇØ º¸ÀÚ. Ãâ·ÂÇÒ Á¶°ÇÀº ÇöÀç Ãâ·ÂµÇ´Â ÁÙÀÇ ½ÃÀÛ ÁÂÇ¥ÀÎ sLine*LineHeight°¡ ºñÆ®¸Ê ³ôÀÌÀÎ byº¸´Ù ´õ ÀÛÀ» ¶§ÀÌ´Ù. °°Àº °æ¿ì´Â Ãâ·ÂÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

0,1,2,3¹ø ÁÙÀÇ Ãâ·Â ½ÃÀÛ ÁÂÇ¥´Â byº¸´Ù ÀÛÀ¸¹Ç·Î ÀÌ ÁÙ¿¡ ºñÆ®¸ÊÀ» Ãâ·ÂÇØ¾ß Çϳª 4¹øÁÙÀº ºñÆ®¸ÊÀÇ ³ôÀ̺¸´Ù ´õ ¾Æ·¡ÂÊÀ̹ǷΠÃâ·ÂÇÒ ÇÊ¿ä°¡ ¾ø´Ù. Ãâ·ÂµÉ ÁÂÇ¥´Â (frt.left,0) ~ (frt.right,LineHeight)±îÁöÀε¥ ÀÌ ÇÔ¼ö°¡ Àü´Þ¹ÞÀº hdc´Â ³ôÀÌ°¡ LineHeight¹Û¿¡ ¾ÈµÇ´Â ¸Þ¸ð¸® ºñÆ®¸ÊÀ̹ǷΠ¹«Á¶°Ç ¼öÁ÷ ÁÂÇ¥ 0¿¡¼­ LineHeight±îÁö Ãâ·ÂÇÏ¸é µÈ´Ù. ¿ÞÂÊ Á¤·ÄÀ̹ǷΠ¼öÆòÀ¸·Î frt.left¿¡¼­ Ãâ·ÂÀ» ½ÃÀÛÇÏ°í frt.right±îÁö Ãâ·ÂÇÑ´Ù. ¸¸¾à ºñÆ®¸ÊÀÇ Æø bx°¡ Æ÷¸ËÆà ¿µ¿ªÀÇ Æøº¸´Ù ªÀ¸¸é µÞºÎºÐÀº ¾Ë¾Æ¼­ Ãâ·ÂµÇÁö ¾Ê´Â´Ù.

ºñÆ®¸ÊÀÇ Ãâ·Â ´ë»óÀº (0,sLine*LineHeight)ÀÌ´Ù. ¼öÆò ÁÂÇ¥´Â Ç×»ó 0ºÎÅÍÀÌ°í ¼öÁ÷ ÁÂÇ¥´Â ÇöÀç Ãâ·ÂµÇ´Â ÁÙÀÇ ½ÃÀÛ ÁÂÇ¥¿Í µ¿ÀÏÇÏ´Ù. AEBB_RIGHTTOPÀÇ °æ¿ìµµ ºñ½ÁÇÏ´Ù. Ãâ·ÂµÉ ÁÂÇ¥°¡ frt.right-bx¶ó´Â Á¡¸¸ ´Ù¸£´Ù. ¿À¸¥ÂÊ Á¤·ÄÀ̹ǷΠÆ÷¸ËÆà ¿µ¿ªÀÇ ¿À¸¥ÂÊ ³¡¿¡¼­ ºñÆ®¸ÊÀÇ Æø¸¸Å­ »« ÁÂÇ¥¿¡ Ãâ·ÂÇÏ¸é µÈ´Ù. ´Ü, ºñÆ®¸ÊÀÇ Æøº¸´Ù Æ÷¸ËÆà ¿µ¿ª ÆøÀÌ ÀÛÀ» ¶§´Â frt.left¿¡ Ãâ·ÂÇÑ´Ù.

¾Æ·¡ÂÊ¿¡ Ãâ·Â

¾Æ·¡ÂÊ¿¡ Ãâ·ÂÇÏ´Â °ÍÀº À§Âʺ¸´Ù Á¶±Ý º¹ÀâÇÏ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ.

ys´Â ºñÆ®¸ÊÀÌ Ãâ·ÂµÇ±â ½ÃÀÛÇÒ ¼öÁ÷ ÁÂÇ¥ÀÌ´Ù. Æ÷¸ËÆà ¿µ¿ªÀÇ ³ôÀÌ¿¡¼­ ºñÆ®¸Ê ³ôÀÌ by¸¦ »©¸é ±¸ÇÒ ¼ö ÀÖµÇ, ´Ü Æ÷¸ËÆà ¿µ¿ªÀÌ ´õ ³·À» ¶§´Â óÀ½ºÎÅÍ Ãâ·ÂÇØ¾ß ÇϹǷΠ0ÀÇ °ªÀ» °¡Áø´Ù. ÀÌ ±×¸²¿¡¼­ 2¹ø ÁÙÀ» º¸ÀÚ. 2¹ø ÁÙÀÇ Ãâ·Â ½ÃÀÛ ÁÂÇ¥ÀÎ sLine*LineHeight°¡ ysº¸´Ù ´õ ¾Æ·¡ÂÊ¿¡ ÀÖÀ¸¹Ç·Î ÀÌ ÁÙ¿¡´Â ºñÆ®¸ÊÀ» Ãâ·ÂÇØ¾ß ÇÑ´Ù. Ãâ·ÂÇÒ ´ë»óÀº 2¹øÁÙÀÇ ½ÃÀÛ ÁÂÇ¥¿¡¼­ ys¸¦ »«¸¸Å­ ¾Æ·¡ÂÊ ºñÆ®¸Ê ºÎºÐÀÌ´Ù. 3,4¹øÁÙµµ ¸¶Âù°¡Áö·Î 󸮵ȴÙ.

±×¸²ÀÇ ÀϺθ¸ °ÉÃÄ ÀÖ´Â 1¹øÁÙÀÇ °æ¿ì¸¦ º¸ÀÚ. Ãâ·Â ½ÃÀÛ ÁÂÇ¥ÀÌ ysº¸´Ù´Â ´õ À§ÂÊ¿¡ ÀÖÀ¸¹Ç·Î ù ¹ø° Á¶°Ç¿¡´Â °É¸®Áö ¾Ê´Â´Ù. ÇÏÁö¸¸ Ãâ·Â ³¡ ÁÂÇ¥´Â ysº¸´Ù ´õ ¾Æ·¡ÂÊ¿¡ ÀÖÀ¸¹Ç·Î ºñÆ®¸ÊÀÇ ÀϺΰ¡ ÀÌ ÁÙ¿¡ Ãâ·ÂµÇ¾î¾ß ÇÑ´Ù. Ãâ·ÂÀ» ½ÃÀÛÇÒ À§Ä¡´Â ys¸¦ LineHeight·Î ³ª´« ³ª¸ÓÁöÀ̹ǷΠÃâ·Â ´ë»óÀº ºñÆ®¸ÊÀÇ Ã³À½ÀÎ 0ÀÌ´Ù. ¿À¸¥ÂÊ ¾Æ·¡ Ãâ·Âµµ °ÅÀÇ ºñ½ÁÇÏ´Ù.

Áß¾Ó¿¡ Ãâ·Â

ºñÆ®¸ÊÀÌ Ãâ·ÂµÉ ÁÂÇ¥ xs, ys¸¦ ¸ÕÀú ±¸ÇØ ³õ°í ÀÌ ¿µ¿ª¿¡ °ÉÄ£ ÁÙ¿¡ ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ¸é µÈ´Ù. ¹æ½ÄÀº ¾Æ·¡ÂÊ Ãâ·Â°ú °ÅÀÇ ºñ½ÁÇϸç ÁÂÇ¥¸¦ °è»êÇÏ´Â ¼ö½Ä¸¸ ´Ù¸£´Ù.

ŸÀÏ Ãâ·Â

°°Àº ºñÆ®¸ÊÀ» ¿©·¯¹ø ¹Ýº¹ÀûÀ¸·Î Ãâ·ÂÇÑ´Ù. µû¶ó¼­ xÂÊ, yÂÊÀ¸·Î °¢°¢ ·çÇÁ¸¦ µ¹¸é¼­ ¿ÏÀüÈ÷ Ãâ·ÂµÉ ¶§±îÁö ¹Ýº¹ÇÑ´Ù.

·çÇÁ Á¦¾î º¯¼ö ax, ay´Â °¢ ¹æÇâÀ¸·Î Ãâ·ÂÀÌ ¿Ï·áµÈ ÁÂÇ¥°ªÀ» °¡Áø´Ù. ay´Â 0ºÎÅÍ ½ÃÀÛÇÏ°í ax´Â frt.leftºÎÅÍ ½ÃÀÛÇÑ´Ù. ¾ÈÂÊ ·çÇÁ¸¦ ¸ÕÀú º¸ÀÚ. ax¿¡ ºñÆ®¸Ê ÆøÀÎ bx¸¦ °è¼Ó ´õÇØ°¡¸é¼­ frt.right¿¡ µµ´ÞÇÒ ¶§±îÁö Ãâ·ÂÀ» ¹Ýº¹ÇÑ´Ù. ¾ÆÁÖ ½±´Ù.

¹Ù±ùÂÊ ·çÇÁ´Â Á¶±Ý ¾î·Æ´Ù. ay´Â 0ºÎÅÍ ½ÃÀÛÇؼ­ LineHeight¸¦ ³ÑÀ» ¶§±îÁö ¹Ýº¹µÈ´Ù. bs´Â ºñÆ®¸ÊÀÇ Ãâ·Â ´ë»ó ¼öÁ÷ ÁÂÇ¥Àε¥ ay°¡ 0À̸é, Áï ÀÌ ÁÙ¿¡ ´ëÇØ Ã³À½ Ãâ·ÂÇÏ´Â °æ¿ì¶ó¸é ÇöÀç ÁÙÀÇ ¼öÁ÷ ÁÂÇ¥¸¦ by·Î ³ª´« ³ª¸ÓÁö°¡ µÈ´Ù.ay°¡ 0ÀÌ ¾Æ´Ï¶ó¸é Áï, ºñÆ®¸ÊÀÇ ³¡ ºÎºÐÀÌ ÀÌ ÁÙ¿¡¼­ Çѹø Ãâ·ÂµÇ°íµµ ¾ÆÁ÷ ay°¡ LineHeight°¡ µÇÁö ¾Ê¾Æ ·çÇÁ¸¦ µ¹¾Æ¿Â °æ¿ìÀÌ´Ù. ±×¸²ÀÇ 3¹øÁÙÀÌ ÀÌ °æ¿ì¿¡ ÇØ´çµÈ´Ù. ÀÌ °æ¿ì ºñÆ®¸ÊÀº À§ÂʺÎÅÍ ´Ù½Ã ¹Ýº¹ Ãâ·ÂµÇ¾î¾ß ÇϹǷΠbs´Â 0ÀÌ µÈ´Ù.

ay·çÇÁ¸¦ ¸Å¹ø µ¹ ¶§¸¶´Ù ay´Â by-bs¸¸Å­ Áõ°¡Çϴµ¥ ÀÌ °ªÀº ºñÆ®¸ÊÀ» Ãâ·ÂÇÑ ÁÂÇ¥ ÀÌÈÄÀÇ ³²Àº Çȼ¿ ¼öÀÌ´Ù. 3¹øÁÙ°°ÀÌ ºñÆ®¸ÊÀÇ ³¡ ºÎºÐÀ» Ãâ·ÂÇÑ °æ¿ì ÀÌ °ªÀº ½ÇÁ¦ Ãâ·ÂµÈ ³ôÀÌ°ªÀÌ µÈ´Ù. ay´Â ÀÌ ¸¸Å­ ´õÇØÁö°í ´ÙÀ½ ·çÇÁ¸¦ µ¹¾Æ ºñÆ®¸ÊÀÇ 0¹ø Çȼ¿ºÎÅÍ ´Ù½Ã Ãâ·ÂÇÑ´Ù. AEBB_TILESCROLLÀº AEBB_TILE°ú µ¿ÀÏÇ쵂 ÂüÁ¶µÇ´Â ÁÙ ¹øÈ£°¡ È­¸é»óÀÇ ÁÙ ¹øÈ£°¡ ¾Æ´Ï¶ó ¹®¼­»óÀÇ ÁÙ¹øÈ£¶ó´Â Á¡¸¸ ´Ù¸£´Ù.

 

ÀÌ ÇÔ¼öÀÇ Äڵ带 º¸°í ¼ö½ÄÀÌ ÀÌÇØÇϱâ´Â »ç½Ç ½±Áö ¾ÊÀºµ¥ ÀÌ·± ÇÔ¼ö´Â ºÐ¼®ÇÏ´Â °Íº¸´Ù Á÷Á¢ ¸¸µå´Â °ÍÀÌ ¿ÀÈ÷·Á ´õ ½±´Ù. ÀÌ ÇÔ¼ö´Â DrawLine¿¡¼­ ÅؽºÆ®¸¦ Ãâ·ÂÇϱâ Àü¿¡ È£ÃâÇÑ´Ù. Çí»çºäµµ ¹°·Ð ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

 

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

{

 

     ....

     // ¹è°æ ºñÆ®¸Ê Ãâ·Â

    if (pFrame->hBackBit) {

        DrawBackBit(hdc,Line);

    }

 

     y=GetCharYPos();

     if (bCurLine && (pFrame->nShowCurLine == 3 || pFrame->nShowCurLine == 4)) {

     ....

 

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

{

     ....

     // ¹è°æ ºñÆ®¸Ê Ãâ·Â

    if (pFrame->hBackBit) {

        DrawBackBit(hdc,Line);

    }

 

     y=GetCharYPos();

     if (bCurLine && (pFrame->nShowCurLine == 3 || pFrame->nShowCurLine == 4)) {

     ....

 

ºñÆ®¸Êº¸´Ù ÇöÀçÇà Ç¥½Ã°¡ ´õ À§¿¡ ÀÖ¾î¾ß ÇϹǷΠÇöÀçÇà Ç¥½Ã¸¦ Ãâ·ÂÇϱâ Àü¿¡ ºñÆ®¸ÊÀ» ¸ÕÀú Ãâ·ÂÇÑ´Ù. ¾î·µç ºñÆ®¸ÊÀº ¹è°æ¿¡ ±ò¸®´Â °ÍÀ̹ǷΠÅؽºÆ®»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ¸ðµç °Íº¸´Ù ¸ÕÀú Ãâ·ÂµÇ¾î¾ß ÇÑ´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ½ÇÇàÇØ º¸ÀÚ. ¹è°æ ºñÆ®¸ÊÀÌ Àß º¸ÀδÙ. ±×·¯³ª ³¡±îÁö ½ºÅ©·ÑÇßÀ» ¶§ ¹®¼­ µÚÂÊ¿¡ ºñÆ®¸ÊÀÌ º¸ÀÌÁö ¾ÊÀ¸¸ç ºñÆ®¸Ê±îÁö °°ÀÌ ½ºÅ©·ÑµÈ´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ù¹ø° ¹®Á¦´Â DrawLineÀÌ ¹®¼­¿¡ Á¸ÀçÇÏ´Â ÁÙ¸¸ Ãâ·ÂÇϱ⠶§¹®¿¡ ¹ß»ýÇϴµ¥ ³ª¸ÓÁö ¿µ¿ªÀº OnPaint¿¡¼­ Á÷Á¢ ±×·Á¾ß ÇÑ´Ù.

 

void CApiEditText::OnPaint(HWND hWnd)

{

    int l,l2;

    int s,e,t,e2;

     ....

    e2=e=max((yPos+PureY(ps.rcPaint.bottom)-1)/LineHeight,t);

     ....

     if (MarginWidth != 0) {

          ....

     }

 

     // ¹®¼­ µÞºÎºÐÀÇ ¹è°æ ºñÆ®¸ÊÀ» ±×¸°´Ù.

    if (pFrame->hBackBit) {

        SetRect(&lrt,MarginWidth,0,frt.right,LineHeight);

        for (l2=l;l2<=e2;l2++) {

           FillRect(hMemDC,&lrt,hBrush);

           DrawBackBit(hMemDC,l2);

           BitBlt(hdc,frt.left,(l2-t)*LineHeight+frt.top,frt.right,

               (l2-t)*LineHeight+LineHeight+frt.top,hMemDC,frt.left,0,SRCCOPY);

        }

    } else {

        SetRect(&lrt,frt.left,(l-t)*LineHeight+frt.top,frt.right,frt.bottom);

        FillRect(hdc,&lrt,hBrush);

    }

 

     // ¹®¼­ µÞºÎºÐÀÇ ¿ÞÂÊ ¿©¹é ±×¸². ´õºí ¹öÆÛ¸µµÇÁö ¾ÊÀ¸¹Ç·Î Á÷Á¢ ±×·Á¾ß ÇÑ´Ù.

     if (pFrame->InnerRect.left) {

          ....

 

¹è°æ ºñÆ®¸ÊÀÌ ÀÖÀ¸¸é ±×³É Áö¿ìÁö ¸»°í ºñÆ®¸ÊÀ» Ãâ·ÂÇÑ´Ù. µÎ¹ø° ¹®Á¦´Â ScrollWindow°¡ ¹üÀÎÀÌ´Ù. ºñÆ®¸Ê±îÁö °°ÀÌ ½ºÅ©·ÑµÇ´Âµ¥ ºñÆ®¸ÊÀº ¹è°æÀÌÁö ¹®¼­ÀÇ ÀϺΰ¡ ¾Æ´Ï¹Ç·Î ½ºÅ©·ÑµÇ¾î¼­´Â ¾ÈµÈ´Ù. ¾ÈŸ±õ°Ôµµ ¹è°æ ºñÆ®¸ÊÀÌ ÀÖÀ» ¶§´Â ½ºÅ©·Ñ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç È­¸é Àüü¸¦ ´Ù½Ã ±×¸®´Â ¼ö¹Û¿¡ ¾ø´Ù.

 

void CApiEditText::OnHScroll(HWND hWnd, HWND hwndCtl, UINT code, int pos)

{

     ....

     if (pFrame->hBackBit && pFrame->BackBitPos!=AEBB_TILESCROLL) {

          Invalidate(-1);

     } else {

          ScrollWindow(hWnd, -xInc, 0, &frt, &frt);

     }

 

void CApiEditText::OnVScroll(HWND hWnd, HWND hwndCtl, UINT code, int pos)

{

     ....

     if (pFrame->hBackBit && pFrame->BackBitPos!=AEBB_TILESCROLL) {

          Invalidate(-1);

     } else {

          ScrollWindow(hWnd, 0, -yInc, &srt,&srt);

     }

 

void CApiEditText::Scroll(int nLine, int nCode/*=0*/)

{

     ....

     if (pFrame->hBackBit && pFrame->BackBitPos!=AEBB_TILESCROLL) {

          Invalidate(-1);

     } else {

          ScrollWindow(hWnd, 0, -yInc, &srt, &srt);

     }

 

OnMouseWheelµµ ¼öÁ¤ÇØ¾ß Çϴµ¥ ¹Ù·Î ´ÙÀ½ Àý¿¡¼­ ´Ù½Ã ÀÛ¼ºÇÒ °ÍÀ̱⠶§¹®¿¡ ÀÏ´ÜÀº ±×´ë·Î ³»¹ö·Á µÎ¾ú´Ù. ¹è°æ ºñÆ®¸ÊÀÌ ÀÖ°í ½ºÅ©·ÑµÇ´Â ŸÀÏÀÌ ¾Æ´Ñ °æ¿ì´Â ¹«Á¶°Ç Àüü È­¸éÀ» ´Ù½Ã ±×¸®´Â ¼ö¹Û¿¡ ¾ø´Ù. ±×·¡¼­ ÀÌ·± Àå½Ä ±â´ÉÀÌ ¼Óµµ¸¦ ´À¸®°Ô ¸¸µé°í ¸®¼Ò½º¸¦ ¸¹ÀÌ ¸Ô´Â °ÍÀÌ´Ù. »ç¶÷À̳ª ±â°è³ª ¿¹»Ú´Ù´Â °ÍÀÇ ´ñ°¡´Â ÂüÀ¸·Î Å©´Ù. ¹è°æ ºñÆ®¸Ê ±â´ÉÀ» Á÷Á¢ »ç¿ëÇØ º¸¸é ±×·° Àú·° ¾µ¸¸ÇÏ°í ¿äÁòÀÇ °í¼º´É ÄÄÇ»ÅÍ È¯°æ¿¡¼­´Â ¼Óµµµµ »ý°¢¸¸Å­ ´À¸®Áö ¾Ê´Ù.

±×·¯³ª ¾ÆÁ÷ ¸î °¡Áö ¾Æ½¬¿î Á¡ÀÌ ÀÖ´Ù. ¹è°æÀ¸·Î ¾µ¸¸ÇÑ ºñÆ®¸ÊµéÀÌ ³Ê¹« ¾îµÎ¿ö ±ÛÀÚµéÀÌ Àß ¾Èº¸À̴µ¥ °¨¸¶ Á¶Á¤ ±â´ÉÀÌ ÀÖ´Ù¸é ÁÁÀ» °Í °°´Ù. ¶ÇÇÑ BMP°¡ ¾Æ´Ñ JPGµµ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù¸é È°¿ëµµ°¡ ÈξÀ ´õ ³ô¾ÆÁú °ÍÀÌ´Ù. Çö½ÇÀûÀ¸·Î JPG ÆÄÀÏÀÌ °¡Àå ÀϹÝÀûÀε¥ À©µµ¿ìÁî API°¡ JPG¸¦ Á÷Á¢ ´Ù·ê ¼ö ¾ø±â ¶§¹®¿¡ JPG Æ÷¸ËÀÇ ¹è°æ ºñÆ®¸ÊÀº ¾ÆÁ÷ ¾µ ¼ö ¾ø´Ù. °£´ÜÇÑ ¶óÀ̺귯¸®³ª GdiPlus Á¤µµ¸¸ »ç¿ëÇصµ JPG ÆÄÀÏÀ» ¾µ ¼ö ÀÖÁö¸¸ ¿¹Á¦ ¼öÁØ¿¡¼­´Â ´Ù¼Ò »çÄ¡½º·¯¿ö ÀÌ ±â´ÉÀ» ³ÖÁö ¾Ê¾Ò´Ù. ÀÌ µÎ °¡Áö ±â´ÉÀº ´ÙÀ½ ¹öÀü¿¡¼­ ±¸ÇöÇØ º¼ »ý°¢ÀÌ´Ù. Å×½ºÆ®°¡ ³¡³µÀ¸¹Ç·Î OnCreate¿¡ ÀÛ¼ºÇß´ø ¹è°æ ºñÆ®¸Ê »ý¼º ÄÚµå´Â »èÁ¦ÇÑ´Ù. ÀÌÈĺÎÅÍ È£½ºÆ®°¡ ÁÙ ¶§¸¸ ¹è°æ ºñÆ®¸ÊÀ» »ç¿ëÇÑ´Ù.

´Ù.¿É¼Ç Á¶Á¤

ÀÌ Àå¿¡¼­´Â ¾ÈÂÊ ¿©¹é, ¼±Åà ºí·ÏÀÇ ¸ð¾ç, ¹è°æ ºñÆ®¸Ê µîÀÇ ±â´ÉÀ» Ãß°¡Çߴµ¥ »ç¿ëÀÚ°¡ ´ëÈ­»óÀÚ¿¡¼­ ÀÌ ¿É¼ÇµéÀ» º¸°í ÆíÁýÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ. ¿É¼Ç Ãß°¡ ÀÛ¾÷À» ÀÌ¹Ì ¿©·¯ ¹ø ¹Ýº¹µÇ´Â °ÍÀ̹ǷΠ¼ø¼­´ë·Î Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù. ¸ÕÀú SOption¿¡ ¸â¹ö¸¦ Ãß°¡ÇÑ´Ù.

 

struct SOption

{

     ....

     RECT InnerRect;

     COLORREF InnerRectColor;

     BOOL bShowRuler;

     COLORREF RulerColor;

     int VAlign;

     int SelBlockType;

     COLORREF SelFrameColor;

     TCHAR BackBit[MAX_PATH];

     int BackBitPos;

};

¹è°æ ºñÆ®¸ÊÀº ÇÚµéÀÌ ¾Æ´Ñ °æ·Î¸¦ ÀúÀåÇÑ´Ù. ApiEdit´Â ºñÆ®¸Ê ÇÚµéÀ» ¿ä±¸ÇÏÁö¸¸ È£½ºÆ®´Â ¸Å ½ÇÇà½Ã¸¶´Ù ºñÆ®¸Ê ÆÄÀÏÀ» Àоî ÄÁÆ®·Ñ¿¡°Ô Àü´ÞÇØ¾ß ÇϹǷΠ°æ·Î¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. ÀÌ º¯¼öµéÀº ´ÙÀ½°ú °°ÀÌ ÃʱâÈ­ÇÑ´Ù. °¡±ÞÀû ¹«³­ÇÑ °ªÀ¸·Î ÃʱⰪÀ» ¼³Á¤Çß´Ù. ÀÌ ¿É¼ÇµéÀº »ç¿ëÀÚ¿¡ ÀÇÇØ ¿øÇϴ´ë·Î ÆíÁýµÇ¸ç ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ¾ú´Ù°¡ ´ÙÀ½ ½ÇÇàÇÒ ¶§ º¹±¸µÈ´Ù.

 

void SOption::Init()

{

     ...

     SetRect(&InnerRect,1,2,0,0);

     InnerRectColor=0;

     bShowRuler=FALSE;

     RulerColor=0;

     VAlign=1;

     SelBlockType=1;

     SelFrameColor=0;

     BackBit[0]=0;

     BackBitPos=0;

}

 

void SOption::Load(TCHAR *Key)

{

     ....

     InnerRect.left=SHRegReadInt(SHCU,szKey,"InnerRectLeft",0);

     InnerRect.top=SHRegReadInt(SHCU,szKey,"InnerRectTop",0);

     InnerRect.right=SHRegReadInt(SHCU,szKey,"InnerRectRight",0);

     InnerRect.bottom=SHRegReadInt(SHCU,szKey,"InnerRectBottom",0);

     InnerRectColor=SHRegReadInt(SHCU,szKey,"InnerRectColor",0);

     bShowRuler=SHRegReadInt(SHCU,szKey,"bShowRuler",0);

     RulerColor=SHRegReadInt(SHCU,szKey,"RulerColor",0);

     VAlign=SHRegReadInt(SHCU,szKey,"VAlign",0);

     SelBlockType=SHRegReadInt(SHCU,szKey,"SelBlockType",0);

     SelFrameColor=SHRegReadInt(SHCU,szKey,"SelFrameColor",0);

     SHRegReadString(SHCU,szKey,"BackBit","",BackBit,MAX_PATH);

     BackBitPos=SHRegReadInt(SHCU,szKey,"BackBitPos",0);

 

void SOption::Save(TCHAR *Key)

{

     ....

     SHRegWriteInt(SHCU,szKey,"InnerRectLeft",InnerRect.left);

     SHRegWriteInt(SHCU,szKey,"InnerRectTop",InnerRect.top);

     SHRegWriteInt(SHCU,szKey,"InnerRectRight",InnerRect.right);

     SHRegWriteInt(SHCU,szKey,"InnerRectBottom",InnerRect.bottom);

     SHRegWriteInt(SHCU,szKey,"InnerRectColor",InnerRectColor);

     SHRegWriteInt(SHCU,szKey,"bShowRuler",bShowRuler);

     SHRegWriteInt(SHCU,szKey,"RulerColor",RulerColor);

     SHRegWriteInt(SHCU,szKey,"VAlign",VAlign);

     SHRegWriteInt(SHCU,szKey,"SelBlockType",SelBlockType);

     SHRegWriteInt(SHCU,szKey,"SelFrameColor",SelFrameColor);

     SHRegWriteString(SHCU,szKey,"BackBit",BackBit);

     SHRegWriteInt(SHCU,szKey,"BackBitPos",BackBitPos);

 

ÀÌÁ¦ »ç¿ëÀÚ°¡ ÀÌ ¿É¼Ç°ªÀ» º¸°í ÆíÁýÇÒ ¼ö ÀÖµµ·Ï ´ëÈ­»óÀÚ¿¡ ¼³Á¤ »óŸ¦ Ãâ·ÂÇÏ°í º¯°æµÈ °ªÀ» °ü¸®ÇÑ´Ù. ¿É¼ÇµéÀº °¢ ÆäÀÌÁö¿¡ Èð¾îÁ® ¹èÄ¡µÇ´Âµ¥ ÀÌ ÀåÀÇ ½Ç½ÀÀÌ ÄÁÆ®·ÑÀÇ ¸ð¾ç¿¡ °ü·ÃµÈ °ÍµéÀ̹ǷΠ¿É¼Çµéµµ ´ëºÎºÐ ¸ð¾ç ÆäÀÌÁö¿¡ ¹èÄ¡µÈ´Ù.

 

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

{

     HWND hCon;

     int t1,t2,t3,t4;

     OPENFILENAME OFN;

     TCHAR lpstrFile[MAX_PATH]="";

     TCHAR Sample[128];

 

     switch(iMessage) {

     case WM_INITDIALOG:

          hCon=GetDlgItem(hDlg,IDC_CBBACKBITPOS);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¿ÞÂÊ À§");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¿À¸¥ÂÊ À§");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¿ÞÂÊ ¾Æ·¡");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¿À¸¥ÂÊ ¾Æ·¡");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"Áß¾Ó");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹Ýº¹");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹Ýº¹ ½ºÅ©·Ñ");

 

          hCon=GetDlgItem(hDlg,IDC_CBSELBLOCKTYPE);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¹®ÀÚ ³ôÀÌ");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"ÁÙ°£ ³ôÀÌ");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¿Ü°û¼±");

 

          hCon=GetDlgItem(hDlg,IDC_CBVALIGN);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"À§ÂÊ");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"°¡¿îµ¥");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¾Æ·¡ÂÊ");

 

          SendDlgItemMessage(hDlg,IDC_FRTLEFTSPIN,UDM_SETRANGE,0,MAKELPARAM(32,0));

          SendDlgItemMessage(hDlg,IDC_FRTTOPSPIN,UDM_SETRANGE,0,MAKELPARAM(32,0));

          SendDlgItemMessage(hDlg,IDC_FRTRIGHTSPIN,UDM_SETRANGE,0,MAKELPARAM(32,0));

          SendDlgItemMessage(hDlg,IDC_FRTBOTTOMSPIN,UDM_SETRANGE,0,MAKELPARAM(32,0));

 

          hCon=GetDlgItem(hDlg,IDC_CBSAMPLEBITMAP);

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"±¹È­");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"Äá");

          SendMessage(hCon,CB_ADDSTRING,0,(LPARAM)"¾Æ°¡");

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDC_MARGIN:

              AdjustDlgUI(2,hDlg);

          case IDC_LINENUM:

          case IDC_SHOWENTER:

          case IDC_SHOWTAB:

          case IDC_SHOWSPACE:

          case IDC_SHOWRULER:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          case IDC_CBBACKBITPOS:

          case IDC_CBSELBLOCKTYPE:

          case IDC_CBVALIGN:

              switch (HIWORD(wParam)) {

              case CBN_SELCHANGE:

              case CBN_EDITCHANGE:

                   PropSheet_Changed(GetParent(hDlg),hDlg);

                   return TRUE;

              }

              break;

          case IDC_FRTLEFT:

          case IDC_FRTTOP:

          case IDC_FRTRIGHT:

          case IDC_FRTBOTTOM:

              switch (HIWORD(wParam)) {

              case EN_CHANGE:

                   if (bEditByCode==FALSE) {

                        PropSheet_Changed(GetParent(hDlg),hDlg);

                        return TRUE;

                   }

                   break;

              }

              break;

          case IDC_BTNBRBACKBIT:

              memset(&OFN, 0, sizeof(OPENFILENAME));

              OFN.lStructSize = sizeof(OPENFILENAME);

              OFN.hwndOwner=hDlg;

              OFN.lpstrFilter="±×¸² ÆÄÀÏ(*.bmp)\0*.bmp\0";

              OFN.lpstrFile=lpstrFile;

              OFN.nMaxFile=MAX_PATH;

              if (GetOpenFileName(&OFN)) {

                   MakeRelativePath(lpstrFile);

                   SetDlgItemText(hDlg,IDC_EDBACKBIT,lpstrFile);

                   PropSheet_Changed(GetParent(hDlg),hDlg);

              }

              return TRUE;

          case IDC_CBSAMPLEBITMAP:

              switch (HIWORD(wParam)) {

              case CBN_SELCHANGE:

                   t1=SendDlgItemMessage(hDlg,IDC_CBSAMPLEBITMAP,CB_GETCURSEL,0,0);

                   SendDlgItemMessage(hDlg,IDC_CBSAMPLEBITMAP,CB_GETLBTEXT,t1,(LPARAM)Sample);

                   wsprintf(lpstrFile,"»ùÇÃ:%s",Sample);

                   SetDlgItemText(hDlg,IDC_EDBACKBIT,lpstrFile);

                   PropSheet_Changed(GetParent(hDlg),hDlg);

                   break;

              }

              return TRUE;

          case IDC_BTNREMOVEBACKBIT:

              SetDlgItemText(hDlg,IDC_EDBACKBIT,"");

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          }

          break;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=2;

              bEditByCode=TRUE;

              CheckDlgButton(hDlg,IDC_MARGIN,NewOption.bShowMargin);

              CheckDlgButton(hDlg,IDC_LINENUM,NewOption.bShowLineNum);

              CheckDlgButton(hDlg,IDC_SHOWENTER,NewOption.bShowEnter);

              CheckDlgButton(hDlg,IDC_SHOWTAB,NewOption.bShowTab);

              CheckDlgButton(hDlg,IDC_SHOWSPACE,NewOption.bShowSpace);

              CheckDlgButton(hDlg,IDC_SHOWRULER,NewOption.bShowRuler);

 

              SetDlgItemInt(hDlg,IDC_FRTLEFT,NewOption.InnerRect.left,FALSE);

              SetDlgItemInt(hDlg,IDC_FRTTOP,NewOption.InnerRect.top,FALSE);

              SetDlgItemInt(hDlg,IDC_FRTRIGHT,NewOption.InnerRect.right,FALSE);

              SetDlgItemInt(hDlg,IDC_FRTBOTTOM,NewOption.InnerRect.bottom,FALSE);

 

              SetDlgItemText(hDlg,IDC_EDBACKBIT,NewOption.BackBit);

              SendDlgItemMessage(hDlg,IDC_CBBACKBITPOS,CB_SETCURSEL,NewOption.BackBitPos,0);

              SendDlgItemMessage(hDlg,IDC_CBSELBLOCKTYPE,CB_SETCURSEL,NewOption.SelBlockType,0);

              SendDlgItemMessage(hDlg,IDC_CBVALIGN,CB_SETCURSEL,NewOption.VAlign,0);

              bEditByCode=FALSE;

              AdjustDlgUI(2,hDlg);

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              t1=GetDlgItemInt(hDlg,IDC_FRTLEFT,NULL,FALSE);

              t2=GetDlgItemInt(hDlg,IDC_FRTTOP,NULL,FALSE);

              t3=GetDlgItemInt(hDlg,IDC_FRTRIGHT,NULL,FALSE);

              t4=GetDlgItemInt(hDlg,IDC_FRTBOTTOM,NULL,FALSE);

              if (t1<0 || t1>32 || t2<0 || t2>32 || t3<0 || t3>32 || t4<0 || t4>32) {

                   MessageBox(hDlg,"¾ÈÂÊ ¿©¹éÀº 0~32»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);

                   SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);

                   return TRUE;

              }

 

              NewOption.InnerRect.left=t1;

              NewOption.InnerRect.top=t2;

              NewOption.InnerRect.right=t3;

              NewOption.InnerRect.bottom=t4;

 

              NewOption.bShowMargin=IsDlgButtonChecked(hDlg,IDC_MARGIN);

              NewOption.bShowLineNum=IsDlgButtonChecked(hDlg,IDC_LINENUM);

              NewOption.bShowEnter=IsDlgButtonChecked(hDlg,IDC_SHOWENTER);

              NewOption.bShowTab=IsDlgButtonChecked(hDlg,IDC_SHOWTAB);

              NewOption.bShowSpace=IsDlgButtonChecked(hDlg,IDC_SHOWSPACE);

              NewOption.bShowRuler=IsDlgButtonChecked(hDlg,IDC_SHOWRULER);

 

              GetDlgItemText(hDlg,IDC_EDBACKBIT,NewOption.BackBit,MAX_PATH);

              NewOption.BackBitPos=SendDlgItemMessage(hDlg,IDC_CBBACKBITPOS,CB_GETCURSEL,0,0);

              NewOption.SelBlockType=SendDlgItemMessage(hDlg,IDC_CBSELBLOCKTYPE,CB_GETCURSEL,0,0);

              NewOption.VAlign=SendDlgItemMessage(hDlg,IDC_CBVALIGN,CB_GETCURSEL,0,0);

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

¹è°æ ºñÆ®¸ÊÀº °¡±ÞÀûÀÌ¸é »ó´ë °æ·Î·Î ÀúÀåÇß´Ù. ´ç±Ù°ú °°Àº °æ·Î¿¡ ºñÆ®¸ÊÀ» µÎ¾úÀ» °æ¿ì µð·ºÅ丮¸¦ Åë°·Î ¿Å°Üµµ µ¿ÀÛÇÒ ¼ö ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ¹è°æ ºñÆ®¸Ê ±â´ÉÀÇ Á¸À縦 ¾Ë¸®±â À§ÇØ ¼¼ °³ÀÇ »ùÇà ºñÆ®¸ÊÀ» Á¦°øÇϴµ¥ ¿ë·®»óÀÇ ¹®Á¦·Î Å« ºñÆ®¸ÊÀº »ç¿ëÇÏÁö ¸øÇß°í ÀÛÀº ºñÆ®¸Ê¸¸ »ç¿ëÇß´Ù. ´ÙÀ½Àº ¼¼ °³ÀÇ »ö»ó¿¡ ´ëÇÑ ¼³Á¤ Äڵ带 ÀÛ¼ºÇÑ´Ù. ¸ÕÀú Ãß°¡µÈ »ö»óÀÇ ±âº» »ö»óÀ» Á¤ÀÇÇÑ´Ù.

 

COLORREF arSysColor[13]={0,0,0,0,RGB(192,192,192),RGB(160,160,160),RGB(255,255,0),

     RGB(128,128,128),RGB(255,255,0),RGB(0,0,0),RGB(0,0,0),0,

     RGB(220,220,220)};

 

¹è¿­ Å©±â¸¦ 13À¸·Î ´Ã¸®°í ¼±Åà ºí·Ï ¿Ü°û¼±, ¾ÈÂÊ ¿©¹é, ´«±ÝÀÚÀÇ ±âº» »ö»óÀ» Á¤ÀÇÇÏ¿´´Ù. ¿©±â¼­ ¾ÈÂÊ ¿©¹éÀÇ ±âº» »ö»óÀº ½Ã½ºÅÛ »ö»óÀ̹ǷΠInitSysColor¿¡¼­ ÃʱâÈ­ÇÑ´Ù.

 

void InitSysColor()

{

     arSysColor[0]=GetSysColor(COLOR_WINDOWTEXT);

    arSysColor[1]=arSysColor[11]=GetSysColor(COLOR_WINDOW);

     arSysColor[2]=GetSysColor(COLOR_HIGHLIGHTTEXT);

     arSysColor[3]=GetSysColor(COLOR_HIGHLIGHT);

}

 

À©µµ¿ìÀÇ ¹è°æ»ö°ú °°Àº »öÀ¸·Î ÃʱâÈ­Çß´Ù. »ö»ó ´ëÈ­»óÀÚ¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ ÀÛ¼ºÇÑ´Ù.

 

COLORREF& GetColorFromID(int ID)

{

     switch (ID) {

     ....

     case IDC_SELFRAMECOLOR:

          return NewOption.SelFrameColor;

     case IDC_INNERRECTCOLOR:

          return NewOption.InnerRectColor;

     case IDC_RULERCOLOR:

          return NewOption.RulerColor;

     }

}

 

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

{

     switch(iMessage) {

     case WM_INITDIALOG:

        for (idx=IDC_CFORE;idx<=IDC_RULERCOLOR;idx++) {

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

                   SendDlgItemMessage(hDlg,idx,CB_ADDSTRING,0,0);

              }

          }

          return TRUE;

          ....

     case WM_NOTIFY:

          switch (((LPNMHDR)lParam)->code) {

          case PSN_SETACTIVE:

              g_StartPage=4;

           for (idx=IDC_CFORE;idx<=IDC_RULERCOLOR;idx++) {

                   SendDlgItemMessage(hDlg,idx,CB_SETCURSEL,GetColorFromID(idx) >> 24,0);

              }

              ....

 

»ö»ó ¼±Åà ÄÞº¸ ¹Ú½ºÀÇ Ç׸ñµéÀº ¸ðµÎ µ¿ÁúÀûÀ̱⠶§¹®¿¡ ·çÇÁÀÇ ³¡ ÷ÀÚ¸¸ Á¶Á¤ÇÏ¸é µÈ´Ù. »ö»ó ÄÞº¸ ¹Ú½ºÀÇ ID´Â ¿¬¼ÓÀûÀÎ °ªÀ» °¡Áöµµ·Ï ¸®¼Ò½º¸¦ ÀÛ¼ºÇØ µÎ¾ú´Ù. ´ÙÀ½Àº ¿É¼ÇµéÀÌ º¯°æµÉ ¶§ÀÇ Ã³¸® Äڵ带 ÀÛ¼ºÇÑ´Ù. ¹è°æ ºñÆ®¸ÊÀº ÄÁÆ®·ÑÀÌ ¾Æ´Ñ È£½ºÆ®°¡ °ü¸®ÇØ¾ß ÇÑ´Ù. Dangeun.cpp¿¡ ºñÆ®¸Ê ÇÚµéÀ» Àü¿ª º¯¼ö·Î ¼±¾ðÇÑ´Ù.

 

HBITMAP hBackBit;

 

global.h¿¡¼­ extern ¼±¾ðÇÑ´Ù.

 

extern HBITMAP hBackBit;

 

OnCreate¿¡¼­ ¿É¼Ç¿¡ ¼³Á¤µÈ ºñÆ®¸Ê ÆÄÀÏÀ» Àоî DDB¸¦ »ý¼ºÇÏ°í OnDestroy¿¡¼­ Æı«ÇÑ´Ù.

 

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

{

     ....

     // »ùÇà ºñÆ®¸ÊÀ» Àд´Ù.

     if (IsStrEmpty(Option.BackBit)==FALSE) {

          if (strncmp(Option.BackBit,"»ùÇÃ:",5) == 0) {

              if (strcmp(Option.BackBit+5,"±¹È­")==0)

                   hBackBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_SAMPLE1));

              if (strcmp(Option.BackBit+5,"Äá")==0)

                   hBackBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_SAMPLE2));

              if (strcmp(Option.BackBit+5,"¾Æ°¡")==0)

                   hBackBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_SAMPLE3));

          } else {

              hBackBit=MakeDDBFromDIB(Option.BackBit);

          }

     }

     SetTimer(hWnd,100,1,NULL);

     return 0;

}

 

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

{

     ....

     if (hBackBit) {

          DeleteObject(hBackBit);

     }

     KillTimer(hWnd,1);

}

 

¹è°æ ºñÆ®¸ÊÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é È£½ºÆ®°¡ µü Çѹø ºñÆ®¸ÊÀ» Àоî ÇÚµéÀ» °¡Áö°í ÀÖÀ¸¸ç ApiEdit´Â ÀÌ ºñÆ®¸Ê ÇÚµéÀ» ¹Þ¾Æ »ç¿ëÇÏ¸é µÈ´Ù. ApplyNow¿¡¼­ ¿É¼Ç º¯°æÀ» Àû¿ëÇÑ´Ù.

 

void ApplyNow()

{

     ....

     BOOL bChangeBackBit=FALSE;

 

     ....

 

     if (lstrcmpi(Option.BackBit,NewOption.BackBit)!=0) {

          if (hBackBit) {

              DeleteObject(hBackBit);

              hBackBit=NULL;

          }

          if (IsStrEmpty(NewOption.BackBit)==FALSE) {

              if (strncmp(NewOption.BackBit,"»ùÇÃ:",5) == 0) {

                   if (strcmp(NewOption.BackBit+5,"±¹È­")==0)

                        hBackBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_SAMPLE1));

                   if (strcmp(NewOption.BackBit+5,"Äá")==0)

                        hBackBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_SAMPLE2));

                   if (strcmp(NewOption.BackBit+5,"¾Æ°¡")==0)

                        hBackBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_SAMPLE3));

              } else {

                   hBackBit=MakeDDBFromDIB(NewOption.BackBit);

              }

          }

          bChangeBackBit=TRUE;

     }

 

     hChild=GetWindow(g_hMDIClient,GW_CHILD);

     while (hChild) {

          ....

 

          if (EqualRect(&Option.InnerRect,&NewOption.InnerRect)==FALSE) {

              pSi->Ae.SetInnerRect(NewOption.InnerRect);

          }

 

          if (Option.InnerRectColor != NewOption.InnerRectColor) {

              pSi->Ae.SetInnerRectColor(NewOption.InnerRectColor & 0xff000000 ?

                   NewOption.InnerRectColor & 0xffffff:arSysColor[11]);

          }

 

          if (Option.bShowRuler != NewOption.bShowRuler) {

              pSi->Ae.SetShowRuler(NewOption.bShowRuler);

          }

 

          if (Option.InnerRectColor != NewOption.InnerRectColor) {

              pSi->Ae.SetInnerRectColor(NewOption.InnerRectColor & 0xff000000 ?

                   NewOption.InnerRectColor & 0xffffff:arSysColor[11]);

          }

 

          if (Option.VAlign != NewOption.VAlign) {

              pSi->Ae.SetVAlign(NewOption.VAlign);

          }

 

          if (Option.SelBlockType != NewOption.SelBlockType) {

              pSi->Ae.SetSelBlockType(NewOption.SelBlockType);

          }

 

          if (Option.SelFrameColor != NewOption.SelFrameColor) {

              pSi->Ae.SetSelFrameColor(NewOption.SelFrameColor & 0xff000000 ?

                   NewOption.SelFrameColor & 0xffffff:arSysColor[10]);

          }

 

          if (bChangeBackBit) {

              pSi->Ae.SetBackBit(hBackBit);

          }

 

          if (Option.BackBitPos != NewOption.BackBitPos) {

              pSi->Ae.SetBackBitPos(NewOption.BackBitPos);

          }

 

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

     ....

 

Áö±Ý±îÁö ¸¹Àº ¿É¼ÇµéÀ» Ãß°¡ÇØ ¿Ô´Âµ¥ ´ëºÎºÐ µ¿ÀÏÇÑ ÀÛ¾÷ÀÇ ¹Ýº¹ÀÏ »ÓÀÌ´Ù. ±×·¯³ª ¹è°æ ºñÆ®¸Ê ¿É¼ÇÀº Á» ƯÀÌÇÏ°Ô Ãë±ÞµÇ´Âµ¥ º¯°æµÇ¾úÀ» ¶§ ºñÆ®¸ÊÀ» ÀÏ´Ü Æı«ÇÑ ÈÄ ´Ù½Ã ¸¸µç´Ù. ¸¸¾à ¹è°æ ºñÆ®¸Ê ¿É¼ÇÀ» Á¦°ÅÇ߰ųª À߸øµÈ ÆÄÀÏÀ» ÁöÁ¤ÇßÀ¸¸é hBackBit´Â NULL°ªÀ» °¡Áø´Ù. Á¦°ÅµÇ´Â °æ¿ì¸¦ À§ÇØ ºñÆ®¸ÊÀ» Æı«ÇÑ ÈÄ ¹Ýµå½Ã hBackBit¿¡ NULLÀ» ´ëÀÔÇÏ¿© ºñÆ®¸ÊÀÌ ÁöÁ¤µÇÁö ¾Ê¾ÒÀ½À» È®½ÇÈ÷ ÇØ¾ß ÇÑ´Ù.

¹è°æ ºñÆ®¸ÊÀÌ º¯°æµÇ¾ú´ÂÁö´Â bChangeBackBit º¯¼ö¿¡ µû·Î ÀúÀåÇØ µÎ°í while ·çÇÁ¿¡¼­ ¸ðµç ApiEdit ÄÁÆ®·Ñ¿¡ ´ëÇØ º¯°æµÈ ¹è°æ ºñÆ®¸ÊÀ» ´Ù½Ã ÁöÁ¤ÇÑ´Ù. È£½ºÆ®°¡ À¯ÁöÇÏ°í ÀÖ´Â hBackBit¸¦ ³Ñ±â¸¸ ÇÏ¸é µÈ´Ù. À̶§ hBackBit°¡ NULLÀÌ´õ¶óµµ ApiEdit¿¡°Ô ³Ñ°Ü¾ß ÀÌ¹Ì ÁöÁ¤µÇ¾î ÀÖ´Â ¹è°æ ºñÆ®¸ÊÀÌ »ç¶óÁø´Ù. »õ·Î »ý¼ºµÇ´Â ÄÁÆ®·Ñ¿¡µµ ÀÌ ¿É¼ÇµéÀ» Àû¿ëÇÑ´Ù.

 

void SetSetting(CApiEdit &Ae)

{

     ....

     if (EqualRect(&Option.InnerRect,&Ori.InnerRect)==FALSE) {

          Ae.SetInnerRect(Option.InnerRect);

     }

 

     if (Option.InnerRectColor & 0xff000000) {

          Ae.SetInnerRectColor(Option.InnerRectColor & 0xffffff);

     }

 

     if (Option.bShowRuler != Ori.bShowRuler) {

          Ae.SetShowRuler(Option.bShowRuler);

     }

 

     if (Option.RulerColor & 0xff000000) {

          Ae.SetRulerColor(Option.RulerColor & 0xffffff);

     }

 

     if (Option.VAlign != Ori.VAlign) {

          Ae.SetVAlign(Option.VAlign);

     }

 

     if (Option.SelBlockType != Ori.SelBlockType) {

          Ae.SetSelBlockType(Option.SelBlockType);

     }

 

     if (Option.SelFrameColor & 0xff000000) {

          Ae.SetSelFrameColor(Option.SelFrameColor & 0xffffff);

     }

 

     if (hBackBit) {

          Ae.SetBackBit(hBackBit);

     }

 

     if (Option.BackBitPos != Ori.BackBitPos) {

          Ae.SetBackBitPos(Option.BackBitPos);

     }

}

 

¹è°æ ºñÆ®¸ÊÀº ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ¹«Á¶°Ç ÁöÁ¤ÇÑ´Ù. ÀÌÁ¦ ½ÇÇàÁß ¾ðÁ¦¶óµµ ¼³Á¤ ´ëÈ­»óÀÚ¿¡¼­ ¿É¼ÇÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.