Форум: "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.49 MB
Время: 0.037 c