Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Прозрачный STATIC текст

Ответить
Настройки темы
Win32 API - Прозрачный STATIC текст

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здраствуйте. Привожу сразу все исходные данные.

Код: Выделить весь код
program test;

{$R test.res}

uses
  Windows,
  Messages,
  ShellAPI;

const
  MAIN_DIALOG  = 101;
  ABOUT_DIALOG = 102;
  MAIN_ABOUT = 104;
  ABOUT_CLOSE  = 105;
var
  Inst,
  HWND : integer;

procedure AboutDlgInit;
begin
end;

function AboutDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_COMMAND    : begin
                      if wParam = ABOUT_CLOSE then EndDialog(hWin,0);
                      if wParam = WM_COMMAND then EndDialog(hWin,0);
                    end;
    WM_INITDIALOG : begin
                      AboutDlgInit;
                    end;
    WM_DESTROY    : begin
                      EndDialog(hWin,0);
                    end;
    WM_CLOSE      : begin
                      EndDialog(hWin,0);
                    end;
  end;
end;

procedure MainDlgInit;
begin
end;

function MainDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall;
begin
   case uMsg of
    WM_COMMAND : begin
                   if wParam = MAIN_ABOUT then DialogBoxParam(Inst, PChar(ABOUT_DIALOG), hWin, @AboutDlgProc, 0);
                   if wParam = WM_COMMAND then EndDialog(hWin,0);
                 end;
    WM_DESTROY : begin
                   EndDialog(hWin,0);
                 end;
    WM_CLOSE   : begin
                   EndDialog(hWin,0);
                 end;
   end;
  end;

begin
  Inst := hInstance; DialogBoxParam(Inst, PChar(MAIN_DIALOG), 0, @MainDlgProc, 0);
end.
Вопрос: Как можно в Эбаут диалоге создать статичесий текст с прозрачным фоном? Желательно при наведении на этот текст, цвет текста становился синим цветом и курсор менялся на ладонь с указывающим пальцем - хочу сделать гиперссылку. Знаю что надо использовать функцию CreateWindowsEx, но как правильно? Напишите сразу полный текст исходника, если вас не затруднит.

Отправлено: 23:49, 17-07-2007

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата Maksim V:
статичесий текст с прозрачным фоном?
...это как интересно??Можно конкретнее??

Например,можно скомпилировать такой ресурс:
Код: Выделить весь код
AboutBox DIALOGEX 15, 15, 130, 75
STYLE    WS_VISIBLE + WS_POPUP + WS_CAPTION
CAPTION  "About SDInterruptionEx..."
FONT     11, "Times new roman"

BEGIN
 LTEXT         "SafeDisc Interruption Extended" -1, 5, 12, 130, 8
 LTEXT         "Coded in TASM32" -1, 5, 24, 130, 8
 LTEXT         "          by DillerInc" -1, 25, 36, 130, 8
 DEFPUSHBUTTON "OK" IDOK, 44, 55, 40, 12, WS_GROUP + BS_VCENTER + BS_CENTER
END
...вот вам и статический текст в окне "About".

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 00:21, 18-07-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Тут проблема упирается в прозрачный фон. То есть если я наложу ресурс static на картинку в диалоге, то от статика будет поле, которое мне не нужно. Тупо нужен прозрачный фон. Примеров в инете мало и в основном предлагают как-то юзать transparent. Только куда его тут использовать?

Отправлено: 01:09, 18-07-2007 | #3


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Maksim V
Ну,скомпилируйте ресурс и посмотрите.Разве в скрипте где-то упоминается про static??
Иначе я не понимаю,о чём идёт речь.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 02:02, 18-07-2007 | #4


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar test.rar
(1.4 Kb, 8 просмотров)

вообщем статический текст расположен на рисунке. но фон текста не прозрачный. из-за этого видно след на битмапе. что можно придумать?

Отправлено: 03:11, 18-07-2007 | #5


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Maksim V
Попробуй разместить свой статический текст не в ресурсе,а создать его с помощью функции CreateWindowEx во время обработки сообщения WM_INITDIALOG.Первым параметром функции тогда должен быть WS_EX_TRANSPARENT.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 22:00, 18-07-2007 | #6


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подправьте пожалуйста мой исходник. Мне все таки так будет яснее (я все таки начинающий и мне легче когда на примере показано решение).

Последний раз редактировалось Maksim V, 19-07-2007 в 13:29.


Отправлено: 04:00, 19-07-2007 | #7


Новый участник


Сообщения: 1
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ври как раз статья на эту тему.
Как сделать static с прозрачным фоном
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:09, 30-07-2009 | #8


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Доброго времени суток.
Для иллюстрации проблемы, привожу скрин, одного демонстрационного приложения, запущенного под Windows 7.

С элементами управления Static проблему удалось победить (как под WinХР, так и под Win7), благодаря коду по ссылке из поста 8.
В программе MultiBoot код сделал немного универсальным, проверяю класс элемента управления,
Код: Выделить весь код
case WM_CTLCOLORSTATIC:
    {
        wchar_t Class[80]=L"";
        GetClassName((HWND)lParam, Class, 80);
        if ((lstrcmp(Class, L"Static")==0))// | (lstrcmp(Class, L"Button")==0))
        {
            //if (((HWND)lParam != ProhWnd[3]) & ((HWND)lParam != ProhWnd[14]) & ((HWND)lParam != ProhWnd[17]) & ((HWND)lParam != ProhWnd[20]) & ((HWND)lParam != ProhWnd[24]) & ((HWND)lParam != ProhWnd[28]) & ((HWND)lParam != ProhWnd[31]))//Исключаем ГрупБоксы
            //{
                SetBkMode((HDC)wParam, TRANSPARENT);   
                return (LRESULT)GetStockObject(NULL_BRUSH); 
            //}
        }
    }
break;
так как в случаи с HMENU в if получится слишком длинная строка.
Ищется решение для Статико-содержащих Чекбоксов (а.к.а. Флажков, Галок), ГруппБоксов (элементов управления Групп).
Закомментированный код как раз и призван решать. В таком случаи:
  • ЧекБокс под WinXP решается, а вот под Win Vista и выше продолжает отображаться с визуальным дефектом (сейчас, при закомментированном - на оборот. Желательно универсальное решения для обеих ОСей).
  • ГрупБокс сильно буквально воспринимает прозрачность - показывает продолжения линии группы.
Для решения вопроса с ГруппБоксами, участник CodeProject, предлагает использовать свой класс
Transparent group box
А со стандартным разве никак не выйдет решить? Ведь фон в приложении стандартный, а не картинка как в случаи описанном на CodeProject.

Отправлено: 03:35, 19-11-2009 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Прозрачный STATIC текст

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Firewall - Static packet filters на Windows 2003 Server Raistlin Сетевые технологии 6 26-01-2013 10:54
public static void main (String args[]){ ReFleX Программирование и базы данных 1 19-09-2004 15:34
Прозрачный прокси Guest Сетевые технологии 3 25-06-2004 07:06
Прозрачный флеш Nealles Вебмастеру 2 16-03-2004 04:58
static route Guest Общий по Linux 7 16-02-2004 10:04




 
Переход