Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   создание BRUSH в С++ WinAPI (http://forum.oszone.net/showthread.php?t=67119)

Vlad Drakula 11-06-2006 18:48 449527

создание BRUSH в С++ WinAPI
 
обнаружил следующую проблему:

если в цикле присваивать переменной цикла значение которое получено с помощью макроса "color" то в приложении обязательно случается глюк... и причем именно из за этого...

из-за чего такое происходит???

dmitryst 12-06-2006 14:27 449731

Vlad Drakula Может, орфографию поправить? ;)

Vlad Drakula 12-06-2006 14:35 449736

dmitryst
а вы аответ знаете на мой вопрос?

dmitryst 12-06-2006 14:40 449738

Vlad Drakula Вообще-то, я и вопрос не совсем понял :tease: . Кто есть "color", как вы получаете от него какое-то значение? И для чего именно так?

Vlad Drakula 12-06-2006 14:56 449745

dmitryst
вот такой код:
HBRUSH brush = CreateSolidBrush(RGB(0, 0, 0));

ivank 12-06-2006 17:33 449776

Ты не забываешь, потом ненужные кисти удалить?

dmitryst 12-06-2006 17:48 449782

ivank А, точно! Хотя, они ж вроде, сами должны destructe?

ivank 12-06-2006 21:43 449824

http://msdn.microsoft.com/library/de...solidbrush.asp
Цитата:

When you no longer need the brush, call the DeleteObject function to delete it.

Vlad Drakula 13-06-2006 15:40 450096

ivank
а вот нам не один из преподов не разу не сказал что его еще и удалять нужно...

dmitryst 13-06-2006 16:31 450131

Vlad Drakula
Цитата:

а вот нам не один из преподов не разу не сказал что его еще и удалять нужно...
:laugh: Серьёзно? А я это еще в какой-то древней книжке по С читал, но почему-то помню, что в С++ кисти удаляются при создании новой кисти автоматически. И что, помогло? Работает?

Vlad Drakula 13-06-2006 16:43 450140

dmitryst
Цитата:

Серьёзно?
да!
Цитата:

А я это еще в какой-то древней книжке по С читал, но почему-то помню, что в С++ кисти удаляются при создании новой кисти автоматически. И что, помогло? Работает?
теоретически наверное быть этого не может... т.к. скорее всего там выделяется память, а удалить ее можно только если получить значение этой переменной, а в функцию она не передается, значит и очистить память не возможно!

dmitryst 13-06-2006 17:13 450155

Vlad Drakula Не зря в PERL придумали "сборку мусора" :), убирать за ленивыми программистами :). В итоге, у вас заработало как надо?

Vlad Drakula 13-06-2006 17:46 450174

dmitryst
Цитата:

В итоге, у вас заработало как надо?
да, я просто теперь из все инициализирую пи загрузке приложения...

Цитата:

Не зря в PERL придумали "сборку мусора" , убирать за ленивыми программистами .
по моему это ввели замного до появления этого языка... и не только в нем... ктомуже есть компромис между скоростью и требования к уровню програмиста...

dmitryst 13-06-2006 18:09 450183

Vlad Drakula Про "мусор" - это к удобству работы. Но, конечно, правильнее - выделить память под ресурс, создать ресурс, удалить ресурс и освободить память. Ручками. Ну да ладно, главное - заработало, с чем и поздравляю. :)

pva 15-06-2006 19:10 451107

Тов. программеры, не путайте библиотеки высокого уровня с WinAPI. Первые всё за собой чистят, и делают правильно, вторые - быстро. Лично я сторонник чистки мусора в деструкторе (I LOVE C++). Кисти автоматически удаляются в VCL но не WinAPI. Пример:
Код:

// всегда будет работать правильно
class TBrush
{
  HBRUSH fhandle;
  TBrush(const TBrush&);
public:
  TBrush(int color=0) : fhandle(CreateSolidBrush(color))
  {
  }

  ~TBrush()
  {
    DeleteObject(fhandle);
  }

  void operator=(int color)
  {
    DeleteObject(fhandle);
    fhandle = CreateSolidBrush(color);
  }
}



Время: 12:45.

Время: 12:45.
© OSzone.net 2001-