CMFCButton со стилем Vista

Вы не должны писать абсолютно новый контейнерный класс. Можно придерживаться контейнеров STL, но изменить второй параметр, например std::vector, чтобы дать ему пользовательское средство выделения, которое выделяет от буфера стека. Авторы хрома записали средство выделения только для этого:

https://chromium.googlesource.com/chromium/chromium / +/master/base/stack_container.h

Это работает путем выделения буфера, где Вы говорите, насколько большой это. Вы создаете контейнер и вызов container.reserve(buffer_size);. При переполнении того размера средство выделения автоматически получит элементы от "кучи" (так как это получено от std::allocator, это будет в этом случае просто использовать средства стандартного средства выделения). Я не попробовал его, но похоже, что это от Google, таким образом, я думаю, что это стоит попытки.

Использование похоже на это:

StackVector s;
s->push_back(42); // overloaded operator->
s->push_back(43);

// to get the real std::vector. 
StackVector::ContainerType & v = s.container();
std::cout << v[0] << " " << v[1] << std::endl;

5
задан djeidot 23 September 2009 в 13:08
поделиться

1 ответ

CMFCButton имеет BS_OWNERDRAW , установленный по умолчанию - вы можете удалить его в OnInitDialog () для вашего диалога:

mfcButton.ModifyStyle(BS_OWNERDRAW, 0, 0);

Однако удаление стиля рисования владельца приводит к тому, что многие методы CMFCButton становятся бесполезными (например, SetTextColor ). Вы можете настроить рендеринг кнопки с использованием текущей темы Windows, настроив визуальный менеджер:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

Это делается вместо ModifyStyle выше, в результате чего кнопки соответствуют стилю по умолчанию, но все еще имеют более новый функции рендеринга.

8
ответ дан 14 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: