
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, народ!
Помогите разобраться, где-то накосячил, а не пойму где. Не приходит CBN_CLOSEUP вообще, а WM_KILLFOCUS непонятно по какому принципу, т.е. может прийти, а может и нет ![]() ![]() // QuickCombo.h // #pragma once #include "QuickList.h" #define INPLACE_COMBO 1002 class CQuickCombo : public CComboBox { friend class CQuickList; public: CQuickCombo::CQuickCombo(DWORD dwStyle, CQuickList* pCtrl, CWnd* pDispatch, int iItem, int iSubItem, CStringArray& lines, int* lResult); CQuickCombo::~CQuickCombo(); protected: CQuickList* m_pCtrl; CWnd* m_pDispatch; int m_Item, m_SubItem; protected: NotifyToDispatch(LPARAM lParam); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnDestroy(); afx_msg void OnCloseUp(); DECLARE_MESSAGE_MAP() }; ![]() ![]() // QuickCombo.cpp // #include "stdafx.h" #include "resource.h" #include "QuickCombo.h" CQuickCombo::CQuickCombo (DWORD dwStyle, CQuickList* pCtrl, CWnd* pDispatch, int iItem, int iSubItem, CStringArray& lines, int* lResult) { CRect rect; m_pCtrl = pCtrl; m_pDispatch = pDispatch; m_Item = iItem; m_SubItem = iSubItem; CQuickList::CListItemData data = pCtrl->GetItemData(iItem, iSubItem); if (!pCtrl->GetSubItemRect(iItem, iSubItem, LVIR_BOUNDS, rect)) { ___erroccured: *lResult = FALSE; SendMessage(WM_DESTROY); return; } if (!Create(dwStyle, rect, pCtrl, INPLACE_COMBO)) goto ___erroccured; for (int i=0; i<lines.GetSize(); i++) AddString(lines[i]); CFont* pFont = pCtrl->GetFont(); SetFont(pFont); // SetFocus(); // До сюда все работает нормально, если закомментирована строка - ComboBox создается и выпадает список SetWindowText(data.m_text); SetEditSel(0, -1); SendMessage(CB_SHOWDROPDOWN, (WPARAM)true); *lResult = TRUE; } CQuickCombo::~CQuickCombo() { } BEGIN_MESSAGE_MAP(CQuickCombo, CComboBox) ON_WM_KILLFOCUS() ON_WM_DESTROY() ON_CBN_CLOSEUP(INPLACE_COMBO, OnCloseUp) END_MESSAGE_MAP() void CQuickCombo::OnKillFocus (CWnd* pNewWnd) { CComboBox::OnKillFocus(pNewWnd); DestroyWindow(); // Сюда - по непонятному закону :((( } void CQuickCombo::OnDestroy() { LPARAM param = 0; int nSel = GetCurSel(); if (nSel >= 0) param = (LPARAM)GetItemData(nSel); NotifyToDispatch(param); CComboBox::OnDestroy(); delete this; } void CQuickCombo::OnCloseUp() { DestroyWindow(); // Сюда вообще не попадает :( } Вызов: ![]() ![]() new CQuickCombo(CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, &m_List, this, item, subItem, ar, &ires); При кликании по основному листу ComboBox у меня должен убраться, а не убирается. При этом KillFocus не приходит ![]() Помогите, плз, пол дня уже бьюсь, не пойму в чем дело |