Сбой программы в UpdateWindow при динамическом создании CStatic с SS_OWNERDRAW - PullRequest
0 голосов
/ 18 июня 2019

В диалоге инициализации я динамически создаю элементы управления CStatic в стиле SS_OWNERDRAW. Программа вылетает, когда я делаю эти элементы управления видимыми (WS_VISIBLE или ShowWindow(SW_SHOW)). Стек вызовов показывает, что происходит сбоя метода DrawItem.

Я не знаю почему, потому что в диспетчере ресурсов добавлен контроль изображений, и с ним нет ошибок. Дело в том, что мне нужно создать определенное количество элементов управления в зависимости от количества кадров.

Фрагмент кода:

CStatic* frameWnd = new CStatic;
if(frameWnd->Create(_T("my static"), WS_VISIBLE|WS_CHILD | SS_OWNERDRAW, frameRect, this) != 1)
    MessageBox("Failed!");
m_oaFrames.Add(frameWnd);

Итак, вопрос в следующем: я должен переопределить DrawItem метод для frameWnd или есть другое решение?

1 Ответ

1 голос
/ 18 июня 2019

Чтобы избежать этой проблемы, вы должны создать пользовательский элемент управления и переопределить DrawItem метод, подобный этому:

class CPictureCtrl : public CStatic
{
public:
    CPictureCtrl() {}
    ~CPictureCtrl() {}
protected:
    virtual void PreSubclassWindow()
    {
        CStatic::PreSubclassWindow();
        ModifyStyle(0, SS_OWNERDRAW);
    }
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){}
private:
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...