Доброго времени суток!
Я новичок в программировании как в 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);
И как вы уже догадались — ничего не отрисовывается

Вот собственно вопрос: что я не правильно сделал или чего не доделал?
Здравствуйте, 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"));
Здравствуйте, muk.msk, Вы писали:
Все, разобрался. Надо было посчитать область отображения.
http://www.codeproject.com/KB/tabs/tabviewctrl.aspx вдруг кому пригодится, как раз то, что мне было нужно.
Здравствуйте, muk.msk, Вы писали:
[...]
Глянь
Re[18]: Проблемы с перерисовкой, хотя OnPaint() естьАвтор: BuHHunyx
Дата: 06.05.05
.
PS. Использование форматирования только приветствуется

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>