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

Вниз

Прозрачные подписи под значками 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 вся ветка

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

Наверх





Память: 0.46 MB
Время: 0.005 c
1-34389
R
2003-04-28 01:28
2003.05.12
Освобождение памяти из под динамически созданной формы


3-34358
T{}r(l-l
2003-04-22 11:12
2003.05.12
DTS - пакет


14-34560
Мысык
2003-04-23 10:38
2003.05.12
Эхом гонга


8-34520
ViRUS_1
2003-01-12 04:51
2003.05.12
Как узнать цвет пиксела на экране в определенных координатах?


1-34490
Zirus
2003-04-29 18:17
2003.05.12
текст в любой memo из pagecontrol-а





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский