Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как установить Transparent для Static? 
V
    Опции темы
maq
Дата 22.1.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как установить свойство Transparent для Static?

Property Window не помогло.
PM MAIL   Вверх
Dreamer_0x01
Дата 22.1.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



А если получить указатель на СStatic и сделать ModifyStyle() и ModifyStyleEx() ?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
maq
Дата 31.1.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вся проблема в том, что я не могу создать эту переменную - указатель на СStatic.

"Cannot add member variable to a control with ID IDC_STATIC"

Почему?
PM MAIL   Вверх
sfdev
Дата 1.2.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Как установить свойство Transparent для Static?

Property Window не помогло.

Можно попробовать сделать наследника от CStatic, в котором обрабатывать WM_PAINT, а там написать SetBkMode(TRANSPARENT) и рисовать нужный текст. А потом засабкласить твой статик в диалоге.

Цитата

Вся проблема в том, что я не могу создать эту переменную - указатель на СStatic.

"Cannot add member variable to a control with ID IDC_STATIC"

Почему?


FROM MSDN:

NOTE: Adding a static control in the Visual C++ 6.0 and Visual C++ .NET designers generates a default ID of IDC_STATIC for the control. The Dialog Editor does not permit you to associate a member variable with a control with the ID of IDC_STATIC. Change the ID of the static control in the Properties window to an ID that is defined by your application so that you can add a member variable of type CStatic to the dialog class.
PM MAIL   Вверх
maq
Дата 1.2.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Так создал переменную для CStatic - m_static1.

Но вот в OnPaint m_static1.ModifyStyleEx(NULL, WS_EX_TRANSPARENT) возвращает 1. Но никакого эффекта.

Неужели нельзя как-то иначе (без субклассинга), с использованием переменной CStatic задать эффект TRANSPARENT?
PM MAIL   Вверх
maq
Дата 7.2.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Перефразирую вопрос:

субклассировать и т.д. - это можно. Но в смогу ли я в DesignTime на CDialog увидеть CStatic? Очевидно, что нет.

Если я не могу видеть CStatic в DesignTime, то я бы просто использовал бы TextOut, задав координаты.

Вопрос в том чтобы в DesignTime видеть расположение CStatic на CDialog. А TRANSPARENT можно задать в коде.

Интересно, а как это делается на VB 6? Ведь там в DesignTime элементу управления Label (CStatic) уже на форме можно задать свойство TRANSPARENT и оно работает!
PM MAIL   Вверх
AlexPro
Дата 7.2.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 3
Всего: 4



Цитата(maq @ 7.2.2006, 09:40 Найти цитируемый пост)

Но в смогу ли я в DesignTime на CDialog увидеть CStatic? Очевидно, что нет

Почему нет? Кидаешь Static Text на свой диалог, меняешь его ID на что-нибуть вразумительное (т.к. через IDC_STATIC ты не сможешь пользоваться им в программе), кликаешь по элементу правой кнопкой - выбираешь Add Variable - и используешь как тебе понравится. Последний пункт необязательный - можно получить доступ через GetDlgItem, но так удобнее. Или я чего недопонимаю?
PM MAIL   Вверх
Coocky
Дата 7.2.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(maq @ 31.1.2006, 21:05 Найти цитируемый пост)

"Cannot add member variable to a control with ID IDC_STATIC

smile
IDC_STATIC==0 Всегда
Поменяй ID и будет тебе счастье smile
CWnd*static=GetDlgItem(IDC_STATIC1)
Добавлено @ 15:36
Цитата(maq @ 22.1.2006, 14:55 Найти цитируемый пост)

Как установить свойство Transparent для Static?

Property Window не помогло.

Помогло, помогло..Ты просто не знаешь, что ты хочешь..Какой ,ты думаешь эффект получить? smile



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
maq
Дата 8.2.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Поменяй ID и будет тебе счастье

