<2°³ÀÇ Åø¹Ù¸¦ ÇÑÁÙ¿¡>

MFC·Î 2°³ÀÇ Åø¹Ù¸¦ ¸¸µé¾ú½À´Ï´Ù. ±×·±µ¥ ÀÌ Åø¹Ù°¡ ÇÑÁÙ¾¿ µû·Îµû·Î ³õÀ̴±º¿ä. ¹°·Ð Ưº°È÷ ¹®Á¦°¡ µÇ´Â °ÍÀº ¾Æ´ÏÁö¸¸ °³ÀÎÀûÀ¸·Î´Â Åø¹Ù¸¦ ¸ðµÎ ÇÑÁÙ¿¡ ³õ°í ½Í½À´Ï´Ù. ³ª¸§´ë·Î ¹®¼­¸¦ ã¾Æº¸±âµµ ÇßÁö¸¸ »ÏÁ·ÇÑ ¹æ¹ýÀÌ ¾ø±º¿ä. °¡·É ´ÙÀ½°ú °°Àº Äڵ忡¼­ Åø¹Ù¸¦ ÇÑÁÙ¿¡ ¸ðÀ¸·Á¸é ¾î¶»°Ô ÇØ¾ß Çմϱî?

class CMainFrame : public CFrame
{
protected:
    CToolBar wnd_myToolBar;
    CToolBar wnd_othToolBar;
    ...
};

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    wnd_myToolBar.Create(...);
    wnd_othToolBar.Create(...);
    ...
}

DockControlBarLeftOf ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é °¡´ÉÇÕ´Ï´Ù. DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)ó·³ µÎ °³ÀÇ Åø¹Ù¸¦ Àμö·Î ¹Þ±â ¶§¹®ÀÔ´Ï´Ù. µû¶ó¼­ Bar¿Í LeftOf Åø¹Ù´Â ÇÑÁÙ¿¡ Ãâ·ÂµÉ °ÍÀÔ´Ï´Ù. ´ÙÀ½ Äڵ带 Âü°íÇϱ⠹ٶø´Ï´Ù.

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    EnableDocking(CBRS_ALIGN_ANY);

    m_wndToolBar.SetWindowText(_T("myToolBar"));
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar, AFX_IDW_DOCKBAR_TOP);

    wnd_othToolBar.SetWindowText(_T("otherToolBar"));
    wnd_othToolBar.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBarLeftOf(&m_wndToolBar, &wnd_othToolBar);
   ...
}

void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf)
{
    CRect rect;
    DWORD dw;
    UINT n;
    // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    RecalcLayout();
    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);

    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
    // When we take the default parameters on rect, DockControlBar will dock
    // each Toolbar on a seperate line.  
    // By calculating a rectangle, we in effect
    // are simulating a Toolbar being dragged to that location and docked.
    DockControlBar(Bar,n,&rect);
}

<ÇöÀç µð·ºÅ丮ÀÇ Á¤º¸¸¦ ¾Ë¾Æ³»´Â ¹ý>

ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ À̸§À̳ª ÇÏÀ§ µð·ºÅ丮 µîÀÇ Á¤º¸¸¦ ¾Ë¾Æ³»´Â ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù.

´ÙÀ½ ¼Ò½º ÇÁ·Î±×·¥Àº ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ¼­ºê µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀ» ã¾Æ¼­ ÆÄÀÏ À̸§À» ¸ðµÎ ¼Ò¹®ÀÚ·Î ¹Ù²Ù´Â ·çƾÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº °¢ ÇÔ¼öº°·Î µµ¿ò¸»À» ÂüÁ¶Çϱ⠹ٶø´Ï´Ù.

void lookup()
{
    char new_filename[100];
    int leng;
    struct _finddata_t c_file;
    long hFile;
    int temp = 0;

    if ((hFile = _findfirst("*.*",&c_file)) == -1L) {
     cout << "error" << endl;
    }

    for (; temp == 0; temp = _findnext(hFile,&c_file)){
        leng = strlen(c_file.name);
        if ((c_file.attrib & _A_SUBDIR) == _A_SUBDIR){
            if (c_file.name[0] != '.'){
                _chdir(c_file.name);
                lookup();
                _chdir("..");
            }
        continue;
        }
        else if ((c_file.attrib & _A_ARCH) != _A_ARCH) continue;
        for(int i = 0;i < leng;i++){
            new_filename[i] = tolower(c_file.name[i]);
        }
        new_filename[i] = '\0';
        rename(c_file.name, new_filename);
    }
    _findclose(hFile);
}

