Закрытие закладок в CTabbedChildWindow
От: alexplev  
Дата: 11.11.12 07:39
Оценка:
А я когда то просто добавил в исходный класс CTabbedChildWindow вот такой код:


//-------добавлена мной обработка закрытия табулированных окон и функции SetLastViewNoClose и GetLastViewNoClose для блокировки
//-------закрытия необходимых приложению окон
private:
    INT m_lastViewNoClose;    //last number of tab which cannot be closed, -1 all closed

public:

    void SetLastViewNoClose(INT num) { m_lastViewNoClose = num;}
    INT GetLastViewNoClose() { return m_lastViewNoClose; }

    BEGIN_MSG_MAP(thisClass)
        NOTIFY_CODE_HANDLER(CTCN_CLOSE, OnTabClose)//добавлено для обработки кнопки закрытия окна
        CHAIN_MSG_MAP(baseClass)
    END_MSG_MAP()

    LRESULT OnTabClose(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled)
    {
        LPNMCTCITEM pnmCustomTab = (LPNMCTCITEM)pnmh;
        if(pnmCustomTab)
        {
            if(pnmCustomTab->iItem >= 0 && pnmCustomTab->iItem > m_lastViewNoClose)
            {
                TTabCtrl::TItem* pItem = m_TabCtrl.GetItem(pnmCustomTab->iItem);
                if(pItem)
                {
                    HWND hWndChild = pItem->GetTabView();
                    if(0 == ::SendMessage(hWndChild, WM_CLOSE, 0, 0L))
                    {
                        this->RemoveTab(hWndChild);
                    }
                }
            }
        }
        bHandled = FALSE;
        return 0;
    }



В результате можно заблокировать закрытие нескольких первых окон и обрабатыватся CTCN_CLOSE, и каждый раз писать не нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.