Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2008, 18:18   #1
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию Создание курсора в Visual C++

Здравствуйте! Я изучаю сейчас Visual С++ (MFC), и при изучении темы "Создание курсора в окне", возникла маленькая неясность: в книге написано:
Цитата:
Курсор будет создан в методе OnDraw. Создадим в объекте вида логическую переменную с именем CaretCreated:
Код:
boolean CaretCreated;
После того как в конструкторе вида переменной CaretCreated будет присвоено значение false, в методе OnDraw() необходимо проверить, был ли курсор создан ранее:
Код:
if (!CaretCreated)
  {
// код курсора  
}
Вот эти пункты мне не понятны... Каким образом переменной boolean CaretCreated; будет присвоено значение? И почему если я пишу:
Код:
if (!CaretCreated)
  {
// код курсора 
 }
то ничего не работает, а если !(восклицательный знак) НЕ писать, то так:
Код:
if (CaretCreated)
  {
// код курсора  
}
все работает... Хотя в книге написано именно с восклицательным знаком.
Подскажите пожалуйста... Разъясните пожалуйста эту "непонятность".
Rembo вне форума Ответить с цитированием
Старый 13.10.2008, 08:44   #2
elnair
 
Регистрация: 03.10.2008
Сообщений: 9
По умолчанию

хоть бы код привел...

ну если пралльно вкурил, то, OnDraw() - событие при прорисовке...

и повторяться оно может не один раз, если курсор уже создан то нефиг его снова создавать, насколько я понял. Хотя лучше код в студию
elnair вне форума Ответить с цитированием
Старый 14.10.2008, 14:18   #3
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию

elnair, спасибо за внимание! вот ТУТ исходники:
name - не рабочая версия...
а name2 - рабочая!
Rembo вне форума Ответить с цитированием
Старый 19.10.2008, 12:57   #4
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию

Жаль, что я так и не получил ответ на свой вопрос. Хорошо, тогда изменю чуть-чуть свой вопрос:
Есть ли такой метод(функция), который (или которая) проверяет создан курсор в программе или нет? Ну и соответственно возвращает либо true, либо false? А?
Rembo вне форума Ответить с цитированием
Старый 19.10.2008, 13:41   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

1. лучше использовать bool, а не boolean
2. кто будет инициализировать значение CaretCreated в false?
pu4koff вне форума Ответить с цитированием
Старый 19.10.2008, 14:11   #6
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
1. лучше использовать bool, а не boolean
Если не трудно скажите пожалуйста, а в чем вообще разница между bool и boolean? Просто в книжке написано boolean.
Цитата:
Сообщение от pu4koff Посмотреть сообщение
2. кто будет инициализировать значение CaretCreated в false?
Вот это-то я сам и хотел узнать. В книге написано, что первым делом создадим логическую переменную boolean CaretCreated;
А затем в методе OnDraw() необходимо проверить, был ли курсор создан ранее:
Код:
if (!CaretCreated)
  {
// код курсора  
}
Вот в этот код программа не доходит, так как почему-то CaretCreated равно true... А значит по тому что написано в книге, переменная CaretCreated должна быть false. Какая-то непонятка...
И ещё один вопросик: это насчёт "фокуса": почему то не корректно работают эти строки:
Код:
void CNameView::OnKillFocus(CWnd* pNewWnd) 
{

    
	CView::OnKillFocus(pNewWnd);
	
   HideCaret();
	
	// TODO: Add your message handler code here
	
}

void CNameView::OnSetFocus(CWnd* pOldWnd) 
{
	CView::OnSetFocus(pOldWnd);
	ShowCaret();
	// TODO: Add your message handler code here
	
}
Вроде все правильно: когда программа теряет фокус, курсор должен пропасть, а когда наоборот появляется фокус - курсор должен появиться... Но это по коду так, а на самом деле почему то так не происходит: не пропадает курсор при потере фокуса У всех так?

Последний раз редактировалось Rembo; 19.10.2008 в 14:19.
Rembo вне форума Ответить с цитированием
Старый 19.10.2008, 14:31   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Rembo Посмотреть сообщение
Если не трудно скажите пожалуйста, а в чем вообще разница между bool и boolean? Просто в книжке написано boolean.
Раньше булев тип в Си не поддерживался, на сколько я знаю. Использовался тип BOOL, который является ничем иным, как int. boolean - это кажется unsigned char. Сейчас bool - это вроде бы полноценный булев тип
Вообще Си, если переменная равна 0, значит - это false, иначе - true. т.е.
Код:
int i;
if (i)
{
...
}
вполне корректное сравнение, в отличии от delphi
Цитата:
Сообщение от Rembo Посмотреть сообщение
...так как почему-то CaretCreated равно true... А значит по тому что написано в книге, переменная CaretCreated должна быть false. Какая-то непонятка...
ну так в конструкторе вашего CNameView напишите:
CaretCreated = false;

С курсорами как-то не работал, так что с отображением/скрытием не помогу
pu4koff вне форума Ответить с цитированием
Старый 19.10.2008, 16:30   #8
Rembo
Форумчанин
 
Аватар для Rembo
 
Регистрация: 29.10.2007
Сообщений: 628
По умолчанию

pu4koff, спасибо за помощь... Вроде разобрался.
ЗЫ: видно в книжках часто бывают "не до четы". Вот я ввел весь код, как в книге, и не работает... Приходиться самому мудрить
Rembo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual c++ 2005 и Visual c++ 6 это разные версии или нет? Руслантус Свободное общение 3 30.11.2007 19:42
Visual J# from Microsoft Visual Studio .NET Flash_ Общие вопросы по Java, Java SE, Kotlin 2 28.12.2006 10:16