<BMP ÆÄÀÏ¿¡ Åõ¸í»öÀ» ÁöÁ¤ÇÏ´Â ¹ý>

ºñÁÖ¾ó C++¸¦ ÀÌ¿ëÇØ BMP ÆÄÀÏÀ» ó¸®Çϴµ¥ BMP ÆÄÀÏÀ» Àоî Åõ¸í»öÀ» ÁöÁ¤ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß Çϳª¿ä. Âü°í·Î ÇöÀç ½ºÅ©¸° ¼¼À̹ö¸¦ Á¦ÀÛÁßÀÔ´Ï´Ù.

ºñÁÖ¾ó C++¿¡¼­ ÀÚµ¿À¸·Î ÀÌ ¹®Á¦¸¦ Áö¿øÇÏ´Â ¹æ¹ýÀº ¾ø°í, ´Ù¸¸ ÀÌ¿¡ ´ëÇÑ ÇÔ¼ö°¡ °ø°³µÇ¾î ÀÖÀ» »ÓÀÔ´Ï´Ù.
MSJDrawTransparentBitmapÀ̶ó´Â ÇÔ¼ö°¡ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ knowledgebase 079212¿¡ ³ª¿ÍÀÖ½À´Ï´Ù. ´ÙÀ½ ¼Ò½º Äڵ带 º¸¸é ÀÌ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀº ºñÆ®¸ÊÀ» ºÒ·¯¿À°í ÆäÀÎÆÃ Ç¥¸éÀ» Åõ¸íÇÏ°Ô Ä¥Çϱâ À§ÇØ ¸¶½ºÅ©·Î º¸³»´Â ÀÛ¾÷À» ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù(ÀÚ¼¼ÇÑ ³»¿ëÀº MSJ Çѱ¹ÆÇ 98³â 1¿ùÈ£ 108ÂÊ Âü°í).

