À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   [MFC] Status Bar 1998/08/03 (20:42)
À̸§ swindler
¹øÈ£ 55
Á¶È¸ 422
º»¹® »óŹٴ ¿À·ÎÁö pane¿¡ ÅؽºÆ®¸¦ Ãâ·ÂÇÏ´Â ¿ªÇÒ¸¸ Çϸç, ¸Þ½ÃÁö
¶óÀÎ ÆÐÀΰú »óÅ ǥ½ÃÀÚ ÆÐÀÎ µÎ °¡Áö ÇüŸ¦ Áö¿øÇÑ´Ù.

AppWizard°¡ MainFrm.cppÆÄÀÏ¿¡ »ý¼ºÇÑ Á¤Àû ¹è¿­ indicators[]
Àº ¾îÇø®ÄÉÀ̼ÇÀÇ »óŹ٠ÆÐÀÎÀ» Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ID_SEPARATOR´Â
¸Þ½ÃÁö ¶óÀÎ ÆÐÀÎÀ» Á¤ÀÇÇÑ´Ù.±× ¿ÜÀÇ »ó¼ö´Â »óÅ ǥ½ÃÀÚ ÆÐÀÎÀ»
Á¤ÀÇÇÏ´Â ¹®ÀÚ¿­ ¸®¼Ò½º IDÀÌ´Ù.

CStatusBar::SetIndicators()ÇÔ¼ö´Â ¹è¿­ indicators[]ÀÇ
³»¿ë¿¡ µû¶ó »óŹٸ¦ ±¸¼ºÇÑ´Ù.

¸Þ½ÃÁö ¶óÀÎ ÆÐÀÎÀº µ¿ÀûÀÎ ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. ¸ÕÀú »óŹ٠°´Ã¼¿¡
¾×¼¼½ºÇÑ ´ÙÀ½ SetPaneText()ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¼³Á¤ÇÑ´Ù.

CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar* pStatus=&pFrame->m_wndStatusBar;
pStatus->SetPaneText(0,"message for first pane");

»óÅ ǥÁö»ç ÆÐÀÎÀº ´ÜÀÏ ¸®¼Ò½º¿¡ ÀÇÇØ Á¦°øµÇ´Â ¹®ÀÚ¿­°ú ¿¬°áµÇ¸ç,
ÀÌ ¹®ÀÚ¿­Àº °»½Å ¸í·É UI¸Þ½ÃÁö Çڵ鷯 ÇÔ¼ö¿¡ ÀÇÇØ Ç¥½ÃµÇ°Å³ª
»ç¶óÁø´Ù.

ON_UPDATE_COMMAND_UI(ID_INDICATORS_CAPS,OnUpdateKeyCapsLock)
// ÀÌ ÁÙÀº ¸Þ½ÃÁö ¸Ê ¿£Æ®¸®¿¡ µé¾î°£´Ù.
void CMainFrame::OnUpdateKeyCapsLock(CCmdUI* pCmdUI)
{ pCmdUI->Enable(::GetKeyState(VK_CAPITAL)&1); }


»óŹٴ Â÷Àϵå À©µµ¿ì ID·Î AFX_IDW_STATUS_BAR¸¦ µðÆúÆ®·Î
ÇÒ´ç¹Þ´Â´Ù. »óŹٸ¦ Á¦¾îÇϱâ À§Çؼ­´Â µðÆúÆ® ID¸¦ ´Ù¸¥
Â÷Àϵå À©µµ¿ì ID¸¦ »ç¿ëÇØ¾ß ÇÏ°í ´Ù¸¥ Ç¥½ÃÀÚ ID»ó¼ö¸¦ »ç¿ëÇؾß
ÇÑ´Ù.(»óŹÙÀÇ Â÷Àϵå À©µµ¿ì ID¸¦ ¹Ù²Ù´Â ÀÌÀ¯´Â ÇÁ·¹ÀÓ¿öÅ©°¡
0¹ø ÆÐÀο¡ ¸Þ´º ÇÁ·ÒÇÁÆ®¸¦ Ç¥½ÃÇÏÁö ¸øÇϵµ·Ï Çϱâ À§ÇÔÀÌ´Ù.)
MainFrame.cppÆÄÀÏ¿¡ OnCreate()ÇÔ¼ö¿¡¼­ È£ÃâµÇ´Â
CStatusBar::Create()ÇÔ¼ö¸¦ º¯°æÇØ¾ß ÇÑ´Ù.

m_wndStatusBar.Create(this,WS_CHILD | WS_VISIBLE |
 CBRS_BOTTOM, ID_MY_STATUS_BAR);

Resource Symbols...¸Þ´º ¾ÆÀÌÅÛÀ» ¼±ÅÃÇÏ¿© ¸®¼Ò½º ½Éº¼
¿¡µðÅÍ¿¡¼­ ID_MY_STATUS_BAR»ó¼ö¸¦ Á¤ÀÇÇÑ´Ù.

