|
|
| Посл.отвђт | Сообщен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 Спасибо, сейчас скачиваю, посмотрю там. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044 |