Обрисую ситуацию:
Есть класс списка, у которого для прорисовки каждой строки вызывается примерно такой код:
[quote]
...
CBitmap bmpSrc;
if (bmpSrc.CreateCompatibleBitmap(&dc, bitmap.bmWidth,
bitmap.bmHeight) == FALSE)
{
TRACE("ОШИБКА: CompatibleBitmap не создан");
return;
};
...
[/quote]
То есть при прорисовке строки каждый раз создается CompatibleBitmap.
Как возникает глюк:
Запускаю прогу, начинаю ездить по списку туда-сюда, взад-вперед, вверх, вниз, из конца, в начало, и снова туда-сюда, взад-вперед, ...
Ездю, ездю, и вдруг, в Output вижу эту чертову строку. Самое смешное, что первое время езденья, достаточно долгое, она не появляется.
Подробности:
Ездить приходится достаточно долго, но гораздо меньше, чем обычно ездят по спискам во время юзанья проги. По ощущениям, раз 1000 приходится перерисовывать строки в списке, то есть раз 1000 создается CompatibleBitmap. под XP никаких проблем не возникает, данная проблема возникает только под w98. Такое ощущение, что в ней ограничено число созданий CompatibleBitmap. В параметрах к Create поступает обычный контекст рисования. Когда возникает ошибка, специльно проверил: требуемая величина битмапа 14x14 пикселей (поступает в параметрах к Create). GetLastError() возвращает 0 (Это Вам не XP, а w98). Все, что сказано в MSDN — что размер битмапа не может превышать 16мб. А GetLastErorr под w98 ничерта не возвращает. Вот и не знаю, что тут делать. Может кто встречался с подобной ситуацией, разъяснит, как починить?
Делать Create в каждом рисовании есть большая необходимость. Кто-то может сказать — создай в конструкторе контрола, и не создавай каждый раз при рисовании строки. Дак вот, хотелось бы все-таки создавать каждый раз при рисовании строки.