Ç¥ÁØ ¾îÇø®ÄÉÀ̼ÇÀÇ View¸Þ´º¿¡¼­ »ç¿ëÀÚ°¡ »óŹٸ¦ show/hide
ÇÒ¼ö ÀÖ´Â ±â´ÉÀÌ ÀÖ´Ù. ÀÌ°ÍÀº ID°¡ AFX_IDW_STATUS_BARÀÎ
»óŹٿ¡ Àû¿ëµÇ¹Ç·Î ÀÌ ¸Þ´º ¾ÆÀÌÅÛµµ º¯°æÇØ¾ß ÇÑ´Ù. Áï, ÇÁ·¹ÀÓ
Ŭ·¡½º¿¡¼­ ¸Þ½ÃÁö ¸Ê ¿£Æ®¸£ ±×¸®°í, ID_VIEW_STATUS_BAR¸í·É°ú
°»½Å ¸í·É UI¸Þ½ÃÁö Çڵ鷯¸¦ »õ·Î ÀÛ¼ºÇؾ߸¸ ÇÑ´Ù.
ID_VIEW_STATUS_BAR´Â »óŹ٠¸Þ´º ¾ÆÀÌÅÛÀÇ IDÀÌ´Ù.

ex) »óŹٿ¡ ¸¶¿ì½º x,yÁÂÇ¥¸¦ ¸Þ½ÃÁö ¶óÀÎ ÆÐÀÎÀ¸·Î ¼³Á¤ÇÏ°í,
¿ÞÂÊ°ú ¿À¸¥ÂÊ ¹öÆ°À» »óÅ ǥ½ÃÀÚ ÆÐÀÎÀ¸·Î ¼³Á¤ÇØ º¸ÀÚ.
1. String Table¿¡¼­ ID_INDICATOR_LEFT, ID_INDICATOR_RIGHT¸¦
LEFT, RIGHT·Î Á¤ÀÇÇÑ´Ù.
2. Resource Symbols...¸Þ´º¿¡¼­ ID_MY_STATUS_BAR¸¦ Ãß°¡ÇÏ°í
µðÆúÆ® °ªÀ» ¹Þ¾ÆµéÀδÙ.
3. CMainFrame¿¡¼­ ID_VIEW_STATUS_BAR¿¡ ´ëÇÑ ¸Þ½ÃÁö
COMMAND¿Í UPDATE_COMMAND_UI¸¦ Ãß°¡ÇÑ´Ù.
4. ID_INDICATOR_LEFT(RIGHT)´Â ClassWizard°¡ ¸ÊÇÎÇÒ ¼ö
¾øÀ¸¹Ç·Î ¸Þ½ÃÁö Çڵ鷯¸¦ ¼öÀÛ¾÷À¸·Î Ãß°¡ÇØ¾ß ÇÑ´Ù.
afx_msg void OnUpdateLeft(CCmdUI* pCmdUI)
afx_msg void OnUpdateRight(CCmdUI* pCmdUI)
5. MainFrm.hÀÇ m_wndStatusBar¸¦ protected¿¡¼­ public
À¸·Î º¯°æÇÑ´Ù.
6. indicators[]={ID_SEPARATOR,ID_SEPARATOR,
ID_INDICATOR_LEFT, ID_INDICATOR_RIGHT]; ·Î º¯°æÇÑ´Ù.
7. OnCreateÇÔ¼ö¸¦ ÆíÁýÇÑ´Ù.
m_wndStatusBar.Create(this,WS_CHILD | WS_VISIBLE
| CBRS_BOTTOM,ID_MY_STATUS_BAR);
8. CMainFrame³»¿¡ ¸Þ½ÃÁö ¸Ê ¿£Æ®¸®¸¦ Ãß°¡ÇÑ´Ù.
ON_UPDATE_COMMAND_UI(ID_INDICATOR_LEFT,OnUpdateLeft)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_RIGHT,OnUpdateRight)
9. CMainFrame::OnUpdateLeft(CCmdUI* pCmdUI)
{ pCmdUI->Enable(::GetKeyState(VK_LBUTTON)<0); }
CMainFrame::OnUpdateRight(CCmdUI* pCmdUI)
{ pCmdUI->Enable(::GetKeyState(VK_RBUTTON)<0); }
10.
CMainFrame::OnViewStatusBar()
{ m_wndStatusBar.ShowWindow(m_wndStatusBar.GetStyle() &
WS_VISIBLE)==0);
RecalcLayout(); }

CMainFrame::OnUpdateViewStatusBar(CCmdUI* pCmdUI)
{ pCmdUI->SetCheck((m_wndStatusBar.GetStyle() &
WS_VISIBLE)!=0); }
11. CView::OnMouseMove(UINT nFlags, CPoint point)
{ CString str;
CMainFrame* pFrame=(CMainFrame*) AfxGetApp()->m_pMainWnd;
CStatusBar* pStatus=&pFrame->m_wndStatusBar;
if(pStatus){
str.Format("x=%d",point.x);
pStatus->SetPaneText(0,str);
str.Format("y=%d",point.y);
pStatus->SetPaneText(1,str);
} }
12. ù¹ø° ÆÐÀεµ °æ°è¼±ÀÌ Ç¥½ÃµÇ°Ô Çϰųª, »óŹٰ¡
º¸±â ÁÁ°Ô ´Ã¾î³ª°í ÁÙ¾îµé°Ô ÇÒ·Á¸é,
m_wndStatusBar.SetPaneInfo(0,0,0,50);
m_wndStatusBar.SetPaneInfo(1,0,SBPS_STRETCH,50);
13. CView.cpp¿¡ #include "MainFrm.h"¸¦ Ãß°¡ÇÑ´Ù.


HomePage Backward Forward Post Reply List
1998 by swindler