Win32 API - Прозрачный STATIC текст

Ответить
Аватара пользователя
Maksim V

Win32 API - Прозрачный STATIC текст

Сообщение Maksim V »

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





Код:

Код: Выделить всё

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, но как правильно? Напишите сразу полный текст исходника, если вас не затруднит.
Аватара пользователя
DillerInc

Re: Win32 API - Прозрачный STATIC текст

Сообщение DillerInc »

Цитата 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".
Аватара пользователя
Maksim V

Re: Win32 API - Прозрачный STATIC текст

Сообщение Maksim V »

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

Re: Win32 API - Прозрачный STATIC текст

Сообщение DillerInc »

Maksim V

Ну,скомпилируйте ресурс и посмотрите.Разве в скрипте где-то упоминается про static??

Иначе я не понимаю,о чём идёт речь.
Аватара пользователя
Maksim V

Re: Win32 API - Прозрачный STATIC текст

Сообщение Maksim V »

вообщем статический текст расположен на рисунке. но фон текста не прозрачный. из-за этого видно след на битмапе. что можно придумать?
Вложения
test.rar
(1.42 КБ) 0 скачиваний
test.rar
(1.42 КБ) 0 скачиваний
Аватара пользователя
DillerInc

Re: Win32 API - Прозрачный STATIC текст

Сообщение DillerInc »

Maksim V

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

Re: Win32 API - Прозрачный STATIC текст

Сообщение DillerInc »

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

Re: Win32 API - Прозрачный STATIC текст

Сообщение Admiral »

Доброго времени суток.

Для иллюстрации проблемы, привожу скрин, одного демонстрационного приложения, запущенного под 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.
Ответить

Вернуться в «Программирование и базы данных»