本文整理汇总了C++中TDocument类的典型用法代码示例。如果您正苦于以下问题:C++ TDocument类的具体用法?C++ TDocument怎么用?C++ TDocument使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TDocument类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
//
/// Destruct this DocManager. Close all open documents (views close with them),
/// and delete all non-static doc templates
///
/// Destroys a TDocManager object removes attached documents templates. The
/// constructor resets TDocTemplate::DocTemplateStaticHead to point to the head of
/// the static template list.
//
TDocManager::~TDocManager()
{
// Iterate through document list, closing and deleting each
//
TDocument* doc;
while ((doc = DocList.Next(0)) != 0) {
if (doc->IsOpen())
doc->Close();
// NOTE: deleting the document deletes all attached views, and unlinks
// the document from the docmanager's document list
//
delete doc;
// Flush (dispatch) any pending MDI-Child-destroy messages
//
GetApplication()->PumpWaitingMessages();
}
// Reset the 'Docmanager' pointer of static templates and delete
// dynamic ones...
//
while (TemplateList) {
TDocTemplate* tpl = TemplateList;
TemplateList = tpl->GetNextTemplate();
if (tpl->IsStatic())
tpl->SetDocManager(0);
else
delete tpl;
}
}
示例2: NotifyViews
//
/// Performs the reverse of Commit() and cancels any changes made to the document
/// since the last commit. If clear is true, data is not reloaded for views. Revert
/// also checks all child documents and cancels any changes if all children return
/// true. When a file is closed, the document manager calls either Commit() or Revert.
/// Returns true if the operation is successful.
//
bool
TDocument::Revert(bool clear)
{
TDocument* pdoc = 0;
while ((pdoc = ChildDoc.Next(pdoc)) != 0) {
if (!pdoc->Revert(clear))
return false;
}
return NotifyViews(vnRevert, clear);
}
示例3: QueryViews
//
/// Return pointer to this document or one of its child documents if the spcecified
/// window parameter is a view associated with the document.
/// \note Unlike 'HasFocus', this method allows you to distinguish whether the
/// document with focus is a child document.
//
TDocument*
TDocument::DocWithFocus(HWND hWnd)
{
TDocument* pdoc = 0;
while ((pdoc = ChildDoc.Next(pdoc)) != 0)
if (pdoc->DocWithFocus(hWnd))
return pdoc;
return QueryViews(vnIsWindow, (long)hWnd) ? this : 0;
}
示例4: while
//
/// Checks to see if all child documents can be closed before closing the current
/// document. If any child returns false, CanClose returns false and aborts the
/// process. If all children return true, calls TDocManager::FlushDoc. If FlushDoc
/// finds that the document has been changed but not saved, it displays a message
/// asking the user to either save the document, discard any changes, or cancel the
/// operation. If the document has not been changed and all children's CanClose
/// functions return true, this CanClose function returns true.
//
bool
TDocument::CanClose()
{
TDocument* pdoc = 0;
while ((pdoc = ChildDoc.Next(pdoc)) != 0)
if (!pdoc->CanClose())
return false;
return DocManager->FlushDoc(*this); // do the UI in the doc manager
}
示例5: GetCurrentDoc
void
TDocManager::FileRevert()
{
TDocument* doc = GetCurrentDoc();
if (doc && doc->GetDocPath()) {
if (!doc->IsDirty()) {
PostDocError(*doc, IDS_NOTCHANGED);
return;
}
doc->Revert();
}
}
示例6: GetObject
void
TDocument::Streamer::Write(opstream& os) const
{
TDocument* o = GetObject();
while (!o->CanClose()) // can't permit cancel here
;
os << o->OpenMode;
_USES_CONVERSION;
os.fwriteString(_W2A(o->DocPath));
os.fwriteString(_W2A(o->Title));
os << o->Template; // templates already streamed, must be so if static
os << o->ParentDoc;
os << o->ViewList; // each view streams out the next
os << TView::NextViewId; // insure that this static var gets set on reload
}
示例7: eventInfo
//
/// Notifies the views of the current document and the views of any child documents
/// of a change. In contrast to QueryViews, NotifyViews sends notification of an
/// event to all views and returns true if all views returned a true result. The
/// event, EV_OWLNOTIFY, is sent with an event code, which is private to the
/// particular document and view class, and a long argument, which can be cast
/// appropriately to the actual type passed in the argument of the response
/// function.
//
bool
TDocument::NotifyViews(int event, long item, TView* exclude)
{
bool answer = true;
TDocument* pdoc = 0;
while ((pdoc = ChildDoc.Next(pdoc)) != 0)
answer = (answer && pdoc->NotifyViews(event, item, exclude));
TEventHandler::TEventInfo eventInfo(WM_OWLNOTIFY, event);
for (TView* view = ViewList; view != 0; view = view->NextView)
if (view != exclude && view->Find(eventInfo))
answer = (answer && (view->Dispatch(eventInfo, 0, item) != 0));
return answer;
}
示例8: PostDocError
//
/// Overrideable method invoked just before the DocumentManager creates a new
/// document. The default behaviour is to close and delete the current
/// document if we're in SDI mode.
//
bool
TDocManager::CreatingDoc(TDocTemplate* /*tpl*/)
{
if (Mode & dmSDI) {
TDocument* doc = DocList.Next(0);
if (doc) {
if (!doc->CanClose())
return false;
if (!doc->Close()) {
PostDocError(*doc, IDS_UNABLECLOSE);
return false;
}
delete doc;
}
}
return true;
}
示例9: SelectDocPath
//
/// Displays FileSave dialog prompting the user to select a file name for savinng the document.
/// Filters out read-only files.
//
bool
TDocManager::SelectSave(TDocument& doc)
{
TDocTemplate* tpl = doc.GetTemplate();
if (!tpl || !tpl->GetFileFilter())
return false;
tchar filepath[_MAX_PATH];
if (doc.GetDocPath())
::_tcscpy(filepath, doc.GetDocPath());
else
filepath[0] = 0; // no initial file path
int index = SelectDocPath(&tpl, 1, filepath, COUNTOF(filepath), 0, true, &doc);
return index ? doc.SetDocPath(filepath) : false;
}
示例10: TRACEX
//
/// CreateDoc creates a document based on the directory path and the specified
/// template. The flags parameter contains one of the document template constants
/// that determines how the document is created.
//
TDocument*
TDocManager::CreateDoc(TDocTemplate* tpl, LPCTSTR path,
TDocument* parent, long flags)
{
if (!tpl) {
TRACEX(OwlDocView, 0, _T("CreateDoc(): NULL template specified!"));
return 0;
}
// Creation step 0: Inform docmanager that we're about to create a document
// and allow docmanager to veto
//
if (!CreatingDoc(tpl)) {
TRACEX(OwlDocView, 1, _T("CreateDoc(): Creation vetoed."));
return 0;
}
// Creation step 1: Construct the document, passing in the parent document
// Put together a dummy parent document if no parent doc was specified in
// order to allow us to pass in the DocManager pointer hidden in the parent
// doc
//
TDocument* doc;
if (!parent){
TDocument td(this);
doc = tpl->ConstructDoc(&td);
}
else
doc = tpl->ConstructDoc(parent);
if (!doc) {
TRACEX(OwlDocView, 0, _T("CreateDoc(): ConstructDoc call failed"));
return 0;
}
// Creation step2: Initialize the document
//
doc->SetTemplate(tpl);
return InitDoc(doc, path, flags);
}
示例11: PRECONDITION
//
/// Calls TWindow::GetFocus() to determine the window with the focus. Searches the
/// list of documents and returns the document that contains the view with the
/// focus. Returns 0 if no document has a view with focus.
//
TDocument*
TDocManager::GetCurrentDoc()
{
PRECONDITION(GetApplication());
PRECONDITION(GetApplication()->GetMainWindow());
HWND hWnd = GetApplication()->GetMainWindow()->GetCommandTarget();
TDocument* doc = 0;
#if defined(OLD_DOCVIEW)
// !BB This older implementation of GetCurrentDoc relies on the
// !BB document's HasFocus method which does not allow 'GetCurrentDoc'
// !BB to return child documents....
// !BB
// !BB This obviously causes some problems (for example, closing a view
// !BB associated with a child document closes the whole document and
// !BB all their associated views!).
// !BB
// !BB However is there code that relies on this behaviour - Investigate
// !BB
if (hWnd && ::IsWindow(hWnd)) {
while ((doc = DocList.Next(doc)) != 0 && !doc->HasFocus(hWnd))
;
}
#else
if (hWnd && ::IsWindow(hWnd)) {
while ((doc = DocList.Next(doc)) != 0 ) {
TDocument* childDoc = doc->DocWithFocus(hWnd);
if (childDoc) {
doc = childDoc;
break;
}
}
}
#endif
return doc;
}
示例12: GetApplication
//
/// Displays a message box with the error message passed as a string resource ID in
/// sid. By default, the message box contains either an OK push button or a question
/// mark icon. If an error message can't be found, PostDocError displays a "Message
/// not found" message. choice can be one or more of the MB_Xxxx message style
/// constants. This function can be overridden.
///
/// Returns an integer
/// identifying the MessageBox option (push-button) selected by the user.
//
uint
TDocManager::PostDocError(TDocument& doc, uint sid, uint choice)
{
PRECONDITION(GetApplication());
PRECONDITION(GetApplication()->GetMainWindow());
tchar buf[256];
if (GetApplication()->LoadString(sid, buf, sizeof(buf) / sizeof(tchar)) == 0)
#if BI_MSG_LANGUAGE == 0x0411
_stprintf(buf, "エラー: 文字列 ID %u が見つかりません", sid);
#else
_stprintf(buf, _T("Error: Message [string ID %u] not found"), sid);
#endif
if (choice != MB_OK)
choice |= MB_ICONQUESTION;
return GetApplication()->GetMainWindow()->MessageBox(buf, doc.GetTitle(), choice);
}
示例13: GetTemplateDescription
//
/// Given a list of templates, prompts the user to select one of the templates to use for the file to be
/// opened. Returns the template index used for the selection, or 0 if unsuccessful.
/// For a file open operation, save is false. For a file save operation, save is
/// true. This function can be overridden to provide a customized user interface.
///
/// \note This is Windows-specific, using the system-provided file open dialog box
//
int
TDocManager::SelectDocPath(TDocTemplate** tpllist, int tplcount,
LPTSTR path, int buflen, long flags,
bool save, TDocument* doc)
{
// Compute length of description(s) and filter(s)
//
int len = GetTemplateDescription(tpllist, tplcount);
// Put together a string of description and filters
//
TAPointer<tchar> filtbuf(new tchar[++len]);
GetTemplateDescription(tpllist, tplcount, filtbuf, len);
// Find the (default) template to select
//
int index, count;
TDocument* curDoc = save ? (doc ? doc : GetCurrentDoc()) : 0;
CHECK(!save || curDoc);
if (save) {
for (index = count = 0; count < tplcount; count++) {
if (tpllist[count] == curDoc->GetTemplate()) {
index = count;
break;
}
}
}
else {
for (index = count = 0; count < tplcount; count++) {
if (tpllist[count]->IsFlagSet(dtSelected)) {
index = count;
break;
}
}
}
// Initialize data structure used for launching Common Dialog
//
flags = (tpllist[index]->GetFlags() | flags);
flags &= 0x000FFFFF; // Clear Doc/View related flags.
flags |= AdditionalFileDialogFlags; // Add extended flags, e.g. OFN_ENABLESIZING.
flags &= ~dtProhibited; // Clear unsupported flags, e.g. OFN_ENABLETEMPLATE.
TDvOpenSaveData data(flags, // flags
filtbuf, // filter
CONST_CAST(LPTSTR, tpllist[index]->GetDirectory()), // initDir.
CONST_CAST(LPTSTR, tpllist[index]->GetDefaultExt()), // defExt.
index ? index+1 : 0, // filterIndex
tpllist, // template list
tplcount); // template count
//--- Sirma (Krasi)
{
LPCTSTR fName = path && *path ? path : (doc ? doc->GetTitle() : 0);
if (fName && *fName)
_tcsncpy(data.FileName, fName, buflen);
}
//--- Sirma (Krasi) ---
// Execute dialog
//
int result;
TWindow* parent = GetApplication()->GetMainWindow();
if (save)
result = TDvFileSaveDialog(parent, data).Execute();
else
result = TDvFileOpenDialog(parent, data).Execute();
// Dialog was cancelled!
//
if (result != IDOK) {
WARNX(OwlDocView, data.Error != 0, 0, _T("Common dialog error: ") << \
data.Error << _T(" in SelectDocPath()") );
return 0;
}
// !BB
// Here, there's a major dilemma! How, do we know the user did not
// mislead us? For example, the user may have selected the *wrong*
// template for saving a particular document... This is crucial when
// saving documents!!!
//
// Update templates to 'remember' the template last used
//
for (count = 0; count < tplcount; count++) {
if (count == index-1)
tpllist[count]->SetFlag(dtSelected);
else
tpllist[count]->ClearFlag(dtSelected);
}
// Update selected template with directory
//
//.........这里部分代码省略.........