Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поучить Device Context

10K
05 января 2007 года
АлРАД
58 / / 30.08.2006
Привет всем!

Как можно правильно получить Device Context устройства?
 
Код:
LineTo(this->GetDeviceContext(this->Handle) ,100,100);

что здсь не так?

А если такЖ, то почему здесь ошибка:
 
Код:
for (int i=1; i < 10000 ;i++)
        {

                LineTo(this->GetDeviceContext(this->Handle) ,100,100);

        }


Заранее спасибо!
1
05 января 2007 года
kot_
7.3K / / 20.01.2000
Приводите пожалуйста собственно ошибку - как написано - телапаты в отпуске и навсегда.
10K
05 января 2007 года
АлРАД
58 / / 30.08.2006
Project1.exe raised exception class EOutOfResurses with messege "Error creating window Devoice Context" ...

Цитата:
Фсе телепаты в бессрочном отпуске - проблемы описывате словами.



Лучше запустите сами. Вот полный листинг:

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int c = GetTickCount();

        for (int i=1; i < 10000 ;i++)
        {
                LineTo(this->GetDeviceContext(this->Handle) ,100,100);
        }

        Button1->Caption =  GetTickCount() - c;
}
Причем если

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int c = GetTickCount();

        for (int i=1; i < 1000 ;i++)
        {
                LineTo(this->GetDeviceContext(this->Handle) ,100,100);
        }

        Button1->Caption =  GetTickCount() - c;
}


Ошибки нет (хотя код выполняется подозрительно медленнее, чем простой вызов канвас вместо апи lineto):

 
Код:
Canvas->Pen->Color = 0;
                Canvas->MoveTo(0,0);
                Canvas->LineTo(100,100);
309
06 января 2007 года
el scorpio
1.1K / / 19.09.2006
Для API функций не помешало бы добавлять область видимости "::LineTo", просто чтобы не было неопределённости, а то может возникнуть путаница с методами класса.
10K
06 января 2007 года
АлРАД
58 / / 30.08.2006
Цитата:
Для API функций не помешало бы добавлять область видимости "::LineTo", просто чтобы не было неопределённости, а то может возникнуть путаница с методами класса.

так они же не принадлежат ни к какому классу.

что значит область видимости? Они везде видимы... не понимаю

1
07 января 2007 года
kot_
7.3K / / 20.01.2000
Цитата: АлРАД
так они же не принадлежат ни к какому классу.

что значит область видимости? Они везде видимы... не понимаю


Жжошь.

Цитата:
Project1.exe raised exception class EOutOfResurses with messege "Error creating window Devoice Context" ...


Данное исключение генерируется в случае невозможности выделить память под затребованные программой ресурсы. Что вобщем-то вполне нормально - в чем глубинный смысл приведенного кода - только автору известно. Остальной коммент просто опускаю - ввиду первой цитаты. Один хрен, говорить человеку, о том что в среде разработки есть такая штука как отладчик, бесполезно, если базовые понятия языка от него далеки.
З.Ы. Кстати, как легко убедится - ошибка возникает и во втором случае. Достаточно нажать на кнопку более чем ... раза.

1
07 января 2007 года
kot_
7.3K / / 20.01.2000
Как вариант решения проблемы, можно использовать такой:
Цитата:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE DC = this->GetDeviceContext(this->Handle);
int c = GetTickCount();

for (int i=1; i < 10000 ;i++)
{
LineTo( DC,100,100);
}

Button1->Caption = GetTickCount() - c;
ReleaseDC(this->Handle,DC);

}


Правда не понятно наличие цикла - но это видимо какаято фича аффтора.
И закрытие контекста

10K
07 января 2007 года
АлРАД
58 / / 30.08.2006
kot_
Спасибо! Разобрался +
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог