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);
}
我敢打賭,這個問題是你的代碼中的一個錯誤,但是,你沒有向我們提供任何反饋。 – rrirower
那麼,代碼是相當大的,你可以指向我的地方,所以我可以告訴你你需要的部分。 – IssamTP
我想這個問題是在或接近處理您的點擊事件的代碼。但是,你應該發佈你認爲可能有問題的任何代碼。 – rrirower