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°³ ÀÌ»ó
Â÷À̰¡ ³ª¸é, Àӽà ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ¿ø·¡ ÆÄÀÏ¿¡¼ ¸µÅ© Çʵ带 ÂѾư¡¸é¼ Àоî¼
Àӽà ÆÄÀÏ¿¡ ¾²°Ô ÇÕ´Ï´Ù. ±×·± ÈÄ¿¡ ¿ø·¡ ÆÄÀÏÀ» »èÁ¦Çϰí, Àӽà ÆÄÀÏÀ» ¿ø·¡ ÆÄÀÏÀÇ
À̸§À¸·Î º¯°æÇÕ´Ï´Ù. ¾Õ¿¡¼ ¼³¸íÇÑ ¹æ¹ýÀº ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ °æ¿ì¿¡ ¸Þ¸ð¸®¿¡ ¸µÅ©¸¦
±¸¼ºÇÏÁö ¾Ê°í ÆÄÀÏÀÇ ¸µÅ©¸¦ ±¸¼ºÇϰíÀÚ ÇÒ ¶§¸¸ À¯¿ëÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀÇ ÀåÁ¡Àº
ÇÊ¿äÇÑ ¸Þ¸ð¸® °ø°£ÀÌ Ç×»ó ±¸Á¶Ã¼ÀÇ ¼³Ê ¹è Á¤µµ¸¸ ÀÖÀ¸¸é µÈ´Ù´Â °ÍÀÔ´Ï´Ù.