Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2015, 15:53   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию WM_CTLCOLORSTATIC не перекрашивает

Код:

function CreateLabelEx(var handle:hwnd; const owner:hwnd; const caption:string;
             const x,y,w,h:integer; const wrap,notify: boolean):boolean;
const
SS_NOWORDWRAP = $00000400;
var
style : dword;
begin
  style := WS_CHILD or WS_VISIBLE or SS_WORDELLIPSIS;
  if notify then
  style := style or SS_NOTIFY;
  if not wrap then
  style := style or SS_NOWORDWRAP;

  handle := CreateWindowex(ws_ex_clientedge,pchar('Static'),pchar(caption),
                            style, x,y,w,h, owner,0, hInstance, nil);
result := handle>0;
end;

    WM_CTLCOLORSTATIC:
    if (Lpar = lab_HEX) or (Lpar = lab_ascii) then
    begin
      SetBkColor(Wpar, RGB(0,0,0));
      SetTextColor(Wpar, RGB(255,0,255));
      Result:= BLACK_BRUSH;
      Exit;
    end;

    WM_CREATE:
    begin
      CreateLabelEx(lab_ascii, wnd, 'ASCII:', 4,18,44,20, False,False);
      CreateEditEx(editASCII, wnd, 0, '0', 60,18,40,20);
      CreateLabelEx(lab_HEX, wnd,'hex: $', 4, 40, 44, 20,False,False);
      CreateEditEx(editHEX, wnd, 0, '40', 60,40,40,20);
    end;
чуваки, я туплю. WM_CTLCOLORSTATIC приходит и условие срабатывает, но ничего не перекрашивается. Почему?
BLACK_RAIN вне форума Ответить с цитированием
Старый 13.11.2015, 15:57   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Result должен быть хэндлом кисти, а не ее константой от GetStockObject.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.11.2015, 16:01   #3
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Filka вне форума Ответить с цитированием
Старый 13.11.2015, 16:20   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Result должен быть хэндлом кисти, а не ее константой от GetStockObject.
Вот я идиот. *_BRUSH это же не кисти
BLACK_RAIN вне форума Ответить с цитированием
Старый 13.11.2015, 16:41   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это идентификатор кисти
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.11.2015, 08:26   #6
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

кстати, почему тогда в WM_CREATE
Код:

      SetClassLong(wnd,GCL_HBRBACKGROUND,BLACK_BRUSH);
в старом проекте работает и красит главное окно в чёрный цвет, а в новом, который я сейчас начал, красит в какой-то бледно-серо-розовый?
Там же тоже кисть нужна, но почему-то в старом проекте и так работает.
BLACK_RAIN вне форума Ответить с цитированием
Старый 14.11.2015, 09:35   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Что-то я сомневаюсь, что в старом проекте именно так и написано...
Там должен быть либо настоящий HBRUSH или константа COLOR_XXX + 1

Смотрите GetStockObject()
waleri вне форума Ответить с цитированием
Старый 14.11.2015, 11:05   #8
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Что-то я сомневаюсь, что в старом проекте именно так и написано...
Написано именно так
BLACK_RAIN вне форума Ответить с цитированием
Старый 14.11.2015, 12:52   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что звезды так сложились.
делайте как положено, а не как пятка захотела.

тогда не будет таких вопросов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про WM_CTLCOLORSTATIC yngwie Win Api 0 01.03.2009 14:34