Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Tab_Control и поддержка Visual Styles   Найти похожие ветки 

 
Comp ©   (2004-10-23 22:52) [0]

Здравствуйте, уважаемые мастера. Пожскажите пожалуйста (кто знает) почему когда меняешь стиль этого контрола на TCS_BUTTONS то пропадает поддержка Visual Styles у него. Когда обычные закладки - все нормалько. Как только кнопки - то все. Старый добрый win98... Подскажите пожалуйста, можно это исправить самому или смириться? Буду очень благодарен.

На всякий случай привожу код моей экспериментальной проги.


program window;

uses
 windows,
 messages,CommCtrl;

{$R unit1.RES}
var
   wcl,WndClassName: TWNDCLASS;
   msg: TMSG;
   hMainWnd, tabcontrol1: HWND;
   szWinName: PCHAR;
   szBuff: array[0 .. 18] of char;
   tie:TC_ITEM;

function WindowFunc(hMainWnd: HWND; iMsg: integer; wParam: WPARAM; lParam: LPARAM):Integer; stdcall;

{НА ЭТО ВНИМАНИЕ МОЖНО НЕ ОБРАЩАТЬ}

   const
   dwPenStyle: array [0..5] of Word = (
                          PS_DASH,
                          PS_DASHDOT,
                          PS_DOT,
                          PS_INSIDEFRAME,
                          PS_NULL,
                          PS_SOLID

                       );
  uHatch: array [0..5] of UINT= (
                     HS_BDIAGONAL,
                     HS_CROSS,
                     HS_DIAGCROSS,
                     HS_FDIAGONAL,
                     HS_HORIZONTAL,
                     HS_VERTICAL
                    );
var
   ps:PAINTSTRUCT ;
   lb:LOGBRUSH ;
   rc:TRECT ;
   hdcw:HDC ;
   i:cardinal ;
   hPenw, hPenOld:HPEN ;
begin

   case iMsg of
         WM_CREATE:
         begin
            InitCommonControls;
         end;

      { WM_PAINT:
        begin
           GetClientRect(hMainWnd, rc);
           rc.left:=rc.left+10;
           rc.top :=rc.top +10;
           rc.bottom:= rc.bottom-10;
           lb.lbStyle := BS_SOLID;
           lb.lbColor := RGB(255,0,0);
           lb.lbHatch := 0;

           hdcw := BeginPaint(hMainWnd, ps);
           for i := 0 to 6 do
           begin
               hPenw := ExtCreatePen(PS_COSMETIC + dwPenStyle[i],
                                   1, lb, 0, Nil);
               hPenOld := SelectObject(hdcw, hPenw);
               MoveToEx(hdcw, rc.left + (i * 20), rc.top, Nil);

               LineTo(hdcw, rc.left + (i * 20), rc.bottom);
               SelectObject(hdcw, hPenOld);
               DeleteObject(hPenw);

           end;
           rc.left := rc.left +150;
           for i := 0 to 6 do
           begin
               lb.lbStyle := BS_HATCHED;
               lb.lbColor := RGB(0,0,255);
               lb.lbHatch := uHatch[i];
               hPenw := ExtCreatePen(PS_GEOMETRIC,
                                   5, lb, 0, Nil);

               hPenOld := SelectObject(hdcw, hPenw);
               MoveToEx(hdcw, rc.left + (i * 20), rc.top, Nil);
               LineTo(hdcw, rc.left + (i * 20), rc.bottom);
               SelectObject(hdcw, hPenOld);
               DeleteObject(hPenw);
           end;
          // Rectangle(hdcw,0,0,100,100);
           EndPaint(hMainWnd, ps); }

    //   end;

       WM_DESTROY:
       begin
           DeleteObject(hPenw);
           PostQuitMessage(0);
       end;
end;

          result:= DefWindowProc(hMainWnd, iMsg, wParam, lParam);

end;

begin

szWinName := "MyClass";

wcl.hInstance:= hInstance;
wcl.lpszClassName:= szWinName;
wcl.lpfnWndProc:= @WindowFunc;
wcl.style:= CS_PARENTDC;
wcl.hCursor:= LoadCursor(0,IDC_ARROW);
wcl.lpszMenuName:= nil;
wcl.cbClsExtra:= 0;
wcl.cbWndExtra:= 0;
wcl.hbrBackground:= COLOR_WINDOW;
RegisterClass(Wcl);

hMainWnd:= CreateWindow(szWinName, "API.", (WS_OVERLAPPEDWINDOW or WS_THICKFRAME or WS_MAXIMIZEBOX),
                       CW_USEDEFAULT, CW_USEDEFAULT,
                       300, 170,0,0, hInstance, nil);

{Все начинается тут}

