Добрый вечер.
Прошу сильно не пинать ногами -- на C++ не писал уже несколько лет, WTL кручу второй день .)
Дано: пример "Hello, WTL!" отсюда
http://rsdn.ru/article/wtl/wtl-1.xmlАвтор(ы): Александр Шаргин
Дата: 21.04.2001
Первая часть статьи посвящена основам WTL. Автор даёт краткий обзор WTL, описывает процесс её установки, а затем объясняет базовые средства поддержки оконного интерфейса: иерархию оконных классов, циклы сообщений и карты сообщений.
Задача: Надо по всей клиентской части окна нарисовать простой CListViewCtrl (для начала, в перспективе его неплохо бы еще сделать "виртуальным"). Делаю так:
#include <atlbase.h>
#include <atlapp.h>
extern CAppModule _Module;
#include <atlwin.h>
#include <atlgdi.h>
#include <atlmisc.h>
#include <atlctrls.h>
CAppModule _Module;
class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
{
// Карта сообщений направляет сообщения в нужные обработчики.
BEGIN_MSG_MAP(CMainWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()
CListViewCtrl m_lvMain;
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
//MessageBox(_T("Hello!"));
m_lvMain.Create(m_hWnd, rcDefault, NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS,
WS_EX_CLIENTEDGE);
//m_lvMain.SetExtendedListViewStyle(LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT);
m_lvMain.InsertColumn(0, "Column", LVCFMT_LEFT, 200);
m_lvMain.InsertItem(0, "Hello");
return 0;
}
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
PostQuitMessage(0);
return 0;
}
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
AtlInitCommonControls(ICC_LISTVIEW_CLASSES);
// Инициализируем модуль
_Module.Init(0, hInstance, 0);
// Создаём главное окно приложения.
CMainWindow wnd;
wnd.Create(NULL, CWindow::rcDefault, "CListViewCtrl");
wnd.ShowWindow(SW_SHOW);
// Запускаем цикл сообщений
CMessageLoop loop;
int res = loop.Run();
// Завершаем программу.
_Module.Term();
return res;
}
Результат нулевой -- пустое окно (либо пустой list view, не понятно). Что я делаю не так?
Благодарю за ответ.
Извиняюсь за беспокойство, разобрался. Оказалось, надо не rcDefault использовать а нормальный "прямоугольник".