<LRESULT¿Í CALLBACKÀÇ µ¥ÀÌÅÍÇü¿¡ °üÇØ>
À©µµ¿ì ÇÁ·Î½ÃÁ®¸¦ º¸¸é LRESULT¿Í CALLBACKÀ̶ó´Â µ¥ÀÌÅÍÇüÀÌ ÀÖ½À´Ï´Ù. Ã¥¿¡¼ º¸¸é LRESULT´Â À©µµ¿ì ÇÁ·Î½ÃÀú¿¡¼ ¹ÝȯµÇ´Â µ¥ÀÌÅÍÇüÀÌ°í CALLBACKÀº FAR PASCALÀ» ÀçÁ¤ÀÇÇÑ °ÍÀ¸·Î Äݹé·çƾÀ̳ª ÇÁ·Î½ÃÀú¿¡¼ »ç¿ëÇÑ´Ù°í ³ª¿Í ÀÖ´õ±º¿ä. LRESULT´Â À©µµ¿ì ÇÁ·Î½ÃÀú¿¡¼ ¹ÝȯµÇ´Â µ¥ÀÌÅÍÇüÀ̶ó°í Çϴµ¥ ¹«¾ùÀ» ¹ÝȯÇÏ´Â °ÍÀÎÁö ±Ã±ÝÇÕ´Ï´Ù. ¶ÇÇÑ CALLBACK¿¡¼´Â FAR PASCALÇüÀÌ ¹«¾ùÀÌ°í Äݹé·çƾÀº ¹«¾ùÀ» ¸»ÇÏ´Â °ÍÀÎÁö, Ȥ½Ã ¿î¿µÃ¼Á¦°¡ ÇÊ¿ä¿¡ ÀÇÇØ È£ÃâÇÏ´Â °ÍÀ» ¸»ÇÏ´ÂÁö »ç¿ë¿¹¸¦ ÅëÇØ ÀÚ¼¼ÇÏ°Ô ¼³¸íÇØ ÁÖ¼¼¿ä.
¸ÕÀú LRESULT¿¡ ´ëÇØ ¸»ÇØ º¸¸é LRESULT´Â ºñÁÖ¾ó C++¿¡¼ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÅ ÀÖ½À´Ï´Ù.
#define LRESULT LONG
Áï LRESULT´Â long º¯¼öÀÇ ´Ù¸¥ À̸§ÀÏ »ÓÀÔ´Ï´Ù. longÀ̶ó´Â ¸®ÅÏ°ªÀ» ¾²Áö ¾Ê°í ±»ÀÌ LRESULT¶ó°í Àç¼±¾ðÇÑ °ÍÀº ÀÌ °ªÀÌ ¸®ÅÏ°ªÀÓÀ» Á»´õ ¸íÈ®È÷ ³ªÅ¸³»±â À§ÇÑ ÇÁ·Î±×·¡¸ÓÀÇ Àǵµ¶ó »ý°¢ÇÏ¸é µË´Ï´Ù. °á±¹ LRESULT·Î ¹ÝȯµÇ´Â °ªÀº long°ªÀ̶ó »ý°¢ÇÏ¸é µÇ´Âµ¥ ±×·¸´Ù°í Çؼ ²À ¼ýÀÚÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. longÀº 4 ¹ÙÀÌÆ® º¯¼öÀ̹ǷΠLRESULT¿¡ Æ÷ÀÎÅ͸¦ ij½ºÆÃÇؼ ¹ÝȯÇصµ ¹«°üÇÕ´Ï´Ù. Æ÷ÀÎÅÍ ¿ª½Ã 4¹ÙÀÌÆ®ÀÇ º¯¼öÀÏ »ÓÀ̴ϱî¿ä. ´ëºÎºÐÀÇ À©µµ¿ì ÇÁ·Î±×·¥¿¡¼´Â LRESULT °ªÀ¸·Î °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ´Â °ÍÀ» ÀÚÁÖ º¼ ¼ö ÀÖÀ» °Ì´Ï´Ù.
CALLBACKÀº FAR PASCALÀÇ ´Ù¸¥ À̸§ÀÔ´Ï´Ù. FAR¶ó´Â °ÍÀº ¿ø°Å¸® Æ÷ÀÎÅÍÀÓÀ» ³ªÅ¸³»´Â °ÍÀÌ°í PASCALÀ̶ó´Â °ÍÀº ÇÔ¼ö È£Ãâ±Ô¾àÀ» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. ÇÁ·Î±×·¡¹Ö ³»¿¡¼ ÇÔ¼öÈ£ÃâÀ̶ó´Â °ÍÀº ±× ÇÔ¼öÀÇ ½ÃÀÛÆ÷ÀÎÅÍ·Î Á¡ÇÁÇÏ´Â °ÍÀ» ÀǹÌÇÏ°í, ¶Ç À©µµ¿ì¿¡¼´Â °¡»ó ¸Þ¸ð¸® ÁÖ¼Ò¸¦ »ç¿ëÇϹǷΠ´ëºÎºÐÀÇ ÇÔ¼ö ÁøÀԺΰ¡ ¿ø°Å¸® Æ÷ÀÎÅͶó´Â ¶æÀÔ´Ï´Ù.
ÇÏÁö¸¸ À©µµ¿ì 95À̻󿡼´Â ¿ø°Å¸® Æ÷ÀÎÅÍ¿Í ±Ù°Å¸® Æ÷ÀÎÅÍÀÇ ±¸ºÐÀÌ ¾øÀ¸¹Ç·Î FAR¶ó´Â °ÍÀº ¹«½ÃÇصµ »ó°ü¾ø½À´Ï´Ù. PASCAL È£Ãâ±Ô¾àÀ̶ó´Â °ÍÀº ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ³Ñ°ÜÁö´Â ÀÎÀÚ°¡ ½ºÅÿ¡ ¾î¶°ÇÑ ¼ø¼·Î ½×ÀÏÁö¿¡ ´ëÇÑ ¾à¼ÓÀÔ´Ï´Ù. C¿¡¼´Â ÀÎÀÚ¸¦ ¿ÞÂÊ¿¡¼ºÎÅÍ ¿À¸¥ÂÊÀ¸·Î Â÷·Ê·Î ÀÎÀÚ °ªÀ» ½ºÅÿ¡ ³Ö¾î ³Ñ°ÜÁÖ°í ÇÔ¼ö¿¡ ÁøÀÔÇϸé ÀÌ¿Í´Â ¹Ý´ë¼ø¼·Î ½ºÅÿ¡¼ ±× °ªÀ» ¹Þ¾Æ¿Í »ç¿ëÇÕ´Ï´Ù. ÇÏÁö¸¸ C++¿¡¼´Â ÀÌ¿Í ¹Ý´ëÀÇ ¼ø¼·Î ½ºÅÿ¡ ÀÎÀÚ¸¦ ³Ö¾î »ç¿ëÇÏ°Ô µË´Ï´Ù. ¶ÇÇÑ PASCAL È£Ãâ±Ô¾àÀº ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÌÀü¿¡ »ç¿ëµÇ´ø º¯¼öÀÇ °ª ax, bx, cx µîÀÇ °ªÀ» ¸ÕÀú ½ºÅÿ¡ ³Ö¾îµÎ¾ú´Ù°¡ ÇÔ¼ö°¡ ¸®ÅϵDZâ Àü¿¡ ÀÌ °ªÀ» º¹¿ø½ÃÄÑÁÖÁö¸¸ C¿¡¼´Â ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü ÀÌ·¯ÇÑ ÀϵéÀ» ÇÏ°í ÇÔ¼ö°¡ ³¡³ª¼ ÀÌÀüÀÇ ½ºÅÜÀ¸·Î µ¹¾Æ¿À¸é ±×Á¦¼¾ß º¯¼ö°ªÀ» º¹¿øÇÏ´Â ÀÏÀ» ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ °ÍÀÌ ¹Ù·Î FAR PASCALÀÌ ÀǹÌÇÏ´Â °ÍÀÌ°í ÀÌ°ÍÀ» CALLBACKÀ̶ó°í ¼±¾ðÇØ »ç¿ëÇÏ´Â °ÍÀº ÀÌ ÇÔ¼ö°¡ ÄݹéÇÔ¼ö·Î »ç¿ëµÊÀ» ÇÁ·Î±×·¡¸Ó°¡ ¸í½ÃÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. Áï ÀÚ½ÅÀÌ Â§ ÀÌ ÇÔ¼ö´Â À©µµ¿ì¿¡¼ CALLBACKµÇ¾î ºÒ¸®¾îÁö´Â ÇÔ¼ö¶ó´Â °ÍÀ» ÀÚ½ÅÀ̳ª, ´Ù¸¥ »ç¶÷ÀÌ ºÁ¼ ±Ý¹æ ¾Ë ¼ö ÀÖµµ·Ï ÀÌ·¸°Ô À̸§ ºÙ¿©³õÀº °ÍÀÔ´Ï´Ù. ÀÌ µÎ °¡Áö ¸ðµÎ »ç¿ë ¿ëµµ¸¦ ¸íÈ®È÷ ÇÏ´Â ¿ªÇÒÀ» ÇÒ »Ó ´Ù¸¥ °Í°úÀÇ Â÷ÀÌÁ¡Àº ¾ø´Âµ¥, ÀÌ·¸°Ô »ç¿ëÇÏ´Â ÀÌÀ¯´Â À©µµ¿ì ÇÁ·Î±×·¥ÀÇ Å©±â°¡ ¿¹Àü¿¡ ºñÇØ ¹«Ã´ Ä¿Á®°¡°í ÀÛ¾÷µµ ¿©·¯ »ç¶÷ÀÌ °°ÀÌ ÇÏ´Â °æ¿ì°¡ ¸¹¾Æ ¼·ÎÀÇ Àǵµ¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô ¸íÈ®ÇÏ°Ô ¼³¸íÇÏ°íÀÚ ÇÏ´Â Á¦ÀÛÀÚÀÇ Àǵµ°¡ µé¾îÀÖ´Ù°í º¸¸é µË´Ï´Ù.
<MDI¿¡¼ Child View Handle ±¸ÇÏ´Â ¹æ¹ý>
MDI·Î ÇÁ·Î±×·¥À» ¸¸µé°í Àִµ¥ µÎ °³ÀÇ Ã¢À» ¶ç¿ì°í °¢°¢ÀÇ ºäÀÇ ÇÚµéÀ» ¾Ë°í ½ÍÀºµ¥ ¹æ¹ýÀ» ¸ð¸£°Ú½À´Ï´Ù.
MDI¿¡¼ ÇöÀç ¶°ÀÖ´Â ºäÀÇ ÇÚµéÀ» ±¸ÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ ¿©·¯ °¡ÁöÀÏ ¼ö ÀÖ½À´Ï´Ù.
[1] CWinAppÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÑ´Ù.
[2] ÇöÀçÀÇ µµÅ¥¸ÕÆ® ÅÛÇø´À¸·ÎºÎÅÍ
CDocumentÀÇ ¸®½ºÆ®¿¡ Á¢±ÙÇÑ´Ù.
[3] ÇöÀç ¹¿©ÀÖ´Â µµÅ¥¸ÕÆ® ¸®½ºÆ®·ÎºÎÅÍ
Â÷·Ê·Î µµÅ¥¸ÕÆ® Æ÷ÀÎÅ͸¦ ¾ò´Â´Ù.
[4] °¢°¢ÀÇ µµÅ¥¸ÕÆ®¿¡´Â Çϳª ÀÌ»óÀÇ
ºä°¡ Á¸ÀçÇϹǷΠÀ̸¦ ±¸ÇÑ´Ù.
CMainFrame::GetViewPtr()
{
// CWinAppÀÇ
Æ÷ÀÎÅ͸¦ ±¸ÇÑ´Ù.
CTestApp* pApp = (CAddApp*)AfxGetApp();
//
ÇöÀçÀÇ µµÅ¥¸ÕÆ® ÅÛÇø´À¸·ÎºÎÅÍ µµÅ¥¸ÕÆ® ¸®½ºÆ®¿¡¼ ù° µµÅ¥¸ÕÆ®ÀÇ À§Ä¡¸¦ ±¸ÇÑ´Ù.
POSITION
pos = pApp->m_pDocTemplate->GetFirstDocPosition();
CTestDoc*
pDoc;
CTestView* pView;
POSITION
posView;
while( pos != NULL ) {
//
GetNextDoc()À» ¼öÇàÇÏ¸ç µµÅ¥¸ÕÆ® ¸®½ºÆ®¿¡¼ µµÅ¥¸ÕÆ® Æ÷ÀÎÅ͸¦ ±¸ÇÑ´Ù.
pDoc
= (CAddDoc*)pApp->m_pDocTemplate->GetNextDoc( pos );
//
±¸ÇØÁø µµÅ¥¸ÕÆ® Æ÷ÀÎÅÍ¿¡¼ ÇöÀç µµÅ¥¸ÕÆ®¿Í ¿¬°üµÅ ÀÖ´Â ºä Æ÷ÀÎÅ͸¦ ±¸ÇÑ´Ù.
//
ÇϳªÀÇ µµÅ¥¸ÕÆ®¿¡ ÇϳªÀÇ ºä°¡ Á¸ÀçÇÑ´Ù°í °¡Á¤
posView
= pDoc->GetFirstViewPosition();
pView
= (CAddView*)pDoc->GetNextView( posView );
}
}
ÀÌ¿Í °°´Ù¸é ÇöÀç ¶° Àִ âÀÇ ºä Æ÷ÀÎÅ͸¦ ¸ðµÎ ¾òÀ» ¼ö ÀÖÀ» °Ì´Ï´Ù. ¾Õ¿¡¼ GetNextDoc()Àº ÇöÀç(¸®½ºÆ®ÀÇ À§Ä¡)ÀÇ µµÅ¥¸ÕÆ® Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ ÈÄ¿¡ pos°ªÀ» ´ÙÀ½ µµÅ¥¸ÕÆ® Æ÷ÀÎÅÍÀÇ À§Ä¡·Î ¹Ù²ß´Ï´Ù. µû¶ó¼ ¸¶Áö¸· µµÅ¥¸ÕÆ® Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ ÈÄ¿¡´Â ´õ ÀÌ»ó ¾øÀ¸¹Ç·Î pos °ªÀ» NULL·Î ¼³Á¤ÇÕ´Ï´Ù. ±×·¯¸é ·çÇÁ¸¦ ºüÁ®³ª¿À°Ô µÇ°í ÇöÀç ¶°ÀÖ´Â ¸ðµç µµÅ¥¸ÕÆ®¿Í ±×¿¡ µû¸¥ ºä Æ÷ÀÎÅÍ ¹× ÇÚµéÀ» ±¸ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
C¿¡¼ »ç¿ëÇÏ´Â inport, outport ¸í·ÉÀ» ºñÁÖ¾ó C++¿¡¼ ±¸ÇöÇϴ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù. ¹æ¹ýÀ» ¾Ë·ÁÁÖ¼¼¿ä.
<conio.h>¸¦ º¸¸é _inp(), _inpw(), _inpd(), _outp(), _outpw(), _outpd() ¶ó´Â ¶óÀ̺귯¸® ÇÔ¼ö°¡ Àִµ¥, À̸¦ ÀÌ¿ëÇÏ¸é ºñÁÖ¾ó C++¿¡¼ ÇØ´ç Æ÷Æ® µ¥ÀÌÅ͸¦ Àаųª ÇØ´çÆ÷Æ®¿¡ µ¥ÀÌÅ͸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù. _inp() ´Â 1¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ Æ÷Æ®·ÎºÎÅÍ °¡Á®¿À´Â °ÍÀÌ°í, _inpw() ´Â 2¹ÙÀÌÆ®, _inpd() ´Â 4¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â ÇÔ¼öµéÀÔ´Ï´Ù. _outp() °è¿ÀÇ ÇÔ¼ö´Â ÇØ´ç ¹ÙÀÌÆ®¸¸Å ÇØ´ç Æ÷Æ®¿¡ ¾²±â(Write)¸¦ ÇÏ´Â °ÍÀÔ´Ï´Ù.
BYTE byteData = _inp( 0x3f8 );
ÀÌ¿Í °°´Ù¸é 0x3f8(COM1 address)¹øÁö¿¡¼ 1¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °ÍÀÌ°í,
_outp( 0x3f8, byteData );
ÀÌ¿Í °°´Ù¸é 0x3f8 ¹øÁö¿¡ 1¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ¾²°Ô µË´Ï´Ù.
ŸÀÌƲ ¹Ù¸¦ Á¦°¡ ¸¸µç ºñÆ®¸Ê ±×¸²À¸·Î ¿¹»Ú°Ô ¹Ù²Ù°í ½ÍÀºµ¥ ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ÀÌ¿Í ÇÔ²² ÃÖ¼Òȳª ÃÖ´ëÈ, ´Ý±â ¹öÆ°µµ ºñÆ®¸ÊÀ¸·Î ¹Ù²Ù°í ½ÍÀºµ¥ ¾î¶»°Ô ÇØ¾ß Çմϱî?
ĸ¼Ç ¹Ù¸¦ ¾ø¾Ö°í ±× ºÎºÐÀ» À§Ä¡ °ª°ú ºñÆ®¸Ê ¹öÆ° µîÀ» ÀÌ¿ëÇØ ´Ý±â, ÃÖ¼ÒÈ, ÃÖ´ëÈ ¹öÆ°µéÀ» ¸¸µé¾î ÁÝ´Ï´Ù. ´ÙÀ̾ó·Î±×¸¦ ¿òÁ÷ÀÏ ¶§ ÀÏÁ¤ À§Ä¡¿¡¼ ¸¶¿ì½º°¡ µÉ ¶§ ¿òÁ÷ÀÌ°Ô ÇÏ¸é µË´Ï´Ù. ½±°Ô ¸»Çϸé ĸ¼Ç ¹Ù¸¦ ¸¸µé¾î ÁÖ´Â ¼ÀÀÌÁö¿ä. ±×¸®°í ĸ¼Ç ¹ÙÀÇ ÁÖ ±â´ÉÀÎ Àâ°í ¿òÁ÷ÀÌ´Â °ÍÀº ´ÙÀ½¿¡¼ ¼Ò°³ÇÏ´Â ¼Ò½º(3ºÎºÐ)¸¦ Âü°íÇϱ⠹ٶø´Ï´Ù. ´ÙÀ̾ó·Î±× ¾Æ¹« °÷À̳ª Àâ¾Æµµ âÀ» ¿òÁ÷ÀÏ ¼ö ÀÖ´Â ¼Ò½ºÀÔ´Ï´Ù.
void CDragDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags,
point);
// fake windows into thinking your
clicking on the caption, does not
// maximizeon
double click
PostMessage(WM_NCLBUTTONDOWN,
HTCAPTION, MAKELPARAM(point.x, point.y));
}
//
Generated message map function
//{{AFX_MSG(CDragDlgDlg)
virtual
BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT
nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg
HCURSOR OnQueryDragIcon();
afx_msg void OnLButtonDown(UINT
nFlags, CPoint point);
//}}AFX_MSG
afx_msg
UINT OnNcHitTest( CPoint point ); // <- ¿©±â¿¡ Ãß°¡
DECLARE_MESSAGE_MAP();
UINT
CDragDlg::OnNcHitTest(CPoint point);
{
UINT
nHitTest = CDialog::OnNcHitTest( point );
//
also fake windows out, but this maximizes the window
//
when you double click on it.
return (nHitTest
== HTCLIENT) ? HTCAPTION : nHitTest;
}
ºñÁÖ¾ó C++¿¡¼ ´ÙÀ̾ó·Î±× ¹Ú½º µî¿¡¼ ½ºÅÂƽ(Static) ÅؽºÆ®³ª ¹öÆ° µîÀÇ Ä¸¼Ç¿¡ »ç¿ëµÇ´Â ±ÛÀÚÀÇ Å©±â¸¦ ¹Ù²Ù°í ½Í½À´Ï´Ù. ±×¸®°í °¡´ÉÇϸé ÆùÆ®µµ ¹Ù²Ù°í ½Í±¸¿ä. ¹æ¹ýÀ» ¾Ë·ÁÁÖ¼¼¿ä.
¸ÕÀú CFontÇü ¸â¹ö º¯¼ö°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×ÀÇ ¸â¹ö º¯¼ö·Î CFont m_font;¸¦ OnInitDialog() Çڵ鷯¿¡¼ ´ÙÀ½°ú °°ÀÌ ÆùÆ®¸¦ ÃʱâÈÇÏ°í ½ºÅÂƽ(ȤÀº ¹öÆ°)°ú ¿¬°üµÈ ÄÁÆ®·Ñ º¯¼ö(m_ctlStatic)¿¡ SetFont(...) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ÆùÆ®¸¦ ÁöÁ¤ÇÕ´Ï´Ù. CreateFont(...) ÇÔ¼ö¿¡ ´ëÇؼ´Â MSDNÀ» Âü°íÇϱ⠹ٶø´Ï´Ù.
m_font.CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "±Ã¼Ã¼");
m_ctlStatic.SetFont(&m_font);
- the end of this article -