tabcontrol1:=CreateWindow(WC_TABCONTROL,"123",
    WS_VISIBLE+WS_CHILD+TCS_BUTTONS,
    0,0,300,170,hMainWnd,0,hInstance,nil);
tie.mask := TCIF_TEXT;
   tie.iImage := -1;
   tie.pszText := "ddddd";
   SendMessage(tabcontrol1,TCM_INSERTITEM,0,LPARAM(@tie));
   SendMessage(tabcontrol1,TCM_INSERTITEM,1,LPARAM(@tie));

ShowWindow(hMainWnd, CmdShow);
UpdateWindow(hMainWnd);

while(GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

end.



 
Comp ©   (2004-10-24 00:18) [1]

Короче, искал,искал инфу по инету - ничего нигде нет. Остается тока одно мнение - это недоработка Майкрософт. И скорее всего так оно и есть. Конечно жалко потраченного времени и денег на этот несчастный мегабайт.

Всем спасибо за внимание.


 
Gero ©   (2004-10-24 07:48) [2]

Рисовать темы надо самому, если хочешь чтобы хорошо выглядело.
С Delphi7 поставляется UxTheme.pas, это тебе поможет.


 
DVM ©   (2004-10-24 13:00) [3]


> Comp ©   (24.10.04 00:18) [1]

Можно эту недоработку легко исправить. Подменяешь оконную процедуру TabControl и рисуешь кнопки сам. Я делал подобное. Сделал кнопки на TabControl такими же как кнопки на панели задач при включенных темах. Получилось красиво.


 
Gero ©   (2004-10-24 13:16) [4]


> DVM ©   (24.10.04 13:00)

<off>
Ты мне кстати обещал пример прислать по этому поводу.
</off>


 
DVM ©   (2004-10-24 13:20) [5]


> Gero ©   (24.10.04 13:16) [4]

Извини, забыл. Работы море, закрутился. Постараюсь в ближайшее время выдрать кусок из программы и прислать.


 
Comp ©   (2004-10-24 20:55) [6]


>  [5] DVM ©   (24.10.04 13:20)


>  [2] Gero ©   (24.10.04 07:48)


 Спасибо за подсказки!!!
 Постараюсь что-нибудь придумать. Если получится - это будет ништяк. Будет новая революция в моих знаниях по API...


 
Comp ©   (2004-10-24 23:15) [7]

Спасибо, мужики, еще раз.

Нашел просто, но сначала потратил 7 Мб на бесполезное рыскание по интернету, пока не вспомнил свой старый добрый, быстрый и точный метод поиска.
Открыл UxTheme.pas, как посоветовали в

[2] Gero ©   (24.10.04 07:48)
, нашел первую попавшуюся жертву из этого кода - ею оказалась функция


 DrawThemeBackground(...)


И ввел в поле ввода на google.ru.
 Результат не заставил себя долго ждать - в конечном итоге я имею на руках исходники демонстрационной программы (хоть на С++, но это не страшно), в которой показывается прорисовка визуальных стилей.
 Конечно, мой недостаток в том, что я не сразу догадываюсь, что надо делать.
 Пока не отдал почти 2 $ этому проклятому Билайну за интернет...
 
Извините...


 
DVM ©   (2004-10-25 10:28) [8]


> Comp ©   (24.10.04 23:15) [7]

А еще на этом сайте есть статья "Использование визуальных стилей XP в своих органах управления"


 
Comp ©   (2004-10-25 16:38) [9]


>  [8] DVM ©   (25.10.04 10:28)


Да, она есть и на моем компе - уже когда-то успед сохранить, когда искал глобальную поддержку визуальных стилей во всем приложении. (Хотя оказалось, что этот вопрос решается намного проще).


 
DVM ©   (2004-10-25 18:41) [10]

> Comp ©
> Gero ©

Собственная отрисовка кнопок в TabControl.
http://www.dvm.com.ru/files/TabControlDemo.zip


 
Comp ©   (2004-10-25 18:46) [11]


>  [10] DVM ©   (25.10.04 18:41)


Спасибо ОГРОМНОЕ!!!

Теперь решатся и многие другие вопросы...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх









Память: 0.87 MB
Время: 0.071 c
11-1083849539
Delphi5.01
2004-05-06 17:18
2004.12.12
... как вызвать функцию paint предка ...


14-1101112728
Александр Иванов
2004-11-22 11:38
2004.12.12
Бросаю курить


3-1100117875
VitGun
2004-11-10 23:17
2004.12.12
Можно ли использовать один гереатор для двух триггеров?


1-1101370809
спринт
2004-11-25 11:20
2004.12.12
Стиль XP


1-1101739912
Rem
2004-11-29 17:51
2004.12.12
Создание глобальной переменной Application





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский