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

Ваш аккаунт

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

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

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

Не получается задать фон окна

243
15 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Собственно проблема в заголовке. Делаю вот что:
 
Код:
HDC cnt;
cnt=GetDC(win);
SetBkColor(cnt,RGB(255,255,0);
DeleteDC(cnt);
ReleaseDC(win,cnt);

проверял возвращаемое значение всех функций - все говрят что сработали нормально. Пробовал через совместимый контекст, использовал установку режимов фона через SetBkMode - ничего не помогает. В чем бага?
406
15 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by pacific_7
Собственно проблема в заголовке. Делаю вот что:
 
Код:
HDC cnt;
cnt=GetDC(win);
SetBkColor(cnt,RGB(255,255,0);
DeleteDC(cnt);
ReleaseDC(win,cnt);

проверял возвращаемое значение всех функций - все говрят что сработали нормально. Пробовал через совместимый контекст, использовал установку режимов фона через SetBkMode - ничего не помогает. В чем бага?



Вобщето служит другим целям,почитай получше мсдн. А для смены фона используй следующее:

HDC cnt;
cnt=GetDC(win);
HBRUSH bkgfon=CreateSolidBrush(RGB(255,255,0));
SetClassLong(win,GCLP_HBRBACKGROUND,(LONG)bkgfon);
SendMessage(win,WM_ERASEBKGND,(WPARAM)cnt,0);
ReleaseDC(win,cnt);

И да еще че за прикол зачем ты в своем коде за DeleteDC вызываеш ReleaseDC? Для прикола? После GetDC неоходим только ReleaseDC да и то не во всех случаях,вобщем RTFM.

243
15 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by vitaly2003s
Вобщето служит другим целям,почитай получше мсдн.


Видимо с английским проблемы у меня больше, чем мне казалось :( Я еще раз перечитал справку по SetBkColor и не нашел в ней противоречия своим действиям. Н-да. Надо учить инглишь.

Цитата:
Originally posted by vitaly2003s
И да еще че за прикол зачем ты в своем коде за DeleteDC вызываеш ReleaseDC? Для прикола?


А это меня уже глючить стало :D. Вообще - когда-то он удалял совместимый конеткст, а при копировании кода в форум - че-то напутал и скопировл его то же, а затем переправил аргумент ф-ции с comp_cnt на cnt.

Вот по поводу RTFM как раз хотел и спросить :) Где бы их получше взять? Меня самого уже достало это мое попрошайничество, а сам постоянно найти ни как не могу нужной инфы. Ведь вопросы по сути простые. Нужно только знать что и где применить. Я например даже с горя пытался сделать через FillRect и у меня естественно нифига не получилось.
Откуда ваши познания? Из MSDN исключительно, или была какая-то путевая книга по созданию интерфейса на API? У меня есть 2 (PDF), но в них описаны самые примитивные действия - только основы: какие есть окна, как их создавать и т.д. А стоит копнуть поглубже - труба. И в инете ответ далеко не всегда находить получается.

406
15 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by pacific_7
Видимо с английским проблемы у меня больше, чем мне казалось :( Я еще раз перечитал справку по SetBkColor и не нашел в ней противоречия своим действиям. Н-да. Надо учить инглишь.

А это меня уже глючить стало :D. Вообще - когда-то он удалял совместимый конеткст, а при копировании кода в форум - че-то напутал и скопировл его то же, а затем переправил аргумент ф-ции с comp_cnt на cnt.

Вот по поводу RTFM как раз хотел и спросить :) Где бы их получше взять? Меня самого уже достало это мое попрошайничество, а сам постоянно найти ни как не могу нужной инфы. Ведь вопросы по сути простые. Нужно только знать что и где применить. Я например даже с горя пытался сделать через FillRect и у меня естественно нифига не получилось.Откуда ваши познания? Из MSDN исключительно, или была какая-то путевая книга по созданию интерфейса на API? У меня есть 2 (PDF), но в них описаны самые примитивные действия - только основы: какие есть окна, как их создавать и т.д. А стоит копнуть поглубже - труба. И в инете ответ далеко не всегда находить получается.



По поводу SetBkColor
Из MSDN:
Remarks
This function fills the gaps between styled lines drawn using a pen created by the CreatePen function; it does not fill the gaps between styled lines drawn using a pen created by the ExtCreatePen function. The SetBKColor function also sets the background colors for TextOut and ExtTextOut.

Другими словами,здесь конечно этим комментарием не обойдешся нужно получше знать GDI. Короче данная функция используется для задания бэкграунда при использовании некоторых других функции прорисовки в контекст таких как TextOut и других.

По поводу бэкграунда окна вот что говорит MSDN:
The window background is the color or pattern used to fill the client area before a window begins drawing. The window background covers whatever was on the screen before the window was moved there, erasing existing images and preventing the application's new output from being mixed with unrelated information.

The system paints the background for a window or gives the window the opportunity to do so by sending it a WM_ERASEBKGND message when the application calls BeginPaint. If an application does not process the message but passes it to DefWindowProc, the system erases the background by filling it with the pattern in the background brush specified by the window's class. If the brush is not valid or the class has no background brush, the system sets the fErase member in the PAINTSTRUCT structure that BeginPaint returns, but carries out no other action. The application then has a second chance to draw the window background, if necessary.

If it processes WM_ERASEBKGND, the application should use the message's wParam parameter to draw the background. This parameter contains a handle to the display device context for the window. After drawing the background, the application should return a nonzero value. This ensures that BeginPaint does not erroneously set the fErase member of the PAINTSTRUCT structure to a nonzero value (indicating the background should be erased) when the application processes the subsequent WM_PAINT message.

An application can define a class background brush by assigning a brush handle or a system color value to the hbrBackground member of the WNDCLASS structure when registering the class with the RegisterClass function. The GetStockObject or CreateSolidBrush function can be used to create a brush handle. A system color value can be one of those defined for the SetSysColors function. (The value must be increased by one before it is assigned to the member.)

An application can process the WM_ERASEBKGND message even though a class background brush is defined. This is typical in applications that enable the user to change the window background color or pattern for a specified window without affecting other windows in the class. In such cases, the application must not pass the message to DefWindowProc.

It is not necessary for an application to align brushes, because the system draws the brush using the window origin as the point of reference. Given this, the user can move the window without affecting the alignment of pattern brushes.

По поводу литературы - не знаю,у самого был только MSDN и лиш мои пробы и ошибки с чистым апи и штудирование мсдн по каждой конкретной применяемой мной win32 api функции дали мне многие знания в этой области.Так что лучше MSDN литературы нет.

243
15 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Короче, путь проб и ошибок на данный момент самый кратчайший. Только он и опыт - то что ни как не дается сразу.
Спасибо, будем работать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог