MFC CTabCtrl
// Изменим размер TabControl'а
CTabCtrl *pTabCtrl = GetTabControl;
long TabCtrlRight;
RECT rc;
PageInfo.GetDlgItem(IDC_POS_MARKER2)->GetWindowRect(&rc);
TabCtrlRight = rc.left;
pTabCtrl->GetWindowRect(&rc);
rc.right = TabCtrlRight;
ScreenToClient(&rc);
pTabCtrl->MoveWindow(&rc);
pTabCtrl->UpdateWindow;
Вот-с... примерно так
![](/images/graemlins/smile.gif)
ЗЫ: В обычном табконтроле, насколько я помню вообще нет страниц. Вместо этого приложению посылается сообщение, что, дескать, нажат/выбран такой-то таб. Обрабатывая это сообщение приложение может сделать часть элементов видимвми, а другую часть — невидимыми, создавая таким образом иллюзию перелистывания. Вот только в редакторе ресурсов такой диалог делать — сомнительное удовольствие, да и обработка сообщения — нудная и рутинная операция :/
Проблеме не в неудобстве, а в том, что оно вообще не работает, если делать, как предлагается в примерах. Разница в том что делаю я и в проекте примера вроде бы только в том, что у меня MDI приложение, в котором есть диалог с таб контролом, а в примере dialog based приложение.
Я дописал свой предыдущий ответ. Это оно?
Да, страниц там нет, они создаются отдельно, проблема в том, что когда я пытаюсь сделать ей Create оно возвращает FALSE, соответственно страницу проблематично сделать потом видимой или невидимой.
Сейчас посмотрел примеры на кодегуру (подеагонале) — там как раз руками сделан механизм, уже реализованный в CPropertySheet. Нужен тебе еще один велосипед?
Где ты вызываешь функцию CMyTabCtrl::Init?
Возможно так и следует сделать, но всё же интересно из-за чего такая несправедливость происходит.
Там же в OnInitDialog основного диалога
при попытках внедрить найденные в интернетеНе понятно, что ты подразумеваешь под словом внедрить. Приведи пример своего кода, который не работает. Только как можно сильнее его упрости перед этим.
{
...
CDialog* m_tabPage;
CTabCtrl m_Tab;
....
};
CMyTabContainingDialog::CMyTabContainingDialog
{
....
m_tabPage = new Page;
....
}
CMyTabContainingDialog::OnInitDialog
{
....
m_tabPage->Create(IDD_TAB_PAGE,&m_Tab); //проблема в том, что вот этот метод возвращает 0.
.....
}
m_tabPage->Create(IDD_TAB_PAGE,&m_Tab)Ты m_Tab создал перед этим? Приведи код OnInitDialog полностью.
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyTabContainingDialog)
DDX_Control(pDX, IDC_TAB1, m_Tab);
//}}AFX_DATA_MAP
}
В OnInitDialog он уже создан
Весь приведённый тобою код работает.
?
Ровно то, что я написал. Если хочешь, чтобы я смог помочь, приводи ещё код.
Он работает в скачанном примере, но не работает в моём приложении, принципиальных отличий я не вижу вроде бы, но по всей видимости они есть
Ну тогда содержимое каких именно методов?
но не работает в моём приложенииЗначит, покажи код приложения. Попробуй вместо new CPage сначала написать new CDialog. Если создаётся, значит ошибка в классе CPage.
class EditPage1 : public CDialog
{
// Construction
public:
EditPage1(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(EditPage1)
enum { IDD = IDD_EDIT_PAGE1 };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(EditPage1)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(EditPage1)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP
};
/*******************************************
Вроде бы там негде ошибаться.
Вроде бы там негде ошибаться.Ну что значит негде? Ясное дело, что ты где-то в коде ошибся. Я только что сам создал MFC приложение, добавил таб контрол, создал диалог и положил его в табконтрол. У меня всё работает.
Могут быть какие-либо различия от того что в одном случае это приложение основанное на диалоге (когда работает а в другом мультидокументное ( когда не работает)?
Не могут.
Там какие-то контролы на странице жить мешали, когда я всё оттуда убрал, добавилось.
Там какие-то контролы на странице жить мешали, когда я всё оттуда убрал, добавилось.По твоим словам я понял, что ты ставил на диалог что-то типа Rich Edit'а, не вызвав AfxInitRichEdit или ActiveX контрол без вызова инициализации?..
Да, рич эдит мешал
![](/images/graemlins/smile.gif)
Оставить комментарий
Annetka
Хочу сделать в своём приложении диалог с таб контролом, при попытках внедрить найденные в интернете (например http://www.codeguru.com/Cpp/controls/controls/tabcontrols/ar... примеры использования CTabCtrl не создаются окна страниц для Таб контрола, какие здесь могут быть нюансы?