Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: CPropertySheet и maximize  (Прочитано 15507 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Tuborg
Команда клуба

ee
Offline Offline

« : 31-05-2007 07:13 » 

Окно, создаваемое унаследованно от CDialog имеет кнопки minimize, maximize и close. А если я создаю окно, наследуя класс окна от CPropertySheet то кроме кнопки Close ничего больше нет. Как их туда добавить? Да ещё так чтобы работали?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 31-05-2007 08:33 » 

Tuborg, а смысл ?
CPropertySheet не имеет заголовка уже.
Можешь простые кнопки положить и при нажатии на них генерить нужное сообщение

Хотя - попытайся в редакторе ресурсов подправить свойства формы - заголовок включи, всё такое.
Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #2 : 31-05-2007 18:14 » 

я в классе CPropertySheet делаю "add" страниц классов наследуемых от CTabCtrl, каждая такая страничка имеет ресурс - диалоговое окно, у каждого такого окна в редакторе ресурсов видны нужные кнопки (минимизация, максимизация и пр.) а когда они добавляютя в о один  CPropertySheet, то эти элементы исчезают, хотя CPropertySheet согласно иерархии классов наследуется от CDialog. Пробовал делать ModifyStyle, вылетает ексепшн =(
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 31-05-2007 18:34 » 

>>классе CPropertySheet делаю "add" страниц классов наследуемых от CTabCtrl

ёёё, а смысл ?

может вот это поможет, посмотри
https://club.shelek.ru/viewart.php?id=287
Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #4 : 03-06-2007 04:40 » 

Спасибо, разобрался со вкладками. Но встал следующий вопрос. Раньше в диалоге (:CDialog) рисовался некий график и обновлялся по CDialog::Invalidate(), теперь CDialog является частью CTabCtrl (так как подсказал Алексей1153++) и вызов из потока метода CDialog::Invalidate() не влияет на перерисовку... вернее оно данные наверняка обновляет где-то внутри CDialog, но на форме этого не видно, пока не пощёлкаешь вкладками TabCtrl'a или не минимизируешь/максимизируешь окно. Сделал кроме CDialog::Invalidate также CTabCtrl::Invalidate ... стало всё мерцать, да так что картинки нормально не увидишь.... Куда копать?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 03-06-2007 04:52 » 

Tuborg, CDialog  не является частью CTabCtrl  )  Вернее, щас чтоб в словах не запутаться :

1) CTabCtrl  - не наследник CDialog
2) Объекты класса CDialog  (страницы)  - также не являются частью объекта CTabCtrl. Они просто показываются или скрываются при нажатии на кнопки вкладок

-----------
тыкс... про какую перерисовку речь ? Я что то пропустил ? )

Всё доложно быть нормально, обычный диалог же показывается.

Как рисуешь, зачем для этого Invalidate ?  По идее наоборот - сначала Invalidate , потом рисуешь в OnPaint()
« Последнее редактирование: 03-06-2007 05:02 от Алексей1153++ » Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #6 : 03-06-2007 05:17 » 

Ага... значит это не связанные страницы... я не должен делать CTabCtrl->Invalidate.   ....   да я сначала читаю данные из файла, потом происходит invalidate -> OnPaint, где всё и рисуется.... (в CDialog)
Почему же раньше перерисовка была на УРА! =) почему сейчас Invalidate не хочет перерисовывать? Почему я должен  дополнительно щёлкать закладки TabCtrl'а?
Записан
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #7 : 03-06-2007 05:23 » 

Кажется откопал где =). StaticLabel обновляется так как нада, не обновляется CRectangle. В OnPaint я делаю перерисовку по bitblt. Скорее всего глюки там. Буду искать. Спасибо что выслушали =)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 03-06-2007 05:54 » new

Tuborg, перерисовывать CTabCtrl бесполезно, на нём ничего же нету ) На нем лежит страница (дочернее окно) , которое тебе и надо перерисовать. В закладках запомнен указатель на окно вкладки-диалога, бери этот указатель (назовём, скажем, CWnd* pWnd) и вызывай

pWnd->Invalidate(0)

>>>Почему я должен  дополнительно щёлкать закладки TabCtrl'а?
 - не должен )  Просто в этом случае так же вызывается

((CWnd*)item.lParam)->ShowWindow(SW_SHOW);
что также вызывает перерисовку только что показанной вкладки
« Последнее редактирование: 03-06-2007 05:59 от Алексей1153++ » Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #9 : 03-06-2007 06:14 » 

сделал ShowWindow(SW_HIDE) а потом ShowWindow(SW_SHOW) вместо Invalidate() и всё как-то заработало... Причём если оставить только SW_SHOW, то эфекта никакого... а с SW_HIDE оно работает  Здесь была моя ладья... только с промелькиванием... но уже сносно. И всё таки наверно это изврат, надо же Invalidate() делать...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 03-06-2007 06:16 » 

Tuborg, я наверное неправильно выразился, ты меня не понял. Конечно же надо именно Invalidate() делать )

ЗЫ. а SW_SHOW  , если окно уже было показано, перерисовку не вызовет
Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #11 : 03-06-2007 06:30 » 

Так invalidate как раз и не работает! SW_HIDE/SW_SHOW - единственное что заставляет окно перерисовываться.... а я тоже был бы не против чтобы invalidate работало
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 03-06-2007 06:39 » 

Tuborg, пробуй так -

pWnd->Invalidate(0);
pWnd->UpdateWindow();

ещё , как вариант (но может начать мерцать) -
pWnd->Invalidate(1);
pWnd->UpdateWindow();
Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #13 : 03-06-2007 10:40 » 

попробовал оба варианта =( ничего не сработало... буду мат.часть изучать =)  OnPaint срабатывает на каждый invalidate, Может ли быть так что перерисовывается область CTabCtrl поверх CDialog?
« Последнее редактирование: 03-06-2007 10:46 от Tuborg » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 03-06-2007 11:08 » 

Tuborg, что то у тебя с порядком перерисовки.

 скинь мне проект может я что то не понимаю, посмотрю , поразбираюсь

может данные для графика не меняются ? И кажется, что не перерисовывается
« Последнее редактирование: 03-06-2007 11:12 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 05-06-2007 03:53 » 

Tuborg, сорри, до проекта ещё так и не добрался, но есть такая мысль - тебе не диалог надо Invalidate , а сам контрол графика обновить (если ты какой-то компонент юзаешь)
Вернее  Invalidate(0) для диалога ты делай по прежнему, но в самом диалоге добавь ещё в OnPaint -

Код:
void CMyDlg::OnPaint()
{
  CPaintDC dc(this);

  (контрол_графика).Invalidate(0);
// или может метод специальный там у него какой то типа Refresh
Записан

Tuborg
Команда клуба

ee
Offline Offline

« Ответ #16 : 06-06-2007 09:18 » 

График у меня не является контролом.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 06-06-2007 09:24 » 

Tuborg, а зря он им не является Ага
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines