أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

HOWTO: كيفية ملحقات الملفات دعم انتشار لكل نوع مستند MFC

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية141921
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
التطبيقات التي تم إنشاؤها بواسطة مع المستند فئات Foundation لـ Microsoft "(MFC) أو طريقة العرض هندسة يحتوي على الأكثر واحد ملحق الملف المقترن مع كل نوع المستند. ملحق الملف هذا الافتراضي إذا تم التحديد، يتم تخزين في سلسلة قالب المستند مخزن في جدول سلسلة أحرف.

من المفيد غالباً اقتران ملحقات الملفات جهازي مع نوع مستند محدد. توضح هذه المقالة تقنية يمكن استخدام للسماح جهازي ملحقات أسماء الملفات المخزنة في سلسلة قالب المستند. خلال اشتقاق فئة الدالة تجاوزات من الممكن اقتران ملحقات الملفات كلا مع قالب المستند.
معلومات أخرى

إجراء خطوة بخطوة

اتبع الخطوات التالية لربط جهازي ملحقات أسماء الملفات مع نوع مستند واحد في تطبيقات SDI أو MDI.

  1. تعديل إدخال جدول سلسلة بحيث يحتوي على اثنين ملحقات الملفات. يتم إدخال ملحقات اثنين إلى حقل filterExt مفصولة بفاصلة منقوطة (على سبيل المثال، .aaa; .bbb). قد تبدو مشابهة لهذه السلسلة قالب المستند:
       \nExts\nExts\nFiles (*.aaa; *.bbb)\n.aaa;.bbb\nExts.Doc\nExts Doc.					
  2. اشتقاق فئة من CMultiDocTemplate تطبيقات MDI أو CSingleDocTemplate للتطبيقات SDI. إضافة هذه الفئة إلى المشروع ثم استخدم عند إنشاء قوالب المستند في الخاص بك InitInstance الدالة. ستحتاج إلى إنشاء مُنشئ ببساطة استدعاء منشئ فئة أساسية.
       CMyMultiDocTemplate::CMyMultiDocTemplate(      UINT nIDResource, CRuntimeClass* pDocClass,      CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass ) :      CMultiDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)      { };					
  3. تجاوز دالة GetDocString في الفصل الدراسي مشتقة من CMultiDocTemplate أو CSingleDocTemplate في الخطوة 2.
       BOOL CMyMultiDocTemplate::GetDocString(CString& rString,                            enum DocStringIndex i) const   {        CString strTemp,strLeft,strRight;        int nFindPos;        AfxExtractSubString(strTemp, m_strDocStrings, (int)i);        if(i == CDocTemplate::filterExt)  {          nFindPos=strTemp.Find(';');          if(-1 != nFindPos) {            //string contains two extensions            strLeft=strTemp.Left(nFindPos+1);            strRight=strTemp.Right(lstrlen((const            char*)strTemp)-nFindPos-1);            strTemp=strLeft+strRight;          }        }    rString = strTemp;    return TRUE;   }					
  4. تجاوز CMyMultiDocTemplate::MatchDocType بحيث يتم التعرف على كلا ملحقات الملفات عند فتح ملف.
       CDocTemplate::Confidence CMyMultiDocTemplate::MatchDocType(const        char* pszPathName, CDocument*& rpDocMatch)   {        ASSERT(pszPathName != NULL);        rpDocMatch = NULL;        // go through all documents        POSITION pos = GetFirstDocPosition();        while (pos != NULL)        {           CDocument* pDoc = GetNextDoc(pos);           if (pDoc->GetPathName() == pszPathName) {              // already open              rpDocMatch = pDoc;              return yesAlreadyOpen;           }        }  // end while        // see if it matches either suffix        CString strFilterExt;        if (GetDocString(strFilterExt, CDocTemplate::filterExt) &&          !strFilterExt.IsEmpty())        {           // see if extension matches           ASSERT(strFilterExt[0] == '.');           CString ext1,ext2;           int nDot = CString(pszPathName).ReverseFind('.');           const char* pszDot = nDot < 0 ? NULL : pszPathName + nDot;           int nSemi = strFilterExt.Find(';');           if(-1 != nSemi)   {             // string contains two extensions             ext1=strFilterExt.Left(nSemi);             ext2=strFilterExt.Mid(nSemi+2);             // check for a match against either extension             if (nDot >= 0 && (lstrcmpi(pszPathName+nDot, ext1) == 0                 || lstrcmpi(pszPathName+nDot,ext2) ==0))               return yesAttemptNative; // extension matches           }           else           { // string contains a single extension             if (nDot >= 0 && (lstrcmpi(pszPathName+nDot,                 strFilterExt)==0))             return yesAttemptNative;  // extension matches           }        }        return yesAttemptForeign; //unknown document type   }					
  5. لجعل حفظ و حفظ باسم الدالة بشكل صحيح في DoSave تجاوز دالة في الفصل الدراسي اشتقاق CDocument. القص واللصق في MFC ببساطة CDocument::DoSave() من Mfc\Src\Doccore.cpp تطبيق في فئة مشتقة.

    استبدال هذه الأسطر:
            // append the default suffix if there is one        CString strExt;        if (pTemplate->GetDocString(strExt, CDocTemplate::filterExt) &&            !strExt.IsEmpty())        {           ASSERT(strExt[0] == '.');           newName += strExt;        }						
    مع هذه الأسطر:
            // append the default suffix if there is one        CString strExt;        if (pTemplate->GetDocString(strExt, CDocTemplate::filterExt) &&            !strExt.IsEmpty())        {          ASSERT(strExt[0] == '.');          int nSemi;                       //added          if(nSemi = strExt.Find(';'));    //added          strExt = strExt.Left(nSemi);     //added          newName += strExt;        }						
    ثلاثة إضافة سطور التعليمات البرمجية بإرجاع ملحق الأول بشكل افتراضي عند "حفظ باسم" معالجة نوع مستند الذي يحتوي على اثنين الملحقات المحددة في سلسلة المستند الخاص به. عليك كتابة المستخدم عبر هذا الملحق إذا كان ملف المراد حفظه بملحق الثاني المحددة في سلسلة المستند.

    ستحتاج أيضاً إلى استبدال سطور التعليمات البرمجية التالية:
          CATCH_ALL(e)      {      TRACE0("Warning: failed to delete file after failed SaveAs.\n");      DELETE_EXCEPTION(e);      }						
    مع:
          CATCH_ALL(e)      {      TRACE0("Warning: failed to delete file after failed SaveAs.\n");      e->Delete();     //modified      }						
    هذا ضرورية لأنه يتم غير معرفة الماكرو DELETE_EXCEPTION() في هذا السياق.
  6. (إصدارات 16 بت فقط) استخدام "معالج فئة" لتوفير معالجات الأمر OnFileSave و OnFileSaveAs في فئة مشتقة من المستند. يعد ذلك ضروريًا لأن في الإصدارات 16-بت من Visual C++ ، DoSave الدالة غير ظاهري. ببساطة قص ولصق محتويات الإصدارات فئة أساسية من الدالات كلا من Mfc\Src\Doccore.cpp إلى معالجات الأمر. استدعاء الدالات الناتج النسخة المحلية من DoSave بدلاً من الإصدار فئة أساسية. قد يكون ضرورياً لإضافة # تتضمن "io.h" إلى المشروع لتوفير تعريف الدالة _access.
مراجع
الرجاء مراجعة المقالة التالية في "قاعدة المعارف لـ Microsoft:
198538DocMgrEx.exe ملحقات الملفات متعددة Assoc w/1 نوع مستند
kbinf 1.50 1.51 1.52 2.00 2.50 3.00 3.10

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 141921 - آخر مراجعة: 12/04/2015 12:49:20 - المراجعة: 5.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbdocview kbhowto KB141921 KbMtar
تعليقات