2014-07-25 79 views
0

我有一個Modeless對話框,顯示一堆按鈕;其中一些是爲GDI繪製東西而定製的。
現在,當用戶在特定條件下點擊自定義的時候,會出現一個消息框來提醒用戶錯誤,這很好。
問題是,在接受消息框(顯示爲MB_ICON_ERROR)後,無論我在對話框中單擊,我總是收到錯誤消息,好像整個對話框將消息發送到自定義按鈕,並且唯一的方法是擺脫此是按Tab鍵並將焦點放在另一個控件上。
這是一個奇怪的行爲,並知道爲什麼發生並不壞,但現在一個簡單的解決方法應該做的工作。
由於這可能是一個焦點問題,我試圖通過做:MFC - 以編程方式更改對話框項目焦點

GetDlgItem(IDC_BTN_ANOTHER_BUTTON)->SetFocus();
然後,在自定義控件中添加:
KillFocus(NULL);
,但沒有結果嘗試將其設置在另一個控件上(在所有者對話框中)。
我應該如何使用這些功能? 在此先感謝。 PS:如果我評論AfxMessageBox,控件不會顯示這種奇怪的行爲。

編輯
我會按要求顯示一些代碼。

// This is where Message Box is popping out. It is effectively inside the dialog code. 
void CProfiloSuolaDlg::ProcessLBtnDownGraphProfilo(PNT_2D &p2dPunto) 
{ 
    // m_lboxProfiles is a customized CListBox 
    if(m_lboxProfiles.GetCurSel() == 0) 
    { 
     // This profile cannot be modified. 
     /* 
     CString strMessage; 

     strMessage.Format(_T("Default Profile cannot be edited.")); 
     AfxMessageBox(strMessaggio, MB_ICONERROR); 
     */ 

     return; 
    } 
    // Selecting a node from sole perimeter. 
    SelectNodo(p2dPoint); 
} 

實際上,消息被註釋以保持對話框工作。

// This is inside the customization of CButton 
void CMyGraphicButton::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
    PNT_2D p2dPunto; 
    CProfiloSuolaDlg* pDlg = (CProfiloSuolaDlg*)GetParent();  

    m_pVD->MapToViewport(point,p2dPunto); 
    switch(m_uType) 
    { 
    case GRF_SEZIONE: 
     pDlg->ProcessLBtnDownGraphProfilo(p2dPunto); 
     break; 
    case GRF_PERIMETRO: 
     pDlg->ProcessLBtnDownGraphPerimetro(p2dPunto); 
     break; 
    } 
    CButton::OnLButtonDown(nFlags, point); 
} 
+0

我敢打賭,這個問題是你的代碼中的一個錯誤,但是,你沒有向我們提供任何反饋。 – rrirower

+0

那麼,代碼是相當大的,你可以指向我的地方,所以我可以告訴你你需要的部分。 – IssamTP

+0

我想這個問題是在或接近處理您的點擊事件的代碼。但是,你應該發佈你認爲可能有問題的任何代碼。 – rrirower

回答

1

由於您正在處理自定義控件的按鈕處理函數中的按鈕事件,因此不需要調用基類。只需註釋掉CButton :: OnLButtonDown(nFlags,point)

相關問題