Почему не вызывается деструктор?
пока пользователь его не закроет (т.е. программа создает экземпляр этого класса, вызывает метод PokasatModalno() - на этой точке открывается модальный фрейм, возврат из метода - по закрытии фрейма). Т.е. что-то наподобие ShowModal в Delphi.
Вот исходный код
{
public:
CGraphWin(CWnd *);
void PokasatModalno();
afx_msg void OnClose(void);
afx_msg void OnPaint(void);
afx_msg void OnSize( UINT, int, int);
afx_msg void OnDestroy();
afx_msg void OnCommand_Vihod();
private:
CWnd *pWnd; // родительское окно, к которому прикрепляется "модальный фрейм"
...
}
Вот конструктор
{
pWnd=pWnd_;
// создание окно фрейма с меню
Create(NULL, "График", WS_OVERLAPPEDWINDOW, rectDefault, pWnd, "GRAPHMENU");
}
Теперь самое интересное - метод PokasatModalno и обработчик OnClose
{
pWnd->EnableWindow(FALSE);
RunModalLoop(MLF_SHOWONIDLE); // ждет пока не будет вызван EndModalLoop
BOOL b=pWnd->EnableWindow(TRUE);
}
afx_msg void CGraphWin::OnClose()
{
// завершить цикл обработки сообщений
EndModalLoop(0);
}
Таким образом описав этот класс можно его использовать, предположим в главном окне приложения при обработке выбора пункта меню пишем:
{
CGraphWin *gw=new CGraphWin(this);
gw->PokasatModalno();
delete gw;
}
Все работает, окно CGraphWin отображается как модальный фрейм, его можно закрывать, снова открывать, но обработчик
OnDestroy в CGraphWin не вызывается!
После закрытия главного окна приложения в окне Output появляется предупреждение
Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called.
Кто-нибудь может помочь разобраться, в чем дело?
интересует лишь один аспект - это масштабирование.
Проценты и пропорции - к чему это?
к масштабированию.... ты знаешь чем мужчины отличаются от женщин ? ответ : у мужчин более развито абстрактное мышление что дает им способность решать задачи для которых пока еще не было найдено решение никем... так вот тебе надо развивать абстрактное мышление... ООП тебе в этом поможет....
к масштабированию.... ты знаешь чем мужчины отличаются от женщин ? ответ : у мужчин более развито абстрактное мышление что дает им способность решать задачи для которых пока еще не было найдено решение никем... так вот тебе надо развивать абстрактное мышление... ООП тебе в этом поможет....
У женщин развито конкретное мышление, она более точна в деталях. Этого сейчас не хватает. Масштабирование - решенная задача. Не думаю, что здесь можно создать что-то новое.
один из компонент для вывода графики. Бегло просмотрев понял, что там используется иной подход - наподобие того, что мы обсуждали ранее.
Т.е. там все организовано с помощью метода наподобие Output(&dc).
http://www.codeguru.com/Cpp/controls/controls/chartingandanaloguecontrols/article.php/c9309/
один из компонент для вывода графики. Бегло просмотрев понял, что там используется иной подход - наподобие того, что мы обсуждали ранее.
Т.е. там все организовано с помощью метода наподобие Output(&dc).
Ты наверное когда учился в школе много списывал....не знаю кому как, но я разработчик, и мне доставляет удовольствие решать задачи самому, а не искать готовые ответы, помимо этого сие есть единственный способ развития интеллекта. А масштабирования вообще очень простая задача что б я ее еще раз с кем то обсуждал.... решение очень простое : PixelsPerUnit.
Ты наверное когда учился в школе много списывал....не знаю кому как, но я разработчик, и мне доставляет удовольствие решать задачи самому, а не искать готовые ответы, помимо этого сие есть единственный способ развития интеллекта. А масштабирования вообще очень простая задача что б я ее еще раз с кем то обсуждал.... решение очень простое : PixelsPerUnit.
Я спросил у профессора, занимался ли он сглаживанием временных рядов, на что он ответил - никогда в жизни. Тогда я спросил, неужели он не знает как сглаживаются временные ряды, он ответил, что знает и сослался на авторов, которые достигли в этом больших успехов.
К чему это? К тому, что невозможно знать все... Невозможно заниматься всем и знать это до деталей... Компонент для вывода графики не является самоцелью. Я реализовал его в очень упрощенному виде и вижу один из многих его недостатков - масштабирование.
Что такое PixelsPerUnit?
Я спросил у профессора, занимался ли он сглаживанием временных рядов, на что он ответил - никогда в жизни. Тогда я спросил, неужели он не знает как сглаживаются временные ряды, он ответил, что знает и сослался на авторов, которые достигли в этом больших успехов.
К чему это? К тому, что невозможно знать все... Невозможно заниматься всем и знать это до деталей... Компонент для вывода графики не является самоцелью. Я реализовал его в очень упрощенному виде и вижу один из многих его недостатков - масштабирование.
:))))))
Что такое PixelsPerUnit?
ты по английски читать умеешь ? по всей видимости нет.
:))))))
ты по английски читать умеешь ? по всей видимости нет.
Посмотри ссылку
http://www.rsdn.ru/Forum/Message/77668.htm
Чем ты хотел меня там удивить ? тривиальное решение тривиальной задачи на уровне наверно 2 или 3 класса средней школы...
Чем ты хотел меня там удивить ? тривиальное решение тривиальной задачи на уровне наверно 2 или 3 класса средней школы...
имеется ввиду что математический аппарат необходимый и достаточный для решений задачи изучается во 2 или 3 классе средней школы...
отвечаю на твой главный вопрос
а то за хамской трескотней PitxBullя изначальный смысл темы затерялся.
Вот выдержка из MSDN, которая как раз объясняет твой главный вопрос!!!
Могу, если нужно, ключевые моменты изложить по-русски
==================================================
PRB: "Warning: Calling DestroyWindow in CWnd::~CWnd" Message
Q105081
--------------------------------------------------------------------------------
The information in this article applies to:
The Microsoft Foundation Classes (MFC), used with:
Microsoft Visual C++ for Windows
Microsoft Visual C++ 32-bit Edition
--------------------------------------------------------------------------------
SYMPTOMS
The following warnings are displayed when a debug version of a program is executed and TRACE() diagnostics are enabled:
Warning: calling DestroyWindow in CWnd::~CWnd
OnDestroy or PostNcDestroy in derived class will not be called
CAUSE
The above warnings are displayed by the CWnd::~CWnd() destructor. The warnings indicate the following:
The programmer has most likely called "delete" on a CWnd object rather than DestroyWindow().
An object derived from CWnd is not performing a DestroyWindow() call in its destructor.
Because the DestroyWindow() call is executed in the destructor for CWnd, only the CWnd portion of the CWnd-derived object is remaining when the DestroyWindow() is called. Thus, if you have a CWnd-derived object and receive this warning, the derived object's virtual functions will not exist and the CWnd functions will be called instead.
RESOLUTION
MFC Technote #17 contains more information on how to properly destroy a Window object and states the following cardinal rule:
To destroy a C++ Windows object, use DestroyWindow, not "delete".
Also, examining CWnd::~CWnd() will reveal that the foremost task of the destructor is to ensure that the associated Windows window object has been destroyed. If a program calls DestroyWindow() before the CWnd destructor is called, the m_hWnd data member will be NULL, the TRACE0() messages will not occur, and DestroyWindow() will not be called in CWnd::~CWnd().
===================================================
Остальные проблемы заключаются в том, что когда окно разрушается обработчик событий этого окна уже не работает и бессмыслено уповать на какие-либо MESSAGE
Если интересно, собери все свои вопросы в 1 пост,
попробую на них ответить, т.к. в аналогичную яму сам попадал.
michael_is_98
отвечаю на твой главный вопрос
а то за хамской трескотней PitxBullя изначальный смысл темы затерялся.
Вот выдержка из MSDN, которая как раз объясняет твой главный вопрос!!!
<skip>
<skip>
<skip>
еще один ламер возомнивший себя гениальныи программистом :))))) если ты внимательно прочитаешь все мои ответы то увидишь что на этот вопрос я уже ответил в гораздо более лаконичной и доступной форме. К тому же проблема связанная с этим вопросом уже давно решена и обсуждение перешло на другие темы.
запустил бы ты новую тему
если тебе еще интересно про масштабирование
а то бессодержательные и оскорбительные посты PitxBullя так все замусорили...
michael_is_98
запустил бы ты новую тему
если тебе еще интересно про масштабирование
а то бессодержательные и оскорбительные посты PitxBullя так все замусорили...
Спасибо большое коллеги!
Ваша помощь очень важна.
В принципе вопрос можно считать исчерпанным. То, что помимо рассматривалось, к теме действительно не относится, но было нелишне. Скорее тему можно было бы назвать "Граф. библиотека"