<´ÙÀ̾ó·Î±×¹Ú½º¿¡ ÅøÆÁÀ» Ãß°¡ÇÏ·Á¸é>
ºñÁÖ¾ó C++ 5.0À¸·Î ¸¸µç ¾ÖÇø®ÄÉÀ̼ÇÀÇ ´ÙÀ̾ó·Î±×¹Ú½º¿¡ ÅøÆÁÀ» ³ªÅ¸³»°í ½Í½À´Ï´Ù.
ÅøÆÁÀº CToolTipCtrl Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¸é ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸ÕÀú
Create()¸¦ È£ÃâÇؼ ÅøÆÁ °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. ±×¸®°í ³ª¼ AddTool()¸¦ È£ÃâÇØ °¢°¢ÀÇ
ÄÁÆ®·Ñ°ú ÅøÆÁ ¹®ÀÚ¿À» ¿¬°áÇØ ÁÝ´Ï´Ù. ¿©±â¼ ÅøÆÁ ¹®ÀÚ¿À» Ç¥½ÃÇØ ÁÖ´Â ÇÔ¼ö´Â
ReplyEvent()À̸ç, ÅøÆÁ ÄÁÆ®·Ñ °´Ã¼¸¦ »ý¼ºÇØ ÁÖ°í ÄÁÆ®·Ñ°ú ¿¬°áÇÒ ¼ö ÀÖ´Â °¡Àå
Àû´çÇÑ °÷Àº WM_INITDIALOG ¸Þ½ÃÁöÀÇ Çڵ鷯(OnInitDialog())ÀÔ´Ï´Ù.
ÀÌ·¸°Ô ÅøÆÁÀ» ÃʱâÈÇØ ÁØ ÈÄ¿¡ ReplyEvent()¸¦ È£ÃâÇϸé ÅøÆÁÀ» º¼ ¼ö ÀÖÀ¸¸ç,
³ª¸ÓÁö 󸮴 PreTranslateMessage()¿¡¼ ´ã´çÇÕ´Ï´Ù.
// ´ÙÀ̾ó·Î±× ¹Ú½º¿¡ ¹öÆ° 2°³¿Í ¿¡µðÆ® ¹Ú½º Çϳª¸¦ ³ÖÀº °Ì´Ï´Ù.
void CTooltipDlg::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTooltipDlg)
DDX_Control(pDX, IDOK, m_btnOK);
DDX_Control(pDX, IDCANCEL, m_btnCancel);
DDX_Control(pDX, IDC_EDIT, m_edit);
//}}AFX_DATA_MAP
}
BOOL CTooltipDlg::OnInitDialog() {
CDialog::OnInitDialog();
// ÅøÆÁ ÄÁÆ®·ÑÀ» »ý¼ºÇØ ÁØ´Ù.
m_tooltip.Create(this);
// AddTool ÇÔ¼ö¿¡ ÄÁÆ®·Ñ °´Ã¼ÀÇ Æ÷ÀÎÅÍ¿Í ÅøÆÁ ¹®ÀÚ¿À»
¼³Á¤ÇÑ´Ù.
m_tooltip.AddTool(&m_edit, "¿©±â¿¡ À̸§À» ³ÖÀ¸¼¼¿ä");
m_tooltip.AddTool(&m_btnOK, "¿©±â¸¦ ´©¸£¸é
È®ÀÎÀÔ´Ï´Ù");
m_tooltip.AddTool(&m_btnCancel, "¿©±â¸¦ ´©¸£¸é
Ãë¼ÒÀÔ´Ï´Ù.");
return TRUE;
}
BOOL CTooltipDlg::PreTranslateMessage(MSG* pMsg) {
switch(pMsg->message) {
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MOUSEMOVE:
// ÅøÆÁÀ» º¸¿© ÁØ´Ù.
m_tooltip.RelayEvent(pMsg);
}
return CDialog::PreTranslateMessage(pMsg);
<¸Þ´º Ç׸ñÀ» »ç¿ëÇÒ ¼ö ¾ø°Ô ÇÏ´Â MFC Ư¼ºÀ» ¹«È¿ÈÇÏ·Á¸é>
CMenu::EnableMenuItemÀ» È£ÃâÇÒ ¶§ ¸Þ´º Ç׸ñÀÌ »ç¿ëÇÒ ¼ö ¾ø´Â »óÅ·Π³²¾Æ Àִµ¥, ÀÌ Æ¯¼ºÀ» Á¦°ÅÇÏ°í ½Í½À´Ï´Ù.
CFrameWnd::m_bAutoMenuEnableÀ» FALSE·Î ¼³Á¤ÇÏ¸é µË´Ï´Ù. ÀÌ µ¥ÀÌÅÍ ¸â¹ö
ÇÔ¼ö°¡ TRUEÀ̸é ÇÁ·¹ÀÓ¿÷Àº ON_UPATE_COMMAND_UI³ª ON_COMMAND ó¸® ÇÔ¼ö¸¦ °®Áö
¾ÊÀº ¸ðµç ¸Þ´º Ç׸ñÀ» ÀÚµ¿À¸·Î »ç¿ëÇÒ ¼ö ¾ø°Ô ¸¸µé±â ¶§¹®¿¡ CMenu::EnableMenuItemÀ»
È£ÃâÇÒ ¶§ ¸Þ´º Ç׸ñÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ µ¥ÀÌÅÍ ¸â¹ö´Â ÃʱⰪÀ¸·Î TRUE¸¦
°®Áö¸¸ public ¼Ó¼ºÀ̹ǷΠÁ÷Á¢ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
m_bAutoMenuEnable = FALSE;
CMenu* pMenu = Getmenu();
pMenu->EnableMenuItem(ID_MENU_ITEM, MF_BYCOMMAND | MF_DISABLED);
<¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÌÀü À§Ä¡¸¦ º¸Á¸ÇÏ·Á¸é>
¾ÖÇø®ÄÉÀ̼ÇÀ» Á¾·áÇÒ ¶§ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Å©±â¿Í À§Ä¡¸¦ ±â¾ïÇØ µÎ¾ú´Ù°¡ ´ÙÀ½ ½ÇÇà ½Ã ÀÌÀü À§Ä¡¿Í °°Àº À§Ä¡¿¡¼ ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÏ°í ½Í½À´Ï´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼ÂÆÃÀ» ÀúÀåÇÏ·Á¸é À©µµ¿ì ·¹Áö½ºÆ®¸®¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù. À̸¦ Áö¿øÇϱâ À§Çؼ CWinApp Ŭ·¡½º´Â SetRegistryKey()¿Í WriteProfileInt(), WriteProfileString(), GetProfileInt(), GetProfileString()À» Á¦°øÇÕ´Ï´Ù. SetRegistryKey()ÀÇ ¿øÇüÀº ´ÙÀ½°ú °°½À´Ï´Ù.
void SetRegistryKey(LPCTSTR lpszRegistryKey);
ÀϹÝÀûÀ¸·Î lpszRegistryKey´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÑ È¸»ç¸íÀÔ´Ï´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå¸¦ ÀÌ¿ëÇØ Äڵ带 »ý¼ºÇß´Ù¸é ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÄÚµùµË´Ï´Ù.
BOOL CAboutApp::InitInstance() {
// »ý·«...
// Change the registry key under which our settings
are stored.
// You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
// »ý·«...
}
ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÚµ¿À¸·Î MRU(Most Recently Used) List°¡ ÀúÀåµË´Ï´Ù. ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ´Â Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
HKEY_CURRENT_USER\Software\<company name>\
<application name>\<section name>\<value name>
¾ÖÇø®ÄÉÀ̼ÇÀÌ À§Ä¡¿Í Å©±â¸¦ º¸°üÇÏ°í ¾ÖÇø®ÄÉÀÌ¼Ç ½ÃÀÛ ½Ã º¸°üµÈ ¾ÖÇø®ÄÉÀ̼ÇÀÇ
Å©±â¿Í À§Ä¡¸¦ Àоî¿À´Â ÀÛ¾÷À» Çϱ⿡ °¡Àå ÁÁÀº ºÎºÐÀº CMainFrameÀÇ OnClose()¿Í
OnShowWindow()ÀÔ´Ï´Ù.
´ÙÀ½ ¿¹´Â CFameWndÀÇ OnClose()¿Í OnShowWindow()¸¦ ¿À¹ö¶óÀ̵åÇÑ °ÍÀ¸·Î
¾ÖÇø®ÄÉÀ̼ÇÀÇ Å©±â¿Í À§Ä¡¸¦ ±â¾ïÇØ µÓ´Ï´Ù.
void CMainFrame::OnClose() {
// ÇöÀç ¸ÞÀÎ À©µµ¿ìÀÇ À§Ä¡ Á¤º¸¸¦ ¾ò¾î¿Â´Ù.
WINDOWPLACEMENT wp;
GetWindowPlacement(&wp);
// ÇöÀç ¸ÞÀÎ À©µµ¿ìÀÇ À§Ä¡¿Í Å©±â¸¦ ·¹Áö½ºÆ®¸®¿¡ ¾´´Ù.
AfxGetApp()->WriteProfileInt("Initialization",
"VertPos",
wp.rcNormalPosition.top);
AfxGetApp()->WriteProfileInt("Initialization",
"HorizPos",
wp.rcNormalPosition.left);
AfxGetApp()->WriteProfileInt("Initialization",
"Height",
wp.rcNormalPosition.bottom -
wp.rcNormalPosition.top);
AfxGetApp()->WriteProfileInt("Initialization",
"Width",
wp.rcNormalPosition.right -
wp.rcNormalPosition.left);
CFrameWnd::OnClose();
}
void CMainFrame::OnShowWindow(BOOL bShow, UINT nStatus) {
CFrameWnd::OnShowWindow(bShow, nStatus);
// ·¹Áö½ºÆ®¸®¿¡¼ ÀÌÀü¿¡ ÀúÀåµÈ ÇÁ·¹ÀÓ À©µµ¿ìÀÇ Å©±â¿Í
À§Ä¡¸¦
// ¾ò¾î ¿Í¼ ÇÁ·¹ÀÓ À©µµ¿ìÀÇ Å©±â¸¦ Á¶Á¤ÇÑ´Ù.
int iVert =
AfxGetApp()->GetProfileInt("Initialization","VertPos",0);
int iHoriz =
AfxGetApp()->GetProfileInt("Initialization","HorizPos",0);
int Width =
AfxGetApp()->GetProfileInt("Initialization","Width",400);;
int Height =
AfxGetApp()->GetProfileInt("Initialization","Height",280);
// adjust the application's frame size and position
SetWindowPos(NULL,iHoriz,iVert,Width,Height, NULL);
}
ºñÁÖ¾ó C++¿¡¼ ŸÀÌƲ¹Ù¿¡ ÀÖ´Â ¾ÆÀÌÄÜ Æ˾÷ ¸Þ´º¸¦ Á¦°ÅÇÏ·Á ÇÕ´Ï´Ù.
ŸÀÌƲ¹Ù¿¡ ÀÖ´Â ½Ã½ºÅÛ ¸Þ´º¸¦ ¾ø¾Ö·Á¸é CFrameWnd Ŭ·¡½º¿¡¼ »ó¼Ó¹ÞÀº
CMainFrame¿¡ ÀÖ´Â PreCreateWindow()¿¡ ´ÙÀ½°ú °°ÀÌ ÇÑ ÁÙÀ» Ãß°¡Çϸé
°£´ÜÈ÷ Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.
cs.style &= ~WS_SYSMENU;
º¸Åë À©µµ¿ì ½ºÅ¸ÀÏÀÎ WS_OVERLAPPEDWINDOW¿¡´Â ½Ã½ºÅÛ ¸Þ´º¿Í ¿©·¯
À©µµ¿ì ½ºÅ¸ÀÏÀÌ Á¤ÀǵŠÀֱ⠶§¹®¿¡ ±âº»°ª¿¡¼ ½Ã½ºÅÛ ¸Þ´º¸¦ ¾ø¾Ö¸é µÇ´Â
°ÅÁÒ.