· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› static и иконка

. 1 . 2 . 3 . 4 . 5 . >>

Посл.отвђт Сообщенiе


Дата: Июл 14, 2004 00:28:56 · Поправил: cresta

Вопрос заключается в следующем: можно ли созданному окну класса "static" установить рисунок, чтобы не перерисовывать

его на каждый WM_PAINT? Делаю так:
        	invoke CreateWindowEx,WS_EX_LEFT,                               
                              	ADDR szStaticClass,
                              	ADDR szAppName,
                              	WS_CHILD or DS_SETFONT,
                              	36,
                              	ButtTop,
                              	142,
                              	32,
                              	ParentWnd,NULL,
                              	hInstance,NULL
        	mov LabelWnd,eax
	invoke SetWindowLong,LabelWnd,GWL_ID,imgID
	invoke SendDlgItemMessage,ParentWnd,imgID,STM_SETIMAGE,IMAGE_ICON,IconID
        	invoke ShowWindow,ParentWnd,SW_SHOW
       	invoke UpdateWindow,ParentWnd
Ну и благополучно ничего не отображается. Пустой статик и всё. Или SendDlgItemMessage не годится для этого?


Дата: Июл 14, 2004 02:01:26

Потому что не IconID, а hIcon


Дата: Июл 14, 2004 03:00:13

IconID - это не ID из ресурса, а хэндл иконки, возвращаемый ExtractAssociatedIcon, если делать в WM_PAINT invoke DrawIcon,hDC,0,0,IconID - то рисует :)
Пробовал и SendMessage, и в стиль окна добавлял SS_ICON - не помогает.


Дата: Июл 14, 2004 03:24:13

cresta
попробуй SetClassLong


Дата: Июл 14, 2004 03:33:28

jekyll

Не пойдёт: статиков много, и каждому своя икона рисуется, а SetClassLong станет лепить всем статикам подряд одну икону


Дата: Июл 14, 2004 12:50:48

Попробуй слать STM_SETICON. И зачем тебе DS_SETFONT?


Дата: Июл 14, 2004 13:10:08

cresta
DWORD SetClassLong(HWND hWnd,
    int nIndex,
    LONG dwNewLong
);


и как он спрашивается будет лепить всем статикам одну икону??????????????


Дата: Июл 14, 2004 14:51:19

jekyll
Да, он не лепит всем, он просто вообще ничего не рисует. Пустой статик.
SetClassLong устанавливает аттрибут GCL_HICON всем окнам, принадлежащим к классу, к которому принадлежит окно с хэндлом hWnd. imho. Он вообще не рисует в статике. Если, к примеру, окно имеет отображение в панели задач, вот тогда там (в панели задач) иконка и изменится. Или в Alt+Tab.
__Ranger
Пробовал слать STM_SETICON. Результ - ноль.В том числе и через SendMessage
Внесу немного ясности: Parent-окно создано через CreateWindowEx, дочерние - (класс static) тоже через CreateWindowEx.Может SendDlgItemMessage годится только для диалогов и их дочерних элементов?


Дата: Июл 14, 2004 17:17:15

cresta
Извини, первый пост невнимательно прочитал. У тебя у статика стиль - WS_CHILD, значит по определению у него не должно быть никакой иконки (дочернее окно). Так что либо WM_PAINT, либо другой контрол, может ListView тебе подойдет?


Дата: Июл 14, 2004 18:18:19

jekyll
Ну, тогда уж проще PAINT обработать, чем сооружать ListView.:) Но я делал такое именно через SendDlgItemMessage, правда с двумя оговорками: делал не на ассемблере и не в окне, а в диалоге.


Дата: Июл 14, 2004 18:30:01

„а SetClassLong станет лепить всем статикам подряд одну икону“
Гы-гы, а что, во время создания контрола ему никак нельзя свой битмап сопоставить? Только один общий для всех? :)))
Если совсем туго будет, возьми сорцы WTL (или где еше - на выбор) и глянь как там гиперссылка делается из статика - процесс точно такой же. WM_PAINT все равно прийдется обрабатывать. Тут вообще работы на полчаса с нуля включая копание в MSDN.


Дата: Июл 14, 2004 19:44:59

masquer
так говорю же, делал такое, рабочий исходник на PowerBasic есть, и получаса не надо в принципе, но тут упёрлось и всё... А что за WTL такое?


Дата: Июл 14, 2004 22:21:51

cresta
1. Добавить SS_ICON и WS_VISIBLE
2. invoke SendDlgItemMessage,ParentWnd,imgID,STM_SETICON,IconID,0

Зачем SetWindowLong? ИД можно указать в качестве параметра CreateWindowEx.


Дата: Июл 15, 2004 01:11:56

cresta
WTL - windows template library


Дата: Июл 15, 2004 03:41:01

Quantum
Пробовал я эти стили. И на SendDlgItemMessage PrintError пишет: "Операция успешно завершена". :(
jekyll
Спасибо, сейчас скачиваю, посмотрю там.

. 1 . 2 . 3 . 4 . 5 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044