// MSJDrawTransparentBitmap
// ÇÔ¼ö´Â º¹»çµÇ¾ú°í Knowledgebase ±â»ç Q79212À¸·ÎºÎÅÍ Àû¿ëµÇ¾ú´Ù.
// Á¦¸ñ : Åõ°úµÇ´Â ºñÆ®¸Ê ±×¸®±â
void MSJDrawTransparentBitmap(CDC* pDC, CBitmap* pBitmap, int xStart,
    int yStart, COLORREF cTransparentColor)
{
    CBitmap bmAndBack, bmAndObject, bmAndMem, bmSave;
    CDC dcMem, dcBack, dcObject, dcTemp, dcSave;
    dcTemp.CreateCompatibleDC(pDC);
    dcTemp.SelectObject(pBitmap); //ºñÆ®¸Ê ¼±ÅÃÇϱâ
    BITMAP bm;
    pBitmap->GetObject(sizeof(BITMAP), (LPSTR)&bm);
    CPoint ptSize;
    ptSize.x = bm.bmWidth;         // ºñÆ®¸ÊÀÇ Æø
    ptSize.y = bm.bmHeight;        // ºñÆ®¸ÊÀÇ ³ôÀÌ
    dcTemp.DPtoLP(&ptSize, 1);     // ³í¸® Æ÷ÀÎÆ®·ÎºÎÅÍ ÀåÄ¡ Æ÷ÀÎÆ®·Î º¯È¯
    // Àӽà µ¥ÀÌÅ͸¦ º¸°üÇϱâ À§ÇØ ¸î¸î DC¸¦ »ý¼º
    dcBack.CreateCompatibleDC(pDC);
    dcObject.CreateCompatibleDC(pDC);
    dcMem.CreateCompatibleDC(pDC);
    dcSave.CreateCompatibleDC(pDC);
    // °¢ DC¸¦ À§ÇØ ºñÆ®¸ÊÀ» »ý¼º. DC´Â GDIÀÇ ¼ýÀÚ¸¸Å­ ÇÊ¿äÇÏ´Ù.
    functions.
    // ¸ð³ëÅ©·Ò DC
    bmAndBack.CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);
    // ¸ð³ëÅ©·Ò DC
    bmAndObject.CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);
    bmAndMem.CreateCompatibleBitmap(pDC, ptSize.x, ptSize.y);
    bmSave.CreateCompatibleBitmap(pDC, ptSize.x, ptSize.y);
    // °¢ DC´Â Çȼ¿ µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇØ ºñÆ®¸Ê °´Ã¼¸¦ ¼±ÅÃÇØ¾ß ÇÑ´Ù.
    CBitmap* pbmBackOld = dcBack.SelectObject(&bmAndBack);
    CBitmap* pbmObjectOld = dcObject.SelectObject(&bmAndObject);
    CBitmap* pbmMemOld = dcMem.SelectObject(&bmAndMem);
    CBitmap* pbmSaveOld = dcSave.SelectObject(&bmSave);
    // Àû´çÇÑ ¸ÊÇÎ ¸ðµå¸¦ ¼³Á¤ÇÑ´Ù.
    dcTemp.SetMapMode(pDC->GetMapMode());
    // À̸®·Î º¸³»Áø ºñÆ®¸ÊÀ» ÀúÀåÇÑ´Ù.
    dcSave.BitBlt(0, 0, ptSize.x, ptSize.y, &dcTemp, 0, 0, SRCCOPY);
    // Åõ¿µµÇ´Â ºñÆ®¸Ê¿¡ Æ÷ÇԵǴ »öÀ¸·Î ¼Ò½º DCÀÇ ¹è°æ»öÀ» ¼³Á¤ÇÑ´Ù.
    COLORREF cColor = dcTemp.SetBkColor(cTransparentColor);
    // ¼Ò½º ºñÆ®¸Ê¿¡¼­ ¸ð³ëÅ©·Ò ºñÆ®¸Ê±îÁö BitBlt¸¦ ¼öÇàÇØ¼­
    // ºñÆ®¸Ê¿ë ¿ÀºêÁ§Æ® ¸¶½ºÅ©¸¦ »ý¼ºÇÑ´Ù.
    dcObject.BitBlt(0, 0, ptSize.x, ptSize.y, &dcTemp, 0, 0, SRCCOPY);
    // ¿ø·¡ »öÀ¸·Î µÇµ¹¸®´Â ¼Ò½º DCÀÇ ¹è°æ»öÀ» ¼³Á¤ÇÑ´Ù.
    dcTemp.SetBkColor(cColor);
    // °´Ã¼ ¸¶½ºÅ©¸¦ ¹ÝÀü½ÃŲ´Ù.
    dcBack.BitBlt(0, 0, ptSize.x, ptSize.y, &dcObject, 0, 0, NOTSRCCOPY);
    // ¸ñÀûÁö¿¡ ¸ÞÀÎ DCÀÇ ¹è°æÀ» º¹»çÇÑ´Ù.
    dcMem.BitBlt(0, 0, ptSize.x, ptSize.y, pDC, xStart, yStart, SRCCOPY);
    // ºñÆ®¸ÊÀÌ ³õ¿©Áö´Â À§Ä¡¸¦ ¸¶½ºÅ©ÇÑ´Ù.
    dcMem.BitBlt(0, 0, ptSize.x, ptSize.y, &dcObject, 0, 0, SRCAND);
    // ºñÆ®¸ÊÀÇ Åõ¸í »ö»ó Çȼ¿À» ¸¶½ºÅ©ÇÑ´Ù.
    dcTemp.BitBlt(0, 0, ptSize.x, ptSize.y, &dcBack, 0, 0, SRCAND);    
    // ¸ñÀûÁö DC»ó¿¡¼­ ¹è°æ»ö°ú ºñÆ®¸ÊÀ» XOR ¿¬»êÇÑ´Ù.
    dcMem.BitBlt(0, 0, ptSize.x, ptSize.y, &dcTemp, 0, 0, SRCPAINT);
    // ½ºÅ©¸°¿¡ ¸ñÀûÁö¸¦ º¹»çÇÑ´Ù.
    pDC->BitBlt(xStart, yStart, ptSize.x, ptSize.y, &dcMem, 0, 0, SRCCOPY);
    // º¸³»Áø ºñÆ®¸ÊÀ¸·Î ¿ø·¡ ºñÆ®¸ÊÀ» ´ëüÇÑ´Ù.
    dcTemp.BitBlt(0, 0, ptSize.x, ptSize.y, &dcSave, 0, 0, SRCCOPY);
    // ¸Þ¸ð¸® ºñÆ®¸ÊÀ» ¸®¼Â½ÃŲ´Ù.
    dcBack.SelectObject(pbmBackOld);
    dcObject.SelectObject(pbmObjectOld);
    dcMem.SelectObject(pbmMemOld);
    dcSave.SelectObject(pbmSaveOld);
    // ¸Þ¸ð¸® DC¿Í ºñÆ®¸Ê °´Ã¼µéÀº ÀÚµ¿À¸·Î »èÁ¦µÈ´Ù.
}

