Doc/View - сохрание сразу при изменении в документе
От:
Аноним
Дата:
25.08.03 19:06
Оценка:
Программа всегда работает с одним документом. Хочу, чтобы при изменении в документе изменения сразу записывались на диск (естественно, без запрашивания имени файла — так как оно не меняется).
В принципе, можно псле каждого изменения писать
...
OnSaveDocument("C:\\file.dat");
...
Но это как-то не слишком хорошо — писать эту строку надо во многих местах. Нельзя ли это написать только в одном месте — что-то вроде:
А>Программа всегда работает с одним документом. Хочу, чтобы при изменении в документе изменения сразу записывались на диск (естественно, без запрашивания имени файла — так как оно не меняется). А>В принципе, можно псле каждого изменения писать
А>
А>...
А>OnSaveDocument("C:\\file.dat");
А>...
А>
А>Но это как-то не слишком хорошо — писать эту строку надо во многих местах. Нельзя ли это написать только в одном месте — что-то вроде: А>
В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[2]: Doc/View - сохрание сразу при изменении в документе
От:
Аноним
Дата:
26.08.03 19:42
Оценка:
Здравствуйте, Serguei666, Вы писали: S>В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ
В каком смысле перекрыть? Она же не виртуальная. В смысле вызвать или что?
Re[3]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Serguei666, Вы писали: S>>В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ А>В каком смысле перекрыть? Она же не виртуальная. В смысле вызвать или что?
Она виртуальная.
Re[4]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Vadim B, Вы писали:
VB>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Serguei666, Вы писали: S>>>В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ А>>В каком смысле перекрыть? Она же не виртуальная. В смысле вызвать или что?
VB>Она виртуальная.
MSDN говорит, что нет
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[3]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Serguei666, Вы писали: S>>В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ А>В каком смысле перекрыть? Она же не виртуальная. В смысле вызвать или что?
Невиртуальные функции тоже можно перекрывать
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[5]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Serguei666, Вы писали:
S>>>>В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ А>>>В каком смысле перекрыть? Она же не виртуальная. В смысле вызвать или что?
VB>>Она виртуальная. S>MSDN говорит, что нет
Здравствуйте, Vadim B, Вы писали:
VB>Здравствуйте, Serguei666, Вы писали:
S>>>>>В документе есть функция SetModifiedFlag. Вот ее и перекройте, и там сохраняйте документ А>>>>В каком смысле перекрыть? Она же не виртуальная. В смысле вызвать или что?
VB>>>Она виртуальная. S>>MSDN говорит, что нет
VB>А мне говорит, что виртуальная. Здесь VB>
VB>MFC Library Reference
VB>CDocument::SetModifiedFlag
VB>Call this function after you have made any modifications to the document.
Здравствуйте, Serguei666, Вы писали:
VB>>Не говоря уже о том, что я ее в своем проекте перекрывал, как виртуальную, и в CDocument (afxwin.h) она тоже описана как virtual.
S>Ну и ладненько. В исходники мне было лень смотреть. Ксати, что значит "проекте перекрывал, как виртуальную"? Вы писали слово 'virtual'?
Да.
В свою очередь: что в данном контексте означает "Невиртуальные функции тоже можно перекрывать"?
Re[8]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Vadim B, Вы писали:
VB>Здравствуйте, Serguei666, Вы писали:
VB>>>Не говоря уже о том, что я ее в своем проекте перекрывал, как виртуальную, и в CDocument (afxwin.h) она тоже описана как virtual.
S>>Ну и ладненько. В исходники мне было лень смотреть. Ксати, что значит "проекте перекрывал, как виртуальную"? Вы писали слово 'virtual'?
VB>Да.
Так вот, если в классе-предке функция декларирована как невиртуальная, то пишите вы слово "virtual" или не пишете — значения не имеет, ибо функция так и останется невиртуальной при использовании указателя на класс-предок. Поэтому меня и смутила фраза "в своем проекте перекрывал, как виртуальную". Смысла в этом не вижу.
VB>В свою очередь: что в данном контексте означает "Невиртуальные функции тоже можно перекрывать"?
Это значит, что в классе-наследнике вы можете переопределять функции, даже если они невиртуальные.
Пример:
class A
{
int F() { return 666; } // невиртуальная функция
};
class B : public A
{
int F() // перекрытая невиртуальная функция
{
int Result = A::F();
DoSomethingElse();
return Result;
}
};
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[9]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Serguei666, Вы писали:
VB>>>>Не говоря уже о том, что я ее в своем проекте перекрывал, как виртуальную, и в CDocument (afxwin.h) она тоже описана как virtual.
S>>>Ну и ладненько. В исходники мне было лень смотреть. Ксати, что значит "проекте перекрывал, как виртуальную"? Вы писали слово 'virtual'?
VB>>Да. S>Так вот, если в классе-предке функция декларирована как невиртуальная, то пишите вы слово "virtual" или не пишете — значения не имеет, ибо функция так и останется невиртуальной при использовании указателя на класс-предок. Поэтому меня и смутила фраза "в своем проекте перекрывал, как виртуальную". Смысла в этом не вижу.
Хм, я что, давал повод подозревать меня в элементарном незнании основ С++? Естественно, я перекрываю как виртуальные только те функции, которые были описаны в базовом классе как виртуальные.
VB>>В свою очередь: что в данном контексте означает "Невиртуальные функции тоже можно перекрывать"? S>Это значит, что в классе-наследнике вы можете переопределять функции, даже если они невиртуальные. S>Пример:
S>
S>class A
S>{
S> int F() { return 666; } // невиртуальная функция// добавим:void PrintSomething() { printf("%d", F()); }
S>};
S>class B : public A
S>{
S> int F() // перекрытая невиртуальная функция
S> {
S> int Result = A::F();
S> DoSomethingElse();
S> return Result;
S> }
S>};
S>
Смысла в данном контексте в этом нет. Потому что F() вызывается не только из методов класса B, но и из методов класса A, например, из PrintSomething(). Где при этом будет вызываться A::F(), а не перекрытый B::F(). Так что изначальная цель — "перехватить" все вызовы F() и изменить их работу — достигнута не будет.
Re[10]: Doc/View - сохрание сразу при изменении в документе
Здравствуйте, Vadim B, Вы писали:
VB>Здравствуйте, Serguei666, Вы писали:
VB>Хм, я что, давал повод подозревать меня в элементарном незнании основ С++? Естественно, я перекрываю как виртуальные только те функции, которые были описаны в базовом классе как виртуальные.
Фраза "Не говоря уже о том, что я ее в своем проекте перекрывал, как виртуальную, и в CDocument (afxwin.h) она тоже описана как virtual." дала мне такой повод. Потому что разницы между "перекрывать как виртуальную" или "перекрывать как невиртуальную" я не вижу.
VB>>>В свою очередь: что в данном контексте означает "Невиртуальные функции тоже можно перекрывать"? S>>Это значит, что в классе-наследнике вы можете переопределять функции, даже если они невиртуальные. S>>Пример:
S>>
S>>class A
S>>{
S>> int F() { return 666; } // невиртуальная функция
VB>// добавим:
VB> void PrintSomething() { printf("%d", F()); }
S>>};
S>>class B : public A
S>>{
S>> int F() // перекрытая невиртуальная функция
S>> {
S>> int Result = A::F();
S>> DoSomethingElse();
S>> return Result;
S>> }
S>>};
S>>
VB>Смысла в данном контексте в этом нет.
Ну да, смысла нет. Я просто примером объяснял фразу "Невиртуальные функции тоже можно перекрывать", как вы и попросили.
VB>Потому что F() вызывается не только из методов класса B, но и из методов класса A, например, из PrintSomething(). Где при этом будет вызываться A::F(), а не перекрытый B::F(). Так что изначальная цель — "перехватить" все вызовы F() и изменить их работу — достигнута не будет.
Теперь вы меня подозреваете в незнании основ C++?