Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание нового контрола, нужно создать контрол 
:(
    Опции темы
The Thing
Дата 5.7.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1.Мне нужно создать контрол в SDI приложении, т.е.  наследуемый от CWnd. Написанно, что таких много.. но я нужной мине информации не нашел. Вопрос такой.. подкиньте пример реаилизации примитивного контрола.. хотя бы структуру.. куда мне прыгать.. или книженцию.. А лучше и то, и другое.

2.Нужна книга по CGI+
(модераторы извините, не хотел из-за 'того создавть новый топ) 


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


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(The Thing @  5.7.2006,  11:27 Найти цитируемый пост)
Мне нужно создать контрол в SDI приложении

Свой контрол? 


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
The Thing
Дата 5.7.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да... свой.. это не кнопка, это будет элемент управления!

Добавлено @ 11:44 
Может кто напишет пример моздания контрола под диалог, если под SDI нету..  хотя должно быть одно и то же.. (за некоторым исключением) 


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


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Создаешь свой класс
в его конструкторе пишешь
VERIFY(RegisterWindowClass());
Вотреализация этой функции
Код

BOOL МойКласс::RegisterWindowClass()
{
  WNDCLASS wndcls;
  HINSTANCE hInst = AfxGetInstanceHandle();

  if (!(::GetClassInfo(hInst, _T("MyWnd"), &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("MyWnd");

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

  return TRUE;
}


Ну дальше через Create ,как обычно smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
The Thing
Дата 5.7.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Огромное спасибо.. попробую..
Т.е. мы регистрируем наш контрол, да? После чего создаем.. 


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


Опытный
**


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

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



Еще вопрос.. Как обычно не совсем получилось.. так как я еще ни разу его не создавал - не сталкивался!

Создал класс CKadr, написал такой код.. По идее должен создаться квадрат.

Код

BOOL CKadr::Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
    CWnd* pWnd = this;
    return pWnd->Create(_T("KADR"), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}

void CKadr::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    
    dc.Rectangle(10, 10, 50, 50);
}


в CTestView пишу такой код
Код

void CTestView::OnInitialUpdate() 
{
    CView::OnInitialUpdate();
    
    m_control.Create("KadrView", CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, CRect(10, 10, 200, 200), this->GetOwner() ,2201);    
}


У меня все создается. Впорос, А где должно отрисовываться мой когнтрол. Я должен Добавлять в CTestView::OnPaint свой OnPaint? т.е. что-то вроде 

Код

void CTestView::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    
    m_control.OnPaint();//или m_control.OnPaint(&dc);
}
 


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


Опытный
**


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

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



ссори... ступил...


Код

void CTestView::OnInitialUpdate() 
{
    CView::OnInitialUpdate();
    
    m_control.Create("KadrView", WS_VISIBLE|WS_CHILD, CRect(10, 10, 200, 200), this->GetOwner() ,2201);    
}
 


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


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



 smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
xTr1m
Дата 14.7.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

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



У меня есть вопросик. Вот тута:

void CTestView::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    
    m_control.OnPaint();//или m_control.OnPaint(&dc);
}


Получается, что я должен принудительно сказать - "Нарисуй мой объект". Но ведь если создать на виде обчную кнопку, то она будет отрисовываться сама, без нашего участия. Так в чем тут дело? Как сделать так, чтобы вид отрисовываал сам мои объекты, которые я создаю на нем?
 
P.S. А если я захочу разместить этот прямоугольник не в виде , а на диалоге? То как тогда? 

Это сообщение отредактировал(а) xTr1m - 14.7.2006, 09:28
PM MAIL WWW ICQ   Вверх
Earnest
Дата 14.7.2006, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Так, как ты написал, как раз не правильно делать.
Не важно, стандартная кнопка или твоя, если все сделано правильно, она отрисуется сама.
Правильно - это: контрол должен уметь рисоваться (иметь обработчик WM_PAINT) и должен быть виден и расположен в пределах видимой части вью.

Добавлено @ 09:32 
В диалоге тоже самое: все дочерние окна автоматически получают WM_PAINT при перерисовке родителя. 


--------------------
...
PM   Вверх
xTr1m
Дата 14.7.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

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



я, наверное, не так выразился. Вопрос мой в следующем:

В обработчике OnPaint вида указано принудительно, что нужно отрисовать объект m_control. Но ведь если это не сделать, то ничего рисоваться не будет.
А если мы через Create создадим кнопку, то она будет рисоваться сама (без m_button.OnPaint(&dc))
Так как тогда нужно создавать свои элементы, чтобы они сразу отрисовывались самостоятельно? 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 14.7.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Точно так же как кнопку: Create и т.д. Если не рисуется без принудительных вызовов OnPaint, значит, что-то не так. "Не так" можно сделать очень много, у меня воображения не хватит описывать. Лучше приведи основной код своего контрола, посмотрим. 


--------------------
...
PM   Вверх
xTr1m
Дата 14.7.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

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



а что приводить то, вот наверху пример контролла, который создает The Thinq. Если в OnPaint вида не написать m_control.OnPaint();//или m_control.OnPaint(&dc); то квадрата не будет. И что тут не так? (Или может я что-то не так написал) 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 17.7.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(xTr1m @  14.7.2006,  21:29 Найти цитируемый пост)
Или может я что-то не так написал

Наверняка. Может, ты забыл свой контрол сделать видимым, а может он у тебя на заднем плане болтается. Посмотри спаем: найди свою форму и проверь ее детей, найди свой многострадальный контрол и посмотри, есть ли у него стиль VISIBLE и не накрыт ли он чем нибудь. 


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


 




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


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

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