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