본문 바로가기

프로그래밍/MFC

버튼 클릭 기능 구현하기.





Dialog의 버튼 클릭 기능 SendMessage 보내기 - 프로그램으로 클릭하기 VC++ Tips 
 
Dialog Box의 버튼은 실행하면서 마우스로 클릭 한다.

그러나 다른 다이얼로그나 쓰래드에서 이 버튼을 클릭한 기능을 하려면

SendMessage() 함수를 이용할 수 있다.

 

     m_pDlg->SendMessage(WM_COMMAND, IDC_RUN, 0);

 

이와 같은 메시지는

  m_pDlg : 목적하는 다이어로그 박스을 지정 한다.

  WM_COMMAND : BN_CLICKED 메시지를 보내는 위한 메시지 종류이다.

  IDC_RUN : 버튼의 ID이다. 다이얼로그 박스 편집기에서 ID을 만들고 볼 수 있다.

 

*** TestDlg.h *****************************************

 

class CTestDlg : public CDialog
{
 public:
    CTestDlg (CWnd* pParent = NULL);   // standard constructor

    // . . .

    CTestManager *m_pDkgMng;

 public:

 // Dialog Data
   //{{AFX_DATA(CTestManager )
   enum { IDD = IDD_TEST_DLG };
   CButton m_btnTest;
   //}}AFX_DATA


 // Implementation
 protected:
    HICON m_hIcon;

 

   // Generated message map functions
   //{{AFX_MSG(CTestDlg )
   virtual BOOL OnInitDialog();
   afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
   afx_msg void OnPaint();
   afx_msg HCURSOR OnQueryDragIcon();
   afx_msg void OnRun();
   //}}AFX_MSG
   DECLARE_MESSAGE_MAP()
 };


 

*** TestDlg.cpp ***************************************

 

BEGIN_MESSAGE_MAP(CTestDlg , CDialog)
 //{{AFX_MSG_MAP(CTestDlg )
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_RUN, OnRun)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CTestDlg ::OnRun()
{
   // TODO: Add your control notification handler code here

   // 여기에 기능을 추가 한다.

}

 

 void CTestDlg ::OnBtnCtrl()
 {
    // TODO: Add your command handler code here
   if (! m_pDkgMng) {
       m_pDkgMng= new CTestManager (this);
       if (m_pDkgMng->CDialog::Create( IDD_TESTMANAGER, this ) == TRUE) {
            m_pDkgMng->ShowWindow(SW_SHOW);
            m_pDkgMng->SetWindowText("Manual Control");
      }
    }
 }

 

*** TestManager.h ***************************************

 

class CTestManager : public CDialog
{
    // Construction
public:
    CTestManager(CTestDlg *pDlg, CWnd* pParent = NULL);   // standard constructor

    CTestDlg *m_pDlg;

     // . . .

}


*** TestManager.cpp ***************************************

CTestManager ::CTestManager (CTestDlg *pDlg, CWnd* pParent /*=NULL*/)
 : CDialog(CTestManager ::IDD, pParent)
{
    //{{AFX_DATA_INIT(CTestManager )
    // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_pDlg= pDlg;

 

    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 }


 

 void CTestManager::OnRunAction()
 {
      m_pDlg->SendMessage(WM_COMMAND, IDC_RUN, 0);

 }

 

VC++ 6.0 MSDN

BN_CLICKED
The BN_CLICKED notification message is sent when the user clicks a button. The parent window of the button receives this notification message through the WM_COMMAND message.

BN_CLICKED
idButton = (int) LOWORD(wParam);    // identifier of button
hwndButton = (HWND) lParam;         // handle to button
 
Remarks
A disabled button does not send a BN_CLICKED notification message to its parent window.

QuickInfo
  Windows NT: Requires version 3.1 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Requires version 1.0 or later.
  Header: Declared in winuser.h.

See Also
Buttons Overview, Button Messages, WM_COMMAND