<Åø¹Ù ¼û±â±â/º¸ÀÌ±â ¿É¼Ç ÁÖ±â>
MFC·Î ÀÛ¼ºÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ Åø¹Ù¿Í »óŹٴ ±âº»À¸·Î Ãß°¡µÇ´Âµ¥, ¸Þ´ºÀÇ º¸±â Ç׸ñ¿¡ Åø¹Ù¸¦ ¼û±æ ¼ö ÀÖ´Â ¿É¼ÇÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô Åø¹Ù¸¦ ¼û±â°Å³ª º¸ÀÌ°Ô ¼±Åà ¿É¼ÇÀ» ÁÖ´Â ¹æ¹ýÀÌ ÀÖ³ª¿ä?
¹°·Ð ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥À¸·Î Åø¹Ù(¶Ç´Â »óŹÙ)¸¦ ¼û±â°Å³ª º¸ÀÌ°Ô ÇÏ·Á¸é ¸ÞÀÎÇÁ·¹ÀÓ¿¡ ÀÌ ¸Þ½ÃÁö¸¦ º¸³»¸é °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. º¸±â ¸Þ´º¿¡¼ Åø¹Ù¸¦ º¸À̱â/¼û±â±â ¸í·ÉÀº ¸ÞÀÎÇÁ·¹ÀÓÀÌ À̸¦ ´ë½Å ó¸®ÇϹǷΠ¸ÞÀÎÇÁ·¹ÀÓ¿¡´Â ±âº»ÀûÀ¸·Î ÀÌ ¸í·É¿¡ ´ëÇÑ Çڵ鷯°¡ ÀÛ¼ºµÅ ÀÖ½À´Ï´Ù. À̶§ wParam°ªÀÌ 0ÀÌ¸é ¼û±â°í, 0ÀÌ ¾Æ´Ï¸é ´Ù½Ã º¸¿© ÁÝ´Ï´Ù. ¿©±â¼ Åø¹Ù³ª »óŹٸ¦ ¾ø¾Ö°Å³ª ´Ù½Ã º¸ÀÌ°Ô ÇÏ´Â ¸Þ´º ¸í·É ID´Â ID_VIEW_TOOLBAR¿Í ID_VIEW_STATUSBARÀÔ´Ï´Ù.
´ÙÀ½ÀÇ ¼Ò½º´Â Åø¹Ù¿Í »óŹٸ¦ ¼û±â´Â ÄÚµåÀÔ´Ï´Ù. ¹Ý´ë·Î Åø¹Ù³ª »óŹٸ¦ º¸ÀÌ°Ô ÇÏ·Á¸é wParam°ªÀ» 0ÀÌ ¾Æ´Ñ °ªÀ» ³Ö¾î ÁÖ¸é µË´Ï´Ù.
if( ((CMainFrame*)GetParent())->m_wndToolBar.IsWindowVisible()) {
GetParent()->SendMessage(WM_COMMAND,
ID_VIEW_TOOLBAR, 0L);
}
if( ((CMainFrame*)GetParent())->m_wndStatusBar.IsWindowVisible()) {
GetParent()->SendMessage(WM_COMMAND,
ID_VIEW_STATUS_BAR, 0L);
}
<Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀ» Ŭ¸¯ÇØ À©µµ¿ì¸¦ À̵¿ÇÏ·Á¸é>
ĸ¼Ç »Ó ¾Æ´Ï¶ó À©µµ¿ìÀÇ ´Ù¸¥ °÷À» Ŭ¸¯ÇßÀ» ¶§µµ À©µµ¿ì¸¦ À̵¿½Ãų ¼ö ÀÖ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ½Í½À´Ï´Ù.
À©µµ¿ì´Â ¸¶¿ì½º À§Ä¡¸¦ °áÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ WM_NCHITTEST ¸Þ½ÃÁö¸¦ À©µµ¿ì¿¡
Àü´ÞÇÕ´Ï´Ù. ±×·¯¹Ç·Î ¸¶¿ì½º°¡ ĸ¼Ç¿¡ À§Ä¡ÇÏÁö ¾Ê¾Ò´õ¶óµµ À©µµ¿ì¸¦ ¼ÓÀÏ ¼ö ÀÖ½À´Ï´Ù.
¹æ¹ýÀº ¸ÕÀú À§Àúµå¸¦ »ç¿ëÇØ WM_NCHITTEST ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í, ±âº» Ŭ·¡½º
ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ÇÔ¼ö°¡ HTCLINE¸¦ ¹ÝȯÇÑ ÈÄ ¸¶¿ì½º°¡ Ŭ¶óÀ̾ðÆ® ¿µ¿ª¿¡ ÀÖ´Ù°í
¾Ë·Á ÁÙ ¶§ ¸¶¿ì½º À§Ä¡¸¦ ĸ¼ÇÀ¸·Î ÀνÄÇÏ°Ô²û HTCATION°ªÀ» µ¹·ÁÁÖ¸é µË´Ï´Ù.
UNIT CSampleDialog::OnNchitTest(CPoint point) {
UINT nHiTest = CDialog::OnNchitTest(point);
return (nHitest ==HTCLINT) ? HTCAPTION : nHitest
}
±× ´ÙÀ½¿¡ Ŭ·¡½º À§Àúµå¸¦ »ç¿ëÇØ ºä¿¡¼ WM_LBUTTONDOWN ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í, ÇÁ·¹ÀÓ À©µµ¿ì¿¡ ¸¶¿ì½ºÀÇ ´¸² »óŸ¦ HTCATION·Î ÁöÁ¤ÇØ WM_NCLBUTTONDOWN ¸Þ½ÃÁö¸¦ Àü´ÞÇÏ¸é µË´Ï´Ù.
void CSampleView::OnLBottonDown(UNIT nFlags, CPoint point) {
CView;;OnLBottonDown(nFlags, point) ;
//»ç¿ëÀÚ°¡ ĸ¼ÇÀ» Ŭ¸¯ÇÑ °ÍÀ¸·Î ÀνÄÇÏ°Ô ÇÁ·¹ÀÓÀ» ¼ÓÀδÙ.
GetParent()->PostMessage(WM_ NCLBUTTONDOWN, HTCATION)
MAKELPARAM(point.x, point.y) ;
}
¿©±â¼ Cwnd::Getparent¿¡ ´ëÇÑ È£ÃâÀº ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
void CSampleDialog::OnLBottonDown(UNIT nFlags, CPoint point) {
CDialog::OnLBottonDown(nFlags, point)
//»ç¿ëÀÚ°¡ ĸ¼ÇÀ» Ŭ¸¯ÇÑ °ÍÀ¸·Î ÀνÄÇÏ°Ô²û ´ëÈ»óÀÚ¸¦ ¼ÓÀδÙ.
PostMessage(WM_ NCLBUTTONDOWN, HTCAPTION,
MAKELPARAM(point.x,
point.y));
}
ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀº µÎ °¡Áö ¹®Á¦Á¡ÀÌ ÀÖ½À´Ï´Ù. Çϳª´Â Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀ» ´õºíŬ¸¯Çϸé À©µµ¿ì°¡ ÃÖ´ëÈµÅ¾ß Çϴµ¥, ºä¸¦ °¡Áö´Â ÇÁ·¹ÀÓ À©µµ¿ì¿¡¼´Â Çã¿ëÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ°í, ¶Ç´Ù¸¥ Çϳª´Â ¿ÞÂÊ ¸¶¿ì½º ´ÜÃ߸¦ Ŭ¸¯ÇÒ ¶§ ĸ¼Ç¹Ù¸¦ Ŭ¸¯ÇÑ °Íó·³ Àνĵȴٴ °ÍÀÔ´Ï´Ù.
<ÃÖ´ëÈµÈ SDI À©µµ¿ì¸¦ ½ÇÇàÇÏ·Á¸é>
óÀ½ À©µµ¿ì¸¦ ½ÇÇàÇÒ ¶§ ÃÖ´ëÈ(Maximize)µÈ »óÅ·Π½ÇÇàÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö ¾Ë°í ½Í½À´Ï´Ù. MDIÀÇ °æ¿ì´Â À§Àúµå¿¡¼ ¿É¼ÇÀ» ¼³Á¤ÇÏ¸é µÇÁö¸¸ SDIÀÇ °æ¿ì´Â À§Àúµå¿¡¼ ¿É¼ÇÀ» ¼³Á¤Çصµ ÃÖ´ëȵÇÁö ¾Ê½À´Ï´Ù.
CWinAppÀÇ InitInstance ÇÔ¼ö¿¡¼ ´ÙÀ½°ú °°ÀÌ Äڵ带 º¯°æÇØ ÁÖ¸é
°¡´ÉÇÕ´Ï´Ù.
// ¿ø·¡ ÄÚµå
BOOL CMailApp::InitInstance() {
. m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
// ¹Ù²ï ÄÚµå
BOOL CMailApp::InitInstance() {
. m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd->UpdateWindow();
return TRUE;
}
<DC ÇÚµé·Î CDC °´Ã¼¸¦ ¸¸µé·Á¸é>
¿À³Ê µå·Î¿ì(owner draw) ¹öÆ°À» ¸¸µé ¶§ WM_DRAWITEM ¸Þ½ÃÁö¿¡¼´Â DRAWITEMSTRUCT ±¸Á¶Ã¼¿Í DC ÇÚµéÀ» ³Ñ±â´Âµ¥, À̸¦ ÀÌ¿ëÇØ CDC °´Ã¼¸¦ »ý¼ºÇÏ°í ½Í½À´Ï´Ù.
CDCÀÇ ¸â¹ö ÇÔ¼öÁß FormHandle()À̶ó´Â ¸â¹ö ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ÇÚµéÀ» °¡Áö°í
°´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ°Ô ÇÏ´Â ÇÔ¼ö·Î Çڵ鸸 ¾Ë°í ÀÖÀ¸¸é °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
FromHandle()Àº CDC »Ó¸¸ ¾Æ´Ï¶ó ÇÚµéÀ» °®°í ÀÖ´Â À©µµ¿ì ¿ÀºêÁ§Æ®¿¡ ¸ðµÎ »ç¿ëÇÒ
¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¸é CFont³ª CBrush¿Í °°Àº GDI °´Ã¼³ª CWnd, CSocketÀ» ºñ·ÔÇÑ ÇÚµéÀ»
ÀÌ¿ëÇÏ´Â °´Ã¼´Â ¸ðµÎ ÀÌ·± ¸â¹ö ÇÔ¼ö¸¦ °®°í ÀÖÀ¸¹Ç·Î ÇÚµéÀ» ¾Ë°í ÀÖÀ¸¸é ¾ðÁ¦µçÁö
°´Ã¼¸¦ ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½ ÄÚµå´Â DC ÇÚµéÀ» ÀÌ¿ëÇØ CDC °´Ã¼¸¦ »ý¼ºÇÏ´Â ¿¹¸¦ º¸¿© ÁÖ´Â ÄÚµåÀÔ´Ï´Ù.
void MyODList::DrawItem(LPDRAWITEMSTRUCT lpDrawItem) {
CDC* pDC;
pDC = CDC:FromHandle(lpDrawItem->hDC);
}
<Æ®¸® ÄÁÆ®·ÑÀ» ÀÌ¿ëÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â>
CTreeView¸¦ ÀÌ¿ëÇØ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ·Á°í ÇÕ´Ï´Ù. ±×·±µ¥ Á¦°¡ Á÷Á¢ Á¤ÀÇÇÑ Æ®¸® ÄÁÆ®·ÑÀ» ÀÌ¿ëÇÏ°í ½Í½À´Ï´Ù.
¸ÕÀú CTreeCtrl·ÎºÎÅÍ »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ±×¸®°í ³ª¼ CTreeViewÀÇ
GetTreeCtrl()¸¦ ÀÌ¿ëÇØ CTreeView·ÎºÎÅÍ Æ®¸® ÄÁÆ®·ÑÀ» ¾ò¾î ¿É´Ï´Ù.
´ÙÀ½Àº ¾ò¾î¿Â Æ®¸® ÄÁÆ®·ÑÀ» ÀÚ½ÅÀÌ Á¦ÀÛÇÑ Æ®¸® ÄÁÆ®·Ñ·Î ¼ºêŬ·¡½ÌÇÏ´Â
°ÍÀÔ´Ï´Ù. ±×·¯¸é Æ®¸®ºä¿¡¼ »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ Æ®¸® ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
// ¸ÕÀú ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÑ´Ù.
class CYourTreeCtrl : public CTreeCtrl {
// ¿©±â¿¡ ÀÛ¼º.
};
// Æ®¸®ºä¿¡ ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ Æ®¸® ÄÁÆ®·ÑÀ» ¸â¹ö·Î ¼±¾ðÇÑ´Ù.
Class CYourTreeView : public CTreeView {
protected: CYourTreeCtrl m_yourTreeCtrl;
.};
// OnCreate Çڵ鷯¿¡¼ ÀÚ½ÅÀÌ Á¦ÀÛÇÑ ÄÁÆ®·Ñ·Î ¼ºêŬ·¡½ÌÇÑ´Ù.
void CYourTreeCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if(CTreeView::OnCreate(plCreateStruct) != 0)
return 1;
if(!m_yourTreeCtrl.SubclassWindow(GetTreeCtrl().GetSafeHwnd()))
return 1;
return 0;
}
ÇÁ·Î±×·¥ ¾È¿¡¼ ½Ã½ºÅÛ¿¡ ¼³Á¤µÅ ÀÖ´Â ±âº» ºê¶ó¿ìÀú¸¦ ¶ç¿ì´Â ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù.
À©µµ¿ì APIÁß¿¡¼ ShellExecute()¸¦ ÀÌ¿ëÇÏ¸é °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇüÀº ´ÙÀ½°ú °°½À´Ï´Ù.
HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile,
LPCTSTR lpParameters, LPCTSTR lpDirectory,
INT nShowCmd);
ShellExecute()ÀÇ ¼¼¹ø° ÀÎÀÚÀÎ plFile¿¡ URLÀ» Àû¾îÁÖ¸é ½Ã½ºÅÛ¿¡ ¼³Á¤µÅ
ÀÖ´Â ±âº» ºê¶ó¿ìÀú¸¦ ½ÇÇàÇØ ÁöÁ¤ÇÑ URLÀ» ¿¾î ÁÝ´Ï´Ù.
ShellExcute(NULL, NULL, http://www.somesite.com, NULL, SW_SHOWNORMAL);
<µµÅ¥¸ÕÆ® ¾ø´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â>
MFC·Î µµÅ¥¸ÕÆ®³ª ºä°¡ ¾ø´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé°í ½Í½À´Ï´Ù.
µÎ °¡Áö ¹æ¹ýÀÌ Àִµ¥, Çϳª´Â À§Àúµå¿¡¼ ´ÙÀ̾ó·Î±× º£À̽º(dialog based)
¿É¼ÇÀ» ¼±ÅÃÇÏ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ̾ó·Î±× º£À̽ºÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº µµÅ¥¸ÕÆ®³ª ºä°¡
»ý¼ºµÇÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ ÇÑ °¡Áö´Â CWinApp¿Í CFrameWnd¸¦ Á÷Á¢ ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù.
MFC ¾ÖÇø®ÄÉÀ̼ÇÀº ¹Ýµå½Ã CWinApp¿Í CFrameWnd°¡ Á¸ÀçÇØ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù.
ÀÌ·¸°Ô À§Àúµå¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í ÀÛ¼ºÇϸé CFramewnd¿¡¼ WM_PAINT µîÀÇ ÀϹÝÀûÀ¸·Î
À©µµ¿ì°¡ ó¸®ÇÏ´Â ¸Þ½ÃÁö¸¦ ó¸®ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ¿¹´Â MFC »ùÇÿ¡¼ ¹ßÃéÇÑ
³»¿ëÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¸é µµÅ¥¸ÕÆ®¿Í ºä°¡ ¾ø´Â À©µµ¿ì¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
(Âü°í : VC++ 6.0 ¿¡´Â µû·Î ÀÌ·¯ÇÑ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.)
#include <afxwin.h>
class CNoviewWindow : public CFrameWnd {
public:
CNoviewWindow() {
Create(NULL, _T("Hello World!"), WS_OVERLAPPEDWINDOW,
rectDefault); }
};
class CNoviewApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
BOOL CNoviewApp::InitInstance() {
m_pMainWnd = new CNoviewWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CNoviewApp NoviewApp;