<ÇÁ¸°Æ® ¿ëÁö Å©±â Á¦¾î>

CFormView¿¡¼­ ÇÁ¸°Æ® ¼Â¾÷ ´ÙÀ̾ó·Î±×¸¦ ¶ç¿ìÁö ¾Ê°í ÇÁ¸°Æ®°¡ °¡´ÉÇÑ ÇÁ·Î±×·¥À» ¸¸µé·Á°í ÇÕ´Ï´Ù. ÇÁ¸°Æ®ÇÏ´Â °Í±îÁö´Â ¾Æ¹« ¹®Á¦¾øÀÌ ÇØ°áÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù¸¸ ¿ëÁöÀÇ Å©±â¸¦ ¹Ù²Ù´Â µ¥¼­ ¸·Çô ´õ ÀÌ»ó ÁøÀüÀÌ ¾ø½À´Ï´Ù. DEVMODE¸¦ º¯°æÇÏ¸é µÈ´Ù´Â °Í±îÁö´Â ¾Ë°Ú´Âµ¥ ¾îµð¼­ ¾î¶»°Ô ¹Ù²ãÁà¾ß ÇÒÁö ¸·¸·Çϱ⸸ ÇÕ´Ï´Ù. Âü°í·Î ¹®Á¦°¡ µÇ´Â Á¦ ¼Ò½º ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.

   CPrintDialog *pMyDlg = new CPrintDialog(FALSE);
   DOCINFO di={ sizeof(DOCINFO),"Print1: Test",NULL};
   pMyDlg->GetDefaults();

   HDC hdc= pMyDlg->GetPrinterDC();
   ::StartDoc(hdc,&di);
   ::StartPage(hdc);

   ::TextOut(hdc, 0,  10, str, str.GetLength());

   ::RestoreDC(hdc,-1);
   ::EndPage(hdc);
   ::EndDoc(hdc);
   delete pMyDlg;

ÀϹÝÀûÀÎ CView¿¡¼­ ÇÁ¸°Æ® ¼Â¾÷ ´ÙÀ̾ó·Î±×¸¦ ¿À¹ö¶óÀ̵åÇØ¼­ ¿ëÁöÀÇ Å©±â¸¦ ¹Ù²Ù´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù. Áú¹®°ú °°ÀÌ DeviceMode¸¦ ¹Ù²Ù°í ½ÍÀ¸¸é ´ÙÀ½°ú °°ÀÌ ÇØº¸±â ¹Ù¶ø´Ï´Ù.

///////////////////
// nPaperSize - º¯°æÇÏ·Á´Â ¹®¼­ ±Ô°Ý (¹Ì¸® Á¤ÀǵǾî ÀÖÀ½)
// nOrient    - ¹®¼­ÀÇ Á¾È¾
void CMyDoc::UpdatePaperSize(int nPaperSize, int nOrient)
{
    PRINTDLG PrtDlg;

    if (!AfxGetApp()->GetPrinterDeviceDefaults(&PrtDlg))
    {
        TRACE0 ("Error - Not initialized default print.\n");
        return;
    }

    LPDEVMODE pDevMode = (LPDEVMODE) ::GlobalLock(PrtDlg.hDevMode);
    if (NULL == pDevMode)
    {
        TRACE0 ("failed to GlobalLock DEVMODE\n");
        return;
    }

    pDevMode->dmPaperSize   = nPaperSize;   //DMPAPER_A4, ...
    pDevMode->dmOrientation = nOrient;      //DMORIENT_PORTRAIT  (1) - ¼¼·Î
                                            //DMORIENT_LANDSCAPE (2) - °¡·Î
    ::GlobalUnlock(PrtDlg.hDevMode);
}
///////////////////

<¼öµ¿À¸·Î ¸Þ½ÃÁö ¸Ê¿¡ ¿¬°áÇϱâ>

Ŭ·¡½º À§Àúµå¿¡´Â ³ªÅ¸³ªÁö ¾ÊÁö¸¸ ¿øÇÏ´Â ¸Þ½ÃÁö¸¦ ¹Þ¾Æ ó¸®ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö ¾Ë°í ½Í½À´Ï´Ù.

