본문 바로가기

프로그래밍/공부관련

[MFC] 다이얼로그바 내부에 있는 버튼활성화


이 소스에는 다이얼로그바적용과 버튼활성화가 담겨있다.
버튼활성화는 다이얼로그바를 상속받은 임의의클래스를 보면 알수있다.



다이얼로그바는 CControlBar를 상속받아서 버튼의 메세지를 받지 못하여 버튼을 달면

비활성화 되어 있다. 따라서 몇가지를 수동으로 기입해 주어야 한다.

 

 

다이얼로그바 헤더파일

#if !defined(AFX_CTRLPALDLG_H__A734BECF_5B37_4011_A6DB_46AB92DA69C2__INCLUDED_)
#define AFX_CTRLPALDLG_H__A734BECF_5B37_4011_A6DB_46AB92DA69C2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CtrlPalDlg.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CCtrlPalDlg dialog

class CCtrlPalDlg : public CDialogBar
{
// Construction
public: 
 CCtrlPalDlg(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
 //{{AFX_DATA(CCtrlPalDlg)
 enum { IDD = IDD_DLGBAR1 };
  // NOTE: the ClassWizard will add data members here
 //}}AFX_DATA


// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CCtrlPalDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:

 // Generated message map functions
 //{{AFX_MSG(CCtrlPalDlg) 
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 afx_msg void OnUpdateCmdUI(CCmdUI* pCmdUI); // 직접 코딩해 준다.
 afx_msg void OnButton1();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_CTRLPALDLG_H__A734BECF_5B37_4011_A6DB_46AB92DA69C2__INCLUDED_)

 

===========================================================================================================

다이얼로그바 소스파일

// CtrlPalDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Obj2Img.h"
#include "CtrlPalDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCtrlPalDlg dialog


CCtrlPalDlg::CCtrlPalDlg(CWnd* pParent /*=NULL*/)
 : CDialogBar()
{
 //{{AFX_DATA_INIT(CCtrlPalDlg)
  // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
}


void CCtrlPalDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialogBar::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CCtrlPalDlg)
  // NOTE: the ClassWizard will add DDX and DDV calls here
 //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCtrlPalDlg, CDialogBar)
 //{{AFX_MSG_MAP(CCtrlPalDlg)
 ON_WM_CREATE()
 ON_UPDATE_COMMAND_UI(IDC_BUTTON1, CCtrlPalDlg::OnUpdateCmdUI) // 이부분 직접코딩
 ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCtrlPalDlg message handlers

int CCtrlPalDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CDialogBar::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 // TODO: Add your specialized creation code here 
 return 0;
}

void CCtrlPalDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 MessageBox(_T("하하하"), _T("아아아앙"));
 
}

void CCtrlPalDlg::OnUpdateCmdUI(CCmdUI* pCmdUI) // 다이얼로그바 버튼 활성화 위해 추가
{
    pCmdUI->Enable(TRUE);
}