Головна сторінка
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 ..
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.61 MB
Час: 0.09 c
14-1100666946
Megabyte-CeerCop
2004-11-17 07:49
2004.12.12
Втратив гілку про ламаразми, а Спост потрібно.


14-1100996643
М'який
2004-11-21 03:24
2004.12.12
Open Source приречений?


3-1100430358
M. Saratoff
2004-11-14 14:05
2004.12.12
Реалізація операції перетину


14-1101197756
Чорна людина
2004-11-23 11:15
2004.12.12
Королівству 6 років!


3-1100104958
ferr
2004-11-10 19:42
2004.12.12
(Table) & amp; (підстановочні поля) & amp; (Сортування)





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в&#39;єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська