CMainFrame এর পরিবর্তে CView এ ডকিং প্যান তৈরি করা

VS2008 (প্লাস ফিচার প্যাক) এর AppWizard ব্যবহার করে "ভিসুয়াল স্টুডিও" শৈলী সহ একটি এমডিআই তৈরি করার সময়, CMainFrame শ্রেণী একটি পদ্ধতি পায় CreateDockingWindows()

যেহেতু আমি সব প্যানেলকে সর্বদা দৃশ্যমান করতে চাই না কিন্তু সক্রিয় ডকুমেন্টের উপর নির্ভর করে তাদের প্রদর্শন করি, আমি আমার উইন্ডোজকে আমার মতামতগুলি তৈরি করে দিয়েছি এবং এটিকে OnInitialUpdate() তে সরানো হয়েছে। আমি সেই একই প্যাশনগুলি একই পদ্ধতিতে তৈরি করি যেমনটি CMainFrame দ্বারা মূল ফ্রেমটি মূল প্যারেন্ট সেটিং হিসাবে অন্তর্ভুক্ত করে।

ডকিং উইন্ডোর পজিশন স্বয়ংক্রিয়ভাবে রেজিস্ট্রি এ সংরক্ষিত হয় তবে তারা পুনরুদ্ধার করা হবে না কারণ ফ্রেমটি সূচনা করার সময় ডকিং উইন্ডোগুলো এখনো বিদ্যমান নেই।

দেখে কি ডকিং উইন্ডোগুলি তৈরি করা উচিত বা আমি আরও সমস্যার আশা করতে পারি? আমি কি চান তা সম্পন্ন করার একটি ভাল উপায় আছে?

আগাম ধন্যবাদ!

1

1 উত্তর

নিম্নলিখিত সমাধান আমার জন্য চমত্কারভাবে কাজ করার জন্য পরিণত।

মেইনফ্রেম এখনও সমস্ত প্যানগুলি মালিক, তাই এই সমস্ত বিদ্যমান ফ্রেমওয়ার্ক-কার্যকারিতা পালন করে।

আমি একটি ক্লাস থেকে প্যানগুলি উপভোগ করি যা "CView-like" আচরণের প্রয়োজন যা আমি প্রয়োগ করি:

/**
 * \brief Mimics some of the behavior of a CView
 *
 * CDockablePane derived class which stores a pointer to the document and offers
 * a behavior similar to CView classes.
 *
 * Since the docking panes are child windows of the main frame,
 * they have a longer live time than a view. Thus the (de-)initialization code
 * cannot reside in the CTor/DTor.
 */
class CPseudoViewPane :
    public CDockablePane,
{
    DECLARE_DYNAMIC(CPseudoViewPane)

public:
    /// Initializes the pane with the specified document
    void Initialize(CMyDoc* pDoc);

    void DeInitialize();

    /// Checks if window is valid and then forwards call to pure virtual OnUpdate() method.
    void Update(const LPARAM lHint);

protected:
    CPseudoViewPane();
    virtual ~CPseudoViewPane();


    CMyDoc* GetDocument() const { ASSERT(NULL != m_pDocument); return m_pDocument; }

    CMainFrame* GetMainFrame() const;

    /**
     * This method is called after a document pointer has been set with #Initialize().
     * Override this in derived classes to mimic a view's "OnInitialUpdate()-behavior".
     */
    virtual void OnInitialUpdate() = 0;

    /**
     * Called by #Update(). Overrider to mimic a view's "OnUpdate()-behavior".
     * This method has a simplified parameter list. Enhance this if necessary.
     */
    virtual void OnUpdate(const LPARAM lHint) = 0;

    DECLARE_MESSAGE_MAP()

private:
    CMyDoc* m_pDocument;
};
1
যোগ