1
我有ribonbar上的CMFCRibbonComboBox,我希望當用戶按下一個鍵打開下拉列表,並選擇項目符合用戶按下的字符。如何爲CMFCRibbonComboBox獲取keydown的通知?
爲此目的,我想獲得keydown的通知。
我該怎麼做呢? 謝謝
我有ribonbar上的CMFCRibbonComboBox,我希望當用戶按下一個鍵打開下拉列表,並選擇項目符合用戶按下的字符。如何爲CMFCRibbonComboBox獲取keydown的通知?
爲此目的,我想獲得keydown的通知。
我該怎麼做呢? 謝謝
我問了一個關於MSDN here非常類似的問題,並最終用下面的黑客來解決它自己;
保存的下的本地副本:\程序文件(x86)\微軟的Visual Studio 14.0 \ VC \ atlmfc的\ src \ MFC \ afxribbonedit.cpp到項目
在BOOL CMFCRibbonRichEditCtrl::PreTranslateMessage(MSG* pMsg)
替換此
case VK_DOWN:
if (m_edit.m_bHasDropDownList && !m_edit.IsDroppedDown())
{
m_edit.DropDownList();
return TRUE;
}
與此
case VK_DOWN:
if (m_edit.m_bHasDropDownList && !m_edit.IsDroppedDown())
{
m_edit.DropDownList();
CMFCRibbonBaseElement* pRibbonBaseElement = m_edit.GetDroppedDown();
if (pRibbonBaseElement && (pRibbonBaseElement->IsKindOf(RUNTIME_CLASS(CMFCRibbonComboBox))))
{
CString str;
GetWindowText(str);
CMFCRibbonComboBox *pCombo = (CMFCRibbonComboBox*)pRibbonBaseElement;
int ItemNo = -1;
for (int i = 0; i < pCombo->GetCount(); i++)
{
CString ItemText = pCombo->GetItem(i);
if (ItemText.Left(str.GetLength()).CompareNoCase(str) == 0)
{
ItemNo = i;
break;
}
}
if (ItemNo != -1)
{
pCombo->OnSelectItem(ItemNo);
// Draw and redraw dropdown for selection to show
m_edit.DropDownList();
m_edit.DropDownList();
}
}
return TRUE;
}
對於降列表(而非下拉列表),你同樣可以用手WM_CHAR做了第一樂根據當前位置之後的下一個項目進行搜索。請注意,需要檢查上述黑客行爲,以便日後對功能區庫的更新進行檢查,並且一旦在庫中正確實施,就應該將其丟棄。
你爲什麼試圖重新發明標準的組合框功能? – IInspectable
我會很高興任何解決方案,我不能找到如何以標準的方式,你可以幫我嗎? –
@因爲MFC功能區組合框缺少常規MFC和Windows組合框的許多基本非常重要的功能,例如搜索。作爲一個用戶界面的MFC功能區有一些相當明顯的遺漏。 –