Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Static с измененным цветом фона, WinApi 
V
    Опции темы
devmstr
Дата 18.12.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Я меняю цвет формы. И мне необходимо сделать так, что бы м цвет фона Staticа был таким же.
Обрабатываю WM_CTLCOLORSTATIC. Но не помогает(фон меняется на Statice только там, где нет текста. Как мне решить данную проблему).
Код
#include <windows.h>

LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar);

HWND hLbl;

HBRUSH br;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInt, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wnd;
    ZeroMemory(&wnd, sizeof(wnd));
    
    br = (HBRUSH)CreateSolidBrush((RGB(10,255, 255)));
    wnd.hbrBackground    = br;
    wnd.hCursor            = LoadCursor(NULL, IDC_ARROW);
    wnd.hInstance        = hInst;
    wnd.lpfnWndProc        = WndProc;
    wnd.lpszClassName    = "App";
    wnd.lpszMenuName    = NULL;
    wnd.style            = CS_HREDRAW|CS_VREDRAW;

    RegisterClass(&wnd);
    HWND hWnd = CreateWindow("App", "App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL);
    hLbl      = CreateWindowEx(WS_EX_TRANSPARENT,"Static", "New Text", WS_CHILD|WS_VISIBLE, 10, 20, 300, 25,hWnd, NULL, hInst, NULL);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    MSG msg;
    while (GetMessage(&msg, 0, NULL, NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.lParam;

}

LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)
{
    switch(msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_CTLCOLORSTATIC:
        return (LRESULT)br;
    default:
        return DefWindowProc(hWnd, msg, wPar, lPar);
    }
    return 0;
}



--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Fixin
Дата 18.12.2005, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Сделай InvalidateRect(hLbl, NULL, TRUE);
PM MAIL ICQ   Вверх
Aleksandor
Дата 18.12.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 10
Всего: 12



Для текста можно попробовать SetBkColor
Код

      SetBkColor((HDC)wParam, cColor); // RGB
      UnrealizeObject(hBrush);
      SetBrushOrgEx((HDC)wParam, 0, 0, NULL);
      return (DWORD)hBrush;



--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Fixin
Дата 18.12.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



И еще - браш удалять надо, если создан был.
PM MAIL ICQ   Вверх
Fixin
Дата 18.12.2005, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Aleksandor Тоже не катит...
Добавлено @ 22:07
А не, ошибочка вышла:
Код
case WM_CTLCOLORSTATIC:
            SetBkColor((HDC)wParam, RGB(10,255, 255));
            return (LRESULT)br;

PM MAIL ICQ   Вверх
devmstr
Дата 27.12.2005, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Больщое спаибо за помощь! Вопрос решен.


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
Дата 4.1.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Все было замечательно пока я не включил стндартный стиль WinXp. Цвет фона под компонентом отличается от стандартного. Как это побороть?

Мой код.
Код

case WM_CTLCOLORSTATIC:
        if (GetDlgItem(hDlg, IDC_SDEMAIL) == (HWND)lPar||GetDlgItem(hDlg, IDC_SDHOMEPAGE) == (HWND)lPar)
        {
            SetTextColor((HDC)wPar, RGB(0, 0, 255));
            return (LRESULT)CreateSolidBrush(RGB(0, 0, 255));
        }


Это сообщение отредактировал(а) devmstr - 4.1.2006, 09:32


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Aleksandor
Дата 4.1.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 10
Всего: 12



Может вобще запретить стили для этих контролов?
SetWindowTheme (hwndStatic, TEXT (" "), TEXT (" "));


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
Fixin
Дата 4.1.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Цитата(devmstr @ 4.1.2006, 10:29 Найти цитируемый пост)

Цвет фона под компонентом отличается от стандартного.

Не въехал. Прицепи картинку.
Добавлено @ 15:32
Цитата(devmstr @ 4.1.2006, 10:29 Найти цитируемый пост)

SetTextColor((HDC)wPar, RGB(0, 0, 255));

Так ты же цвет текста задаешь, а цвет фона вообще не трогаешь.
PM MAIL ICQ   Вверх
devmstr
Дата 4.1.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Вот кусок скриншота
user posted image


Добавлено @ 17:39
Вот кидаю прямо программу. Это очень легкие часы 56Kb с календарем.
Глюк можно посмотреть при включенном по-умолчанию стиле WinXp.
Правой кнопкой щелкаем по часам - О программе.
Вот прямая ссылка
NanoTime
Вот ссылка на сайт(почитать о часах)
сайт

Это сообщение отредактировал(а) devmstr - 4.1.2006, 17:40


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
Дата 4.1.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Кстати теперь глюк проявляется и при классическом стиле. Фон Static просто белый...



--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Fixin
Дата 4.1.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Поставь этим статикам стиль SetBkMode(DC, TRANSPARENT);
PM MAIL ICQ   Вверх
devmstr
Дата 4.1.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Савлю
Код

 SetBkMode((HDC)wPar, TRANSPARENT)

и получаю полосу синего цвета, на которой естественно не виден синий текст...
Проблема сейчас уже несколько иная, чем в заголовке сообщения. Цвет диалога стандартный и проблема в том, что цвет фона под моим статиком от этого стандартного цвета отличается(фон под Static былый...)


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Fixin
Дата 4.1.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Цитата(devmstr @ 4.1.2006, 10:29 Найти цитируемый пост)

return (LRESULT)CreateSolidBrush(RGB(0, 0, 255));        

Возвращай NULL
Добавлено @ 19:35
Нет, это ошибка.
Добавлено @ 19:38
Код

case WM_CTLCOLORSTATIC:
            SetBkMode((HDC)wParam, TRANSPARENT);
            SetTextColor((HDC)wParam, RGB(0,0, 255));
            return (LRESULT)(GetStockObject(NULL_BRUSH));

Добавлено @ 19:41
Подключись по аське, тут глюки есть smile
PM MAIL ICQ   Вверх
devmstr
Дата 4.1.2006, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Громадное спасибо всем, особенно Fixin за оказанное внимание и помощь!
Проблема решилась. Вот:
Код

SetTextColor((HDC)wParam, RGB(0, 0, 255));
            SetBkMode((HDC)wParam, TRANSPARENT);
            return (LONG)CreateSolidBrush(GetSysColor(COLOR_3DFACE));



--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.