Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

Прозрачные подписи под значками SysListView32 на WinApi   Найти похожие ветки 

 
DVM ©   (2003-03-11 13:02) [0]

Есть следующий код, создающий окно похожее чем то на окно Progman-а, т.е сквозь него "просвечивает" Desktop со своей картинкой. Никак не могу сделать прозрачные надписи у значков!

program listview;

uses
windows,
messages,
commctrl;

var
wc : TWndClassEx;
MainWnd,lv,himlLarge : HWND;
Mesg : TMsg;
oldLV : Pointer;
lvi : TLVItemA;
xPos,yPos,nWidth,nHeight : Integer;

function LVProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
var dc:THandle;
ps:TPaintStruct;
rect:Trect;
Begin
case msg of

WM_ERASEBKGND:
begin
DC:=BeginPaint(lv, ps);
PaintDesktop(DC);
EndPaint(lv, ps);
Result:=0;
end;
else
Result:=CallWindowProc(oldLV,wnd,msg,wParam,lParam);
end;
end;

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
var dc:THandle;
ps:TPaintStruct;
rect:Trect;
Begin
case msg of


WM_ERASEBKGND:
begin
DC:=BeginPaint(MainWnd, ps);
PaintDesktop(DC);
EndPaint(MainWnd, ps);
Result:=0;
end;
wm_destroy :
Begin
Result:=0;
postquitmessage(0);
exit;
End;
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;

begin
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="WndClass1";
RegisterClassEx(wc);
xPos:=0;yPos:=0;
nWidth:=GetSystemMetrics(SM_CXSCREEN);
nHeight:=GetSystemMetrics(SM_CYSCREEN);
MainWnd:=CreateWindowEx(WS_EX_TOOLWINDOW,"WndClass1","Caption",WS_POPUP,xPos,yPos,nWidth,nHeight,0,0,Hinstance,nil);
ShowWindow(MainWnd,CmdShow);

lv:=CreateWindowEx(0,WC_LISTVIEW,"",lvs_singlesel or lvs_icon or ws_child
or ws_visible or ws_border or LVS_SHOWSELALWAYS, 0,0,500,500, MainWnd,
0,Hinstance,nil);

oldLV:=Pointer(SetWindowLong(LV,gwl_wndproc,Integer(@LVProc)));

himlLarge := ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_COLOR32 or ILC_MASK, 1, 1);
ImageList_AddIcon(himlLarge, LoadIcon(0,idi_application));

ListView_SetImageList(LV, himlLarge, LVSIL_NORMAL);

lvi.mask := LVIF_TEXT or LVIF_IMAGE or LVIF_PARAM or LVIF_STATE;
lvi.state := 0;
lvi.iImage := 0;

lvi.pszText := pchar("Значок1");
ListView_InsertItem(LV, lvi);
lvi.pszText := pchar("Значок2");
ListView_InsertItem(LV, lvi);
lvi.pszText := pchar("Значок3");
ListView_InsertItem(LV, lvi);

ListView_SetBkColor(lV,CLR_NONE);
ListView_SetTextColor(LV,RGB(255,255,255));
ListView_SetTextBkColor(LV,CLR_NONE);

While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.


 
DVM ©   (2003-03-11 13:08) [1]

Точнее говоря, надо сделать фон надписей прозрачным. На самом деле он становится прозрачным, но до щелчка мышью на значке. Как избавится от этого побочного эффекта?


 
ers ©   (2003-03-11 13:48) [2]

Извиняюсь за оффтопик:
DVM спасибо ты мне сейчас более ответил на вопрос который меня уже давно беспокоил;)))))))

А теперь не оффтопик;))))
Может онкликомобновлять если это возможно?


 
ers ©   (2003-03-11 15:15) [3]

Посылать листвиев это сообшение "WM_ERASEBKGND"


 
DVM ©   (2003-03-11 15:41) [4]


> ers


> Посылать листвиев это сообшение "WM_ERASEBKGND"

Это то понятно, я могу и Desktop перерисовать если надо, но КОГДА это надо делать? Дело в том что если я ставлю перерисовку десктопа в обработчик сообщения нажатия кнопки мыши над итемом, то нажатия не происходит, т.к. не вызывается стандартный обработчик, если же его вызвать после, то итем опять покрасится (как мне и не надо).



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

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
3-34377
supersan
2003-04-21 16:40
2003.05.12
Получение значения поля только что вставляемой записи


1-34430
Oleg__
2003-04-28 17:07
2003.05.12
WordApplication


8-34522
Sdel
2003-01-30 09:34
2003.05.12
Играть МР3 без WinAmp


14-34594
Дмитрий К.К.
2003-04-24 06:19
2003.05.12
Именинники 24 апреля


14-34566
Scorpx
2003-04-17 19:31
2003.05.12
Обновление сайта!!!