Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3027

MFC- receiving Button-Click-Message failed

$
0
0
I've created a new dialog in my MFC dialog based application. the new dialog contains 5 control buttons.

the following happens and I don't understand why?

1. click on buttonX. (result ok, OnBnClicked message is sent)
2. click on on any place of the application, but not on the dialog.(removing focus from dialog)
3. click again on buttonX (FAILED, OnBnClicked message is NOT sent). but if instead I click on any other button in the dialog (result ok, OnBnClicked message is sent).
and when I do:

1. ...
2. ...
3. click on the dialog area just to set focus on the dialog again
4. click again on buttonX. (result ok, OnBnClicked message is sent)
**I need to do step 3 only if I want to click again on the buttonX! why?? I think it related to SetFocus() but I m not sure how.

I've tried different style like, tool windows, overlapped, popup. it happens in all the cases.
Thanks for the help.

Code:

class CToolsDlg : public CBDialog
{
    DECLARE_DYNAMIC(CToolsDlg)

public:
    CToolsDlg(CWnd* pParent = NULL);  // standard constructor
    virtual ~CToolsDlg();
    CToolTipCtrl m_ToolsTips;

// Dialog Data
    enum { IDD = IDD_TOOLS_DIALOG };

protected:
    virtual void OnCancel();
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()
public:
    CMFCButton m_HoodButton;
    CMFCButton m_MediaForewardButton;
    CMFCButton m_MediaBackwardButton;
    CMFCButton m_LeftRightButton;
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);

    afx_msg void OnTimer(UINT_PTR nIDEvent);
    afx_msg void OnBnClickedCancel();
    afx_msg void OnBnClickedToolsHoodButton();
    afx_msg void OnBnClickedMediaForewardButton();
    afx_msg void OnBnClickedMediaBackwardButton();
    afx_msg void OnBnClickedLeftRightButton();
    afx_msg void OnBnClickedBackMediaPressButton();
};

.cpp

Code:

IMPLEMENT_DYNAMIC(CToolsDlg, CBDialog)

CToolsDlg::CToolsDlg(CWnd* pParent /*=NULL*/)
: CBDialog(CToolsDlg::IDD, pParent)
{

}
CToolsDlg::~CToolsDlg()
{
}
void CToolsDlg::DoDataExchange(CDataExchange* pDX)
{
    CBDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_TOOLS_HOOD_BUTTON,    m_HoodButton);
    DDX_Control(pDX, IDC_MEDIA_FOREWARD_BUTTON, m_MediaForewardButton);
    DDX_Control(pDX, IDC_MEDIA_BACKWARD_BUTTON, m_MediaBackwardButton);
    DDX_Control(pDX, IDC_TOOLS_LEFT_RIGHT,      m_LeftRightButton);
}


BEGIN_MESSAGE_MAP(CToolsDlg, CBDialog)
    ON_WM_CLOSE()
    ON_WM_DESTROY()
    ON_WM_TIMER()
    ON_BN_CLICKED(IDC_TOOLS_HOOD_BUTTON, &CToolsDlg::OnBnClickedToolsHoodButton)
    ON_BN_CLICKED(IDC_MEDIA_FOREWARD_BUTTON, &CToolsDlg::OnBnClickedMediaForewardButton)
    ON_BN_CLICKED(IDC_MEDIA_BACKWARD_BUTTON, &CToolsDlg::OnBnClickedMediaBackwardButton)
    ON_BN_CLICKED(IDC_TOOLS_LEFT_RIGHT, &CToolsDlg::OnBnClickedLeftRightButton)
    ON_BN_CLICKED(IDC_BACK_MEDIA_PRESS_BUTTON, &CToolsDlg::OnBnClickedBackMediaPressButton)
END_MESSAGE_MAP()


// CToolsDlg message handlers

BOOL CToolsDlg::OnInitDialog()
{
    CBDialog::OnInitDialog();

    // Window position
    //////////////////////////////////////////////////////////////////////////
    CMainFrame* mf =  (CMainFrame*)AfxGetMainWnd();
    RECT MFwinRect;
    RECT ThiswinRect;
    CWnd* fv = mf->m_wndSplitter.GetView( mf->m_wndSplitter.GetCurrentViewIndex(0,0) );
    fv->GetWindowRect(&MFwinRect);
    GetWindowRect(&ThiswinRect);
    MoveWindow(
        MFwinRect.right - (ThiswinRect.right - ThiswinRect.left) - 14,  // X
        MFwinRect.top + 14,                                            // Y
        (ThiswinRect.right - ThiswinRect.left),                        // nWidth
        (ThiswinRect.bottom - ThiswinRect.top) );                      // nHeight

    // Set controls state
    //////////////////////////////////////////////////////////////////////////
    m_ToolsTips.Create(this);
    m_ToolsTips.AddTool(&m_HoodButton,          TOOLTIP_HOOD_BUTTON);
    m_ToolsTips.AddTool(&m_MediaForewardButton, TOOLTIP_MEDIA_FOREWARD_BUTTON);
    m_ToolsTips.AddTool(&m_MediaBackwardButton, TOOLTIP_MEDIA_BACKWARD_BUTTON);
    m_ToolsTips.AddTool(&m_LeftRightButton,    TOOLTIP_LEFT_RIGHT_BUTTON);
    m_ToolsTips.SetDelayTime(1000);
    m_ToolsTips.Activate(BARAK_PREFS->m_Params.m_bShowToolTips);

    // Main timer loop (no need for now)
    // SetTimer( 1, 1000, NULL );
    return TRUE;
}

BOOL CToolsDlg::PreTranslateMessage(MSG* pMsg)
{
    m_ToolsTips.RelayEvent(pMsg);

    return CBDialog::PreTranslateMessage(pMsg);
}

void CToolsDlg::OnCancel()
{
    // When closing the window, destroy it and not only hide (its a floating window).
    DestroyWindow();
}

void CToolsDlg::OnTimer(UINT_PTR nIDEvent)
{
    CBDialog::OnTimer(nIDEvent);
}

void CToolsDlg::OnBnClickedToolsHoodButton()
{
    ...
}

void CToolsDlg::OnBnClickedMediaForewardButton()
{
    ...
}

void CToolsDlg::OnBnClickedMediaBackwardButton()

    ...
}

void CToolsDlg::OnBnClickedLeftRightButton()
{
    ...
}

void CToolsDlg::OnBnClickedBackMediaPressButton()
{
    ...
}


Viewing all articles
Browse latest Browse all 3027

Latest Images

Trending Articles



Latest Images