ÀÓÀÇÀÇ ¸Þ½ÃÁö¿¡ ¹ÝÀÀÇÏ´Â Çڵ鷯¸¦ Ãß°¡ÇÏ·Á¸é ON_MESSAGE¶ó´Â ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇØ¼­ ¸Þ½ÃÁö Çڵ鷯¸¦ ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. Çì´õ¿Í ¼Ò½º¿¡¼­ ¸Þ½ÃÁö ¸ÊÀ» µÚÁ® ¼öµ¿À¸·Î ÀÔ·ÂÇØÁÖ¸é µÇ´Âµ¥, ¿¹¸¦ µé¾î WM_MSG000À̶ó´Â ¸Þ½ÃÁö¸¦
CYourView::OnMsg000À̶ó´Â ¸â¹ö ÇÔ¼ö°¡ ¹Þ°Ô ÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µË´Ï´Ù.

¨ç Çì´õÀÇ Àû´çÇÑ °÷¿¡´Ù ¸Þ½ÃÁö¸¦ Á¤ÀÇÇÑ´Ù.

        #define  WM_MSG000     (WM_USER+200)     ¡ç Àû´çÇÑ °ªÀ» ÁØ´Ù.

¨è YourView.h¿¡¼­ CYourView Ŭ·¡½ºÀÇ ¸â¹ö·Î OnMsg000 ÇÔ¼ö¸¦ ¼±¾ðÇÑ´Ù.
      //{{AFX_VIRTUAL µîÀ¸·Î Ç¥½ÃµÈ ±¸¿ª¿¡´Â ¾²Áö ¾Ê´Â´Ù.

        afx_msg LONG OnMsg000(UINT wParam, LONG lParam);

¨é YourView.cpp ÆÄÀÏ¿¡¼­ ¸Þ½ÃÁö ¸ÊÀ» ã¾Æ OnMsg000 ÇÔ¼ö¸¦ µî·ÏÇÑ´Ù.

BEGIN_MESSAGE_MAP(CYourView, CView)
    //{{AFX_MSG_MAP(CMeshViewView)
    ....                                  ¡ç ¿©±â¿¡ ¾²Áö ¸»°í
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_MSG000, OnMsg000)       ¡ç ¹Û¿¡ ½á¾ßµÈ´Ù.
END_MESSAGE_MAP()

¨ê YourView.cpp ÆÄÀÏ¿¡¼­ ¸â¹ö ÇÔ¼ö OnMsg000À» Á¤ÀÇÇÑ´Ù.

        afx_msg LONG OnMsg000(UINT wParam, LONG lParam)  {
       // ¿©±â´Ù°¡ Äڵ带 ½á³Ö´Â´Ù
        }

ÀÌÁ¦ WM_MSG000 ¸Þ½ÃÁö°¡ ³¯¾Æ¿À¸é CYourView::OnMsg000 ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ´Ù¸¥ ¸Þ½ÃÁöµµ °°Àº ¹æ¹ýÀ¸·Î ÇÏ¸é µË´Ï´Ù. ¶ÇÇÑ ClassWizardµµ °°Àº ¹æ¹ýÀ¸·Î ¸Þ½ÃÁö ¸ÊÀ» ºÙ¿©ÁÝ´Ï´Ù.

See Also
"ON_MESSAGE", "User-defined Message Handlers"

 

<ÆÄÀÏÀ» ¸µÅ©µå ¸®½ºÆ® Çü½ÄÀ¸·Î ÀúÀåÇÏ·Á¸é>

¾î¶² µ¥ÀÌÅ͸¦ ÀúÀåÇÏ·Á°í Çϴµ¥ µ¥ÀÌÅ͸¦ Áß°£¿¡ ½á³ÖÀ» °æ¿ì°¡ Àֱ⠶§¹®¿¡ ¸µÅ©µå ¸®½ºÆ® ¹æ½ÄÀ¸·Î ±¸ÇöÇϴµ¥ ¹®Á¦°¡ µË´Ï´Ù. ÆÄÀÏÀ» ¸µÅ©µå ¸®½ºÆ® Çü½ÄÀ¸·Î ÀúÀåÇÏ´Â ¹æ¹ýÀÌ ¹«¾ùÀÎÁö ±Ã±ÝÇÕ´Ï´Ù.

