CHeaderCtrlに配置したCComboBoxのイベント取得 – プログラミング – Home

CHeaderCtrlに配置したCCo...
 
通知
すべてクリア

CHeaderCtrlに配置したCComboBoxのイベント取得


tiune
 tiune
(@tiune)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

初めて質問させていただきます。
WinXP(SP2)
VC++6.0
MFC(SDI)
にて開発を行ってるtiuneと言います。

現在ダイアログ上にCListCtrl(レポート形式)を配置して、
鍵のリストを表示するプログラムを作成しております。

この鍵のリストにて、エクセルのフィルタの機能を実現したいと思っております。
調べてみたところMFCには(VCには?)そのような機能はないみたいなので、
CComboBoxを動的に作成して実現しようとしています。

CComboBox(実際には派生させたCMyComboBox)を
リストのヘッダ部を親として配置させたのですが、
CComboBoxのイベント(CBN_SELENDOK等)が取得できません。
(OnSelendokにてブレイクをはっても止まらない)

OnCommandとOnCmdMsgには来ているので、
イベント自体は発生していると思うのですが、
なぜOnSelendokに来ないのかがわかりません。

なぜイベントが取得できないのか、
どうしたら取得できるのか、どなたか教えていただけませんでしょうか?


引用解決済
トピックタグ
tiune
 tiune
(@tiune)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

一応ソースも載せておきます。

・COLUMN_MAX:列の最大数
・SetListViewItem():リストのアイテム設定関数
・SetComboBox(int):CMyComboBoxへアイテム設定関数

void CKeyMngInfoListDlg::OnMenuitemKeymnginfoFilter()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください

CWnd * wnd;
CHeaderCtrl * pHeadCtrl = m_listctrl.GetHeaderCtrl();
wnd = (CWnd *) m_listctrl.GetHeaderCtrl();
CMenu * pMenu = GetMenu();
DWORD sts = pMenu->GetMenuState(ID_MENUITEM_KEYMNGINFO_FILTER,
MF_BYCOMMAND);
if (sts & MF_CHECKED) {
//チェック解除
pMenu->CheckMenuItem(ID_MENUITEM_KEYMNGINFO_FILTER, MF_UNCHECKED);
//フィルター解除
for (int i = 0; i < COLUMN_MAX; i++) {
m_filterFlg[i] = FALSE;
wnd->GetDlgItem(65535 - i)->DestroyWindow();
}
SetListViewItem();
Invalidate();
}
else {
//チェック設定
pMenu->CheckMenuItem(ID_MENUITEM_KEYMNGINFO_FILTER, MF_CHECKED);
//フィルター設定
DWORD dwStyle = m_listctrl.GetExtendedStyle();
dwStyle |= WS_CLIPSIBLINGS;
m_listctrl.SetExtendedStyle(dwStyle);
CMyComboBox * comboFilter[COLUMN_MAX];
for (int i = 0; i < COLUMN_MAX; i++) {
CRect rect;
comboFilter[i] = new CMyComboBox();
m_listctrl.GetHeaderCtrl()->GetItemRect(i, rect);
CRect rectCombo(rect.right - 21, rect.top - 2, rect.right,
rect.bottom + 100);
comboFilter[i]->Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP |
WS_VSCROLL | CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL, rectCombo, wnd, 65535 -
i);
comboFilter[i]->m_srcFlg = IDD;
comboFilter[i]->SetItemHeight(-1, rect.bottom - rect.top);
comboFilter[i]->SetDroppedWidth(rect.right - rect.left);
CFont * pFont = GetFont();
comboFilter[i]->SetFont(pFont);
comboFilter[i]->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
comboFilter[i]->ShowWindow(SW_SHOW);
}
SetComboBox(-1);
}

}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました