Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создал CScrollBar на собственном контроле.. ..и он не принимает сообщения мыши.. 
V
    Опции темы
The Thing
  Дата 8.7.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



создаю на собственнонаписаном контроле CScrollBar. Он создается, но не реагирует на нажатия мыши! smile

Код

    if(result){
        RECT rc;
                                ...
        m_scrollbar.Create(WS_VISIBLE|WS_CHILD, rc, pWnd, 2001);

    }


Я так подразумеваю, что моему контролу, просто-на-просто не передаются сообщения от View.
Наверное вопрос должен звычать следующим образом:

Как передать сообщения моему контролу? 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 8.7.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Проблема еще в том, что мой контрол наследуется от CWnd и крепится к SDI Документу;
т.е.

Код

CKadr::CKadr()
{
    VERIFY(RegisterWindowClass());
}

BOOL CKadr::RegisterWindowClass()
{
  WNDCLASS wndcls;
  HINSTANCE hInst = AfxGetInstanceHandle();

  if (!(::GetClassInfo(hInst, _T("KADR"), &wndcls)))
  {
    wndcls.style            = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
    wndcls.lpfnWndProc      = ::DefWindowProc;
    wndcls.cbClsExtra       = wndcls.cbWndExtra = 0;
    wndcls.hInstance        = hInst;
    wndcls.hIcon            = NULL;
    wndcls.hCursor          = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
    wndcls.hbrBackground    = (HBRUSH) (COLOR_3DFACE + 1);
    wndcls.lpszMenuName     = NULL;
    wndcls.lpszClassName    = _T("KADR");

    if (!AfxRegisterClass(&wndcls))
    {
      AfxThrowResourceException();
      return FALSE;
    }
  }

  return TRUE;
}

BOOL CKadr::Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
    SetSizeControl(rect);

    CWnd* pWnd = this;
    BOOL result = pWnd->Create(_T("KADR"), lpszWindowName, dwStyle, rect, pParentWnd, nID);

    if(result){
        static RECT rc;
        m_scrollbar.Create(WS_VISIBLE|WS_CHILD, rc, pWnd, 2001);

    }


    return result;
}


Код

BOOL CTestView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
    // TODO: Add your specialized code here and/or call the base class
    
    BOOL result = CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);

    if(result){
        m_control.Create("KadrView", WS_VISIBLE|WS_CHILD, rect, this->GetOwner(), 2000);
...


Может я чего не так делаю?.. посмотрите плз. Может стиль какой не указал?. или еще что-нить 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 8.7.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Вот тут можно поймать все мои сообщения..
Код

void CMainFrame::OnParentNotify(UINT message, LPARAM lParam)
{
    CFrameWnd::OnParentNotify(message, lParam);
    
    CTestView *pView = (CTestView*) GetActiveView();
    if(!pView) return;
    
    if(message = 2000){
        pView->SendNotifyMyCtrl(message, lParam);
    }
}

...

void CTestView::Start(UINT mess, LPARAM lParam)
{
                //а вот тут надо передать моему контролу.. 
    m_control.SendNotifyMessage(WM_NOTIFY, WPARAM(mess), lParam);
}


Я не силен с сообщениями.. пока не получается, например отреагировать скролбару на мое сообщение.
Кто может помочь.. -помогите! 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 8.7.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Немного подправив методы уже отлавливаю нажатие клавиши мышей... но Скрол также не работает! smile


Код

void CMainFrame::OnParentNotify(UINT message, LPARAM lParam)
{
    CFrameWnd::OnParentNotify(message, lParam);
    
    CTestView *pView = (CTestView*) GetActiveView();
    if(!pView) return;
    
    pView->SendNotifyMyControl(lParam, message);    

}


void CTestView::SendNotifyMyControl(UINT mess, LPARAM lParam)
{
        m_control.SendMessage(lParam, mess, LPARAM(0));
}
 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 8.7.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Все...  разобрался.. Я не правильно создал контрол..получилось сам от себя, что-ли. 
BOOL CKadr::Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
    SetSizeControl(rect);

/*
CWnd* pWnd = this;
    BOOL result = pWnd->Create(_T("KADR"), lpszWindowName, dwStyle, rect, pParentWnd, nID);
*/

    BOOL result = CWnd::Create(_T("KADR"), lpszWindowName, dwStyle, rect, pParentWnd, nID);
...
} 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0744 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.