ÆÄÀϰú ¸Þ¸ð¸®ÀÇ ¸µÅ©µå ¸®½ºÆ®´Â »ç½Ç º° Â÷À̰¡ ¾ø½À´Ï´Ù. ÆÄÀÏ¿¡µµ ÆÄÀÏ À§Ä¡¶ó´Â °ÍÀÌ Á¸ÀçÇϹǷΠ±×°ÍÀ» ¸Þ¸ð¸® ÁÖ¼Ò¶ó°í »ý°¢Çϰí ÄÚµùÇÏ¸é µË´Ï´Ù.
º¸Åë ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖ°ÚÁö¸¸ Á¦ °æ¿ì´Â ´ÙÀ½°ú °°ÀÌ ±¸¼ºÇß½À´Ï´Ù. ¿ì¼± ÆÄÀÏÀÇ ¸Ç ¾ÕºÎºÐ¿¡´Â ù° µ¥ÀÌÅÍÀÇ ºí·°ÀÇ À§Ä¡¸¦ Ç¥½ÃÇÏ´Â Header¿Í ¸¶Áö¸· µ¥ÀÌÅÍ ºí·°À» ÁöÁ¤ÇÏ´Â Tail·Î ÇÒ´çÇÕ´Ï´Ù. ¹°·Ð µ¥ÀÌÅÍ ºí·°¿¡´Â ´ÙÀ½ µ¥ÀÌÅÍ ºí·°ÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â Æ÷ÀÎÅ͸¦ µ¥ÀÌÅÍ¿¡ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù.

HEADER - TAIL - DATA1 - DATA2 - DATA3  - . . . .

Å©°Ô º¸¸é ´ëÃæ ÀÌ·± ¹æ¹ýÀ¸·Î ±¸¼ºµË´Ï´Ù. ¸Þ¸ð¸®ÀÇ ¸µÅ©µå ¸®½ºÆ®¿Í Èí»çÇÏ´Ù´Â °ÍÀ» ÇÑ´«¿¡ ¾Ë ¼ö ÀÖ½À´Ï´Ù.
»õ·Î¿î µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ´Â °úÁ¤Àº ´ÙÀ½°ú °°½À´Ï´Ù.
 
¨ç »õ·Î¿î µ¥ÀÌÅÍ ºí·ÏÀ» »ðÀÔÇÏ°Ô µÇ¸é ÆÄÀÏÀÇ ¸Ç ¸¶Áö¸·¿¡ »õ·Î Ãß°¡ÇÑ´Ù.
 ¨è TAILÀÇ ¸¶Áö¸· µ¥ÀÌÅÍ ºí·° ÆÄÀÏ À§Ä¡¸¦ Àоîµé¿© ±× À§Ä¡·Î À̵¿ÇÑ´Ù.
 ¨é ¸¶Áö¸· µ¥ÀÌÅÍ ºí·ÏÀÇ ¿À¸¥ÂÊ Æ÷ÀÎÅͰ¡ »ðÀÔµÈ ÆÄÀÏ À§Ä¡¸¦ ÁöÁ¤Çϵµ·Ï °»½ÅÇÑ´Ù.
 ¨ê »õ·Î »ðÀÔµÈ µ¥ÀÌÅÍÀÇ ¿ÞÂÊ Æ÷ÀÎÅͰ¡ ¹Ù·Î ÀÌÀü ¸¶Áö¸· µ¥ÀÌÅÍ ºí·°ÀÇ ÆÄÀÏ À§Ä¡¸¦
     ÁöÁ¤Çϵµ·Ï ÇÑ´Ù.
 ¨ë TAILÀÇ Æ÷ÀÎÅ͸¦ »õ·Ó°Ô »ðÀÔµÈ µ¥ÀÌÅÍ ºí·°ÀÇ ÆÄÀÏ À§Ä¡°ªÀ¸·Î °»½ÅÇÑ´Ù
      (Áï »õ·Ó°Ô Ãß°¡µÈ µ¥ÀÌÅͰ¡ ¸Ç ¸¶Áö¸· µ¥ÀÌÅͰ¡ µÈ´Ù).

