CListViewCtrl
От: klis  
Дата: 21.10.09 13:08
Оценка:
Добрый вечер.
Прошу сильно не пинать ногами -- на 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, не понятно). Что я делаю не так?
Благодарю за ответ.
Re: CListViewCtrl
От: klis  
Дата: 21.10.09 13:41
Оценка:
Извиняюсь за беспокойство, разобрался. Оказалось, надо не rcDefault использовать а нормальный "прямоугольник".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.