Использование CTabCtrl
От: muk.msk  
Дата: 20.01.08 14:24
Оценка:
Доброго времени суток!
Я новичок в программировании как в WTL так и интерфейса windows программ. Искал пример использования CTabCtrl в WTL, поподались примеры использующие диалоговые ресурсы. Но мне бы не хотелось их использовать. Для этого я сделал свой CTabPage класс.

class CTabPage :
public CWindowImpl<CTabPage>
{
public:
CTabPage();
~CTabPage();

DECLARE_WND_CLASS(_T("CTabPage"))

BEGIN_MSG_MAP(CTabPage)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()

// Handler prototypes:
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
BOOL PreTranslateMessage(MSG* pMsg);
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
};

В нем ничего нет. Он мне нужен для имитации диалоговой страницы. В CMainFrame::OnCreate делаю следующее:
RECT rcTabCtrl;
this->GetClientRect(&rcTabCtrl);
m_TabCtrl.Create(m_hWnd, &rcTabCtrl, NULL, WS_CHILD | WS_VISIBLE); // CTabCtrl m_TabCtrl

m_Page1.Create(m_cTabView, rcDefault, 0, WS_CHILD | WS_VISIBLE); // CTabPage m_Page1;

RECT rcB = {5,5,100,100};
m_TreeView.Create(m_Page1, &rcB, NULL, WS_CHILD | WS_VISIBLE | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS); // CTreeViewEx m_TreeView;
m_TreeView.SetFont((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
HTREEITEM hRoot, hItem;
hRoot = m_TreeView.InsertItem(_T("Root1"), 0, 0, TVI_ROOT, TVI_LAST);
hItem = m_TreeView.InsertItem(_T("Item1"), 2, 2, hRoot, TVI_LAST);
hItem = m_TreeView.InsertItem(_T("Item2"), 2, 2, hRoot, TVI_LAST);

m_hWndClient = m_TabCtrl;
m_Page1.ShowWindow(SW_SHOW);

И как вы уже догадались — ничего не отрисовывается Вот собственно вопрос: что я не правильно сделал или чего не доделал?
Re: Использование CTabCtrl
От: muk.msk  
Дата: 20.01.08 14:34
Оценка:
Здравствуйте, muk.msk, Вы писали:

MM>Доброго времени суток!

MM>Я новичок в программировании как в WTL так и интерфейса windows программ. Искал пример использования CTabCtrl в WTL, поподались примеры использующие диалоговые ресурсы. Но мне бы не хотелось их использовать. Для этого я сделал свой CTabPage класс.

MM>class CTabPage :

MM> public CWindowImpl<CTabPage>
MM>{
MM>public:
MM> CTabPage();
MM> ~CTabPage();

MM> DECLARE_WND_CLASS(_T("CTabPage"))


MM> BEGIN_MSG_MAP(CTabPage)

MM> MESSAGE_HANDLER(WM_PAINT, OnPaint)
MM> END_MSG_MAP()

MM> // Handler prototypes:

MM> // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
MM> // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
MM> // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
MM> BOOL PreTranslateMessage(MSG* pMsg);
MM> LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
MM>};

MM>В нем ничего нет. Он мне нужен для имитации диалоговой страницы. В CMainFrame::OnCreate делаю следующее:

MM>RECT rcTabCtrl;
this->>GetClientRect(&rcTabCtrl);
MM>m_TabCtrl.Create(m_hWnd, &rcTabCtrl, NULL, WS_CHILD | WS_VISIBLE); // CTabCtrl m_TabCtrl

MM>m_Page1.Create(m_cTabView, rcDefault, 0, WS_CHILD | WS_VISIBLE); // CTabPage m_Page1;


MM>RECT rcB = {5,5,100,100};

MM>m_TreeView.Create(m_Page1, &rcB, NULL, WS_CHILD | WS_VISIBLE | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS); // CTreeViewEx m_TreeView;
MM>m_TreeView.SetFont((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
MM>HTREEITEM hRoot, hItem;
MM>hRoot = m_TreeView.InsertItem(_T("Root1"), 0, 0, TVI_ROOT, TVI_LAST);
MM>hItem = m_TreeView.InsertItem(_T("Item1"), 2, 2, hRoot, TVI_LAST);
MM>hItem = m_TreeView.InsertItem(_T("Item2"), 2, 2, hRoot, TVI_LAST);

MM>m_hWndClient = m_TabCtrl;

MM>m_Page1.ShowWindow(SW_SHOW);

MM>И как вы уже догадались — ничего не отрисовывается Вот собственно вопрос: что я не правильно сделал или чего не доделал?


Да, пропустил строчку m_TabCtrl.InsertItem(0, _T("Page1"));
Re: Использование CTabCtrl
От: muk.msk  
Дата: 21.01.08 08:05
Оценка:
Здравствуйте, muk.msk, Вы писали:

Все, разобрался. Надо было посчитать область отображения.
http://www.codeproject.com/KB/tabs/tabviewctrl.aspx вдруг кому пригодится, как раз то, что мне было нужно.
Re[2]: Использование CTabCtrl
От: BuHHunyx Беларусь  
Дата: 21.01.08 09:33
Оценка:
Здравствуйте, muk.msk, Вы писали:

[...]

Глянь Re[18]: Проблемы с перерисовкой, хотя OnPaint() есть
Автор: BuHHunyx
Дата: 06.05.05
.

PS. Использование форматирования только приветствуется
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.