»èÁ¦ÀÇ °æ¿ìµµ ¸¶Âù°¡Áö·Î µ¥ÀÌÅÍÀÇ ÁÂ, ¿ì Æ÷ÀÎÅÍ ÆÄÀÏ À§Ä¡·Î ¾ÕµÚ µ¥ÀÌÅ͸¦ ã¾Æ¼­ µ¥ÀÌÅÍ ºí·°ÀÇ ÆÄÀÏ À§Ä¡¸¸ °»½ÅÇØ ÁÖ¸é µË´Ï´Ù(»èÁ¦½Ã ½ÇÁ¦ µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡¼­ »èÁ¦ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ÜÁö »èÁ¦µÈ µ¥ÀÌÅÍÀÇ ¿¬°á°í¸®¸¦ ²÷¾îÁÖ´Â °ÍÀÌ´Ù). ±×¸®°í Header´Â óÀ½À¸·Î µ¥ÀÌÅÍ ºí·°ÀÌ »ðÀԵǰųª, ù° µ¥ÀÌÅÍ ºí·°ÀÌ »èÁ¦µÉ °æ¿ì¿¡¸¸ °»½ÅÇØÁÖ¸é µË´Ï´Ù. ÀÌ·¸°Ô ±¸¼ºÇϸé ÁÙÁÙÀÌ µ¥ÀÌÅ͵éÀÌ ¿«¾î Áý´Ï´Ù.
¸¸ÀÏ ´ÜÀÏ ¸µÅ©¶ó°í °¡Á¤ÇÏ¸é ±¸Á¶Ã¼³ª Ŭ·¡½ºÀÇ Å©±â¸¦ ¾Ë¾Æ³»´Â °ÍÀº ¸Å¿ì ½±°Ô ÇØ°áÇÒ ¼ö ÀÖ°í, ¶ÇÇÑ Å©±â¸¦ ¾Ë¸é ÆÄÀÏÀ» ¿¬ ÈÄ¿¡ ¾ÕµÚ·Î À̵¿ÇÒ ¼öµµ ÀÖ½À´Ï´Ù(CÀÇ fseek °°Àº).
¸Þ¸ð¸®¿¡¼­ Á¤º¸ÀÇ ¸µÅ© Çʵ尡 ÇÊ¿äÇϵíÀÌ ÆÄÀÏ¿¡ ÀúÀåÇÒ ¶§µµ ¸µÅ© Çʵ带 ´ëüÇÒ ¹«¾ùÀΰ¡°¡ ÇÊ¿äÇÕ´Ï´Ù. unsigned int¸¸ ½áµµ 16ºñÆ®¿¡¼­´Â 65535°³ÀÇ ¸µÅ©°¡ Á¶Àý °¡´ÉÇÕ´Ï´Ù. ¾î·µç ù ±¸Á¶Ã¼°¡ µé¾î°¥ ¶§´Â À妽º 0À» °®°Ô µÇ°í(0ºÎÅÍ ½ÃÀÛÀ̶ó°í ÇÒ ¶§) µÑ°³ª ¼Â°µµ ÇØ´ç À妽º¸¦ °¡Áö°í µé¾î°¡°Ô µË´Ï´Ù. ù° ÀúÀåÀº ÀÌ·Î ÀÎÇØ¼­ Â÷·ÊÂ÷·Ê ÀúÀåµË´Ï´Ù. À妽º¸¦ 1ºÎÅͶó°í Çϸé(0ºÎÅÍ ½ÃÀÛÀ̶ó°í ÇØ¼­) À̶§ À妽º´Â ´ÙÀ½ À妽º¸¦ ±â·ÏÇÑ´Ù°í °¡Á¤ÇÕ´Ï´Ù. ãÀ» ¶§´Â ±¸Á¶Ã¼ Å©±â ´ÜÀ§·Î ÆÄÀÏ¿¡¼­ ÀÐ¾î µéÀ̰í, ´ÙÀ½ ±¸Á¶Ã¼´Â À妽º¡¿±¸Á¶Ã¼ Å©±â¸¸Å­ óÀ½ºÎÅÍ °¡°Ô µË´Ï´Ù. ÀÌ·Î½á ÆÄÀÏÀ» ¼øÂ÷ÀûÀ¸·Î Àд °ÍÀÌ ¾Æ´Ñ ¸µÅ© Çʵ带 ÀÌ¿ëÇÑ Á¢±ÙÀÌ ¿Ï¼ºµË´Ï´Ù.
¼öÁ¤½Ã¿¡´Â ÀÌ ±¸Á¶Ã¼°¡ ÆÄÀÏÀÇ ¾î´À ºÎºÐÀÎÁö ´ç¿¬È÷ ¾Ë ¼ö ÀÖ°Ô µË´Ï´Ù. µû¶ó¼­ ÆÄÀÏÀÇ ±× À§Ä¡¿¡ µ¤¾î¾²¸é ¼öÁ¤ÀÌ µË´Ï´Ù. ¹®Á¦°¡ µÇ´Â °ÍÀº ¸µÅ©°¡ º¯°æµÇ¾úÀ» ¶§Àε¥, ¸ÕÀú »õ·Î¿î ±¸Á¶Ã¼°¡ Áß°£¿¡ ³¢¾îµé¾î°¥ °æ¿ì¸¦ »ý°¢ÇØ º¾½Ã´Ù. °£´ÜÈ÷ ÀÌ »õ·Î¿î ±¸Á¶Ã¼¸¦ ±×Àú ÆÄÀÏÀÇ ³¡¿¡ Ãß°¡ÇÏ¸é µË´Ï´Ù. ±×¸®°í ÀÌ ±¸Á¶Ã¼¸¦ °¡¸®ÄÑ¾ß ÇÏ´Â Á¤º¸·ÎºÎÅÍ ´ÙÀ½ À妽º¸¦ ¾ò¾î¾ß ÇÕ´Ï´Ù. ±×¸®°í ³ª¼­ À̸¦ ÀúÀåÇØµÎ°í ¾ò¾î¿Â Á¤º¸ÀÇ À妽º¸¦ »õ·Î¿î ±¸Á¶Ã¼ÀÇ À妽º·Î ÀúÀåÇÕ´Ï´Ù. ´ÙÀ½Àº »õ·Î¿î ±¸Á¶Ã¼ÀÇ À妽º¿¡´Ù Á¤º¸¿¡¼­ ¾ò¾î¿Â À妽º(´ÙÀ½ ±¸Á¶Ã¼)¸¦ ±â·ÏÇÕ´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î Á¢±Ù°ú ¼öÁ¤ ±×¸®°í ¸µÅ© ÇʵåÀÇ Ãß°¡(³¢¿ö ³Ö±â) µîÀÌ ÇØ°áµË´Ï´Ù.
¸¶Áö¸·À¸·Î °í·ÁÇØ¾ß ÇÒ ºÎºÐÀÌ »èÁ¦ÇÒ ¶§ÀÔ´Ï´Ù. »èÁ¦°¡ µÇ¸é ±×Àú À妽º Á¢±Ù¿¡¼­ »©¹ö¸³´Ï´Ù. Áï ÆÄÀÏÀÇ ±× ±¸Á¶Ã¼ À§Ä¡·Î °¡°Ô ÇÏ´Â °ÍÀÌ ¾øÀ¸¸é µÈ´Ù´Â ¸»ÀÌÁÒ. ÇÏÁö¸¸ ¹®Á¦°¡ µÇ´Â °ÍÀº »èÁ¦°¡ ¸¹ÀÌ ¹ß»ýÇÏ¸é ¾µµ¥¾øÀÌ ÆÄÀÏÀÌ Ä¿Áý´Ï´Ù. À̸¦ ¹æÁöÇϱâ À§Çؼ­´Â ¾²·¹±â û¼Ò ·çƾÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ÃÑ ÆÄÀÏ Å©±â¸¦ ¾ò¾î¿Â ÈÄ ±¸Á¶Ã¼ÀÇ Å©±â·Î ³ª´©¸é ÆÄÀÏ¿¡ ÀúÀåµÈ ±¸Á¶Ã¼ÀÇ °³¼ö¸¦ ¾Ë°Ô µË´Ï´Ù. ±×·³ ½ÇÁ¦ µî·ÏµÈ ±¸Á¶Ã¼ÀÇ °³¼ö¿Í ºñ±³ÇÑ ÈÄ 10°³ ȤÀº 100°³ ÀÌ»ó Â÷À̰¡ ³ª¸é, Àӽà ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ¿ø·¡ ÆÄÀÏ¿¡¼­ ¸µÅ© Çʵ带 ÂѾư¡¸é¼­ Àо Àӽà ÆÄÀÏ¿¡ ¾²°Ô ÇÕ´Ï´Ù. ±×·± ÈÄ¿¡ ¿ø·¡ ÆÄÀÏÀ» »èÁ¦Çϰí, Àӽà ÆÄÀÏÀ» ¿ø·¡ ÆÄÀÏÀÇ À̸§À¸·Î º¯°æÇÕ´Ï´Ù. ¾Õ¿¡¼­ ¼³¸íÇÑ ¹æ¹ýÀº ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ °æ¿ì¿¡ ¸Þ¸ð¸®¿¡ ¸µÅ©¸¦ ±¸¼ºÇÏÁö ¾Ê°í ÆÄÀÏÀÇ ¸µÅ©¸¦ ±¸¼ºÇϰíÀÚ ÇÒ ¶§¸¸ À¯¿ëÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀÇ ÀåÁ¡Àº ÇÊ¿äÇÑ ¸Þ¸ð¸® °ø°£ÀÌ Ç×»ó ±¸Á¶Ã¼ÀÇ ¼­³Ê ¹è Á¤µµ¸¸ ÀÖÀ¸¸é µÈ´Ù´Â °ÍÀÔ´Ï´Ù.