На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Создание CComboBox , не могу разобраться :(
    Здравствуйте, народ!

    Помогите разобраться, где-то накосячил, а не пойму где.
    Не приходит CBN_CLOSEUP вообще, а WM_KILLFOCUS непонятно по какому принципу, т.е. может прийти, а может и нет
    ExpandedWrap disabled
      // 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()
      };

    ExpandedWrap disabled
      // 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(); // Сюда вообще не попадает :(
      }

    Вызов:
    ExpandedWrap disabled
            new CQuickCombo(CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, &m_List, this, item, subItem, ar, &ires);

    При кликании по основному листу ComboBox у меня должен убраться, а не убирается. При этом KillFocus не приходит :wall:
    Помогите, плз, пол дня уже бьюсь, не пойму в чем дело
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0539 ]   [ 16 queries used ]   [ Generated: 16.06.25, 02:28 GMT ]