ID для CStatic я поменял (например, IDC_STATIC_1), переменную создал.

Не могу просто убрать задний фон у CStatic (т.е. убрать фон у прямоугольника CStatic-а), так чтобы виден был текст CStatic, а между буквами видно, скажем, окно (например, CDialog), на котором оно находится. Это я и называю TRANSPARENT BACKGROUND.

Вот этот эффект я и хочу получить (как в VB 6).
PM MAIL   Вверх
Coocky
Дата 8.2.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Не получится.... smile
Нужно самому делать руцями..
Цитата(maq @ 8.2.2006, 09:18 Найти цитируемый пост)

Не могу просто убрать задний фон у CStatic (т.е. убрать фон у прямоугольника CStatic-а), так чтобы виден был текст CStatic, а между буквами видно, скажем, окно (например, CDialog), на котором оно находится. Это я и называю TRANSPARENT BACKGROUND.

Читаем мануал-
"WS_EX_TRANPARENT это означает создать прозрачное окно, а именно-любые окна ТОГО же уровня,накрываемые этим окном, ПОЛУЧАТ сообщения WM_PAINT в ПЕРВУЮ ОЧЕРЕДЬ-тем самым создавая эффект прозрачности smile " Понял?
А тебе нужно руками рисовать smile Никто за тебя ничего отсекать не будет. У тебя фон нестандартный внизу? Правильно, Ты долже сам создать.



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
maq
Дата 8.2.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

А тебе нужно руками рисовать  Никто за тебя ничего отсекать не будет. У тебя фон нестандартный внизу? Правильно, Ты долже сам создать.

Это я и пытался сделать с самого начала... типа (пишу по-памяти):

Код

//CStatic text  = ""
//pDC = указатель на DC CStatic
//m_static = переменная CStatic
//pDC->SetBkMode(TRANSPARENT);

pDC->BeginPath();
pDC->TextOut(_T("Text Label"));
pDC->EndPath();
HRGN hRgn = PathToRegion(m_static.m_hWnd, pDC->m_hdc);
::SetWindowRgn(m_static.m_hWnd, hRgn);


но опять ничего. (Хотя в VB 6 этот вариант отлично работает! правда для окна пробовал)

Потом пытался скопировать фон под CStatic с помощью BltBit из DC окна в DC CStatic. Тоже ничего.
PM MAIL   Вверх
Coocky
Дата 8.2.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Что тебе конкретно нужно сделать?
Сделать цветной текст на цветном фоне диалога?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
maq
Дата 8.2.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Обычный текст на градиентном фоне окна.

Фон окну я дал, а фон CStatic мешает
PM MAIL   Вверх
Aveic
Дата 10.2.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.2.2006
Где: Да все мы из одно й ямы

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



я конечно знаю, что все это тема уже надоела, но может maq лучше сделать так. Зачем тебе создавать целый элемент CStatic, в котором ты просто хочешь отобразить текст в фиксированной позиции. Может просто заместить в твоем диалоге функциюю OnPaint() и там в нем нарисовать текст, установим перед этим прозрачность. А?
Код

CMyDialog::OnPaint()
{
//.....
dc.SetBkMode(TRANSPARENT);
dc.TexOut(100,100,"Hello,world!");
}

А...
Я незнаю, мож я неправ
PM MAIL ICQ   Вверх
Coocky
Дата 13.2.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(maq @ 8.2.2006, 16:46 Найти цитируемый пост)
Фон окну я дал, а фон CStatic мешает

Дык надо проавильный тип статика использовать. В твоем случае подойдет только статитческий текст.
Просто в методе ОnPaint() твоего статика нужно отрисовывать с dc.SetBkMode(TRANSPARENT);
Код

CMyStatic::OnPaint()
{
//.....
CString text;
GetWindowText(text);
dc.SetBkMode(TRANSPARENT);
dc.TexOut(5,5,&text);
}






--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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