![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Несколько вопросов по WinAPI
i-s-v © (2005-08-03 03:32:00)1. Как сделать, чтобы одной программой показывались и обрабатывались 2 окна, чтобы второе не находилось в клиентской области первого?
2. Создаю LISTBOX с LBS_OWNERDRAWFIXED. Как сделать, чтобы выбранный элемент подсвечивался?
WM_DRAWITEM:
begin
if wParam = id_listBox then
begin
with PDrawItemStruct(lParam)^ do
begin
if itemState = ODS_SELECTED then
begin
SetBKColor(hDC, RGB(0, 0, 128));
SetTextColor(hDC, $ffffff);
lbr.lbStyle := BS_SOLID;
lbr.lbColor := RGB(0, 0, 128);
br := CreateBrushIndirect(lbr);
FillRect(hDC, rcItem, br);
end else
begin
SetBKColor(hDC, $ffffff);
SetTextColor(hDC, $000000);
lbr.lbColor := $ffffff;
end;
TextOut(hDC, rcItem.Left+20, rcItem.Top+2, list.Item[itemId].Value.Name, Length(list.Item[itemId].Value.Name));
end;
end;
end;
не дает ничего хорошего
3. Есть ли в WinAPI такое понятие, как Alignment, или все изменения размеров нужно прописывать вручную?
Спасибо.
i-s-v (2005-08-03 18:43:00) [1]Спасибо!
:)
Игорь Шевченко (2005-08-03 17:24:00) [2]
> while GetMessage(Msg, win1, 0, 0) do
while GetMessage (Msg, 0, 0, 0) do
i-s-v (2005-08-03 17:01:00) [3]Есть главное окно проги... Есть еще одно окно - настройки проги, которое вызывается при нажатии на кнопку...
>Убрать Win1
win2 стает мертвым
В строчки
while GetMessage(Msg, win1, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
случайно не нужно каким-то образом добавить обработку сообщений для win2?
Игорь Шевченко (2005-08-03 16:22:00) [4]
> 1. А как создавать второе окно?...
А я же не в курсе, что тебе нужно. Убрать Win1 из параметров CreateWindow(Ex) при создании второго окна.
i-s-v (2005-08-03 15:28:00) [5]1. А как создавать второе окно?...
win1 := CreateWindowEx(0,
winClass.lpszClassName,
'111',
WS_OVERLAPPEDWINDOW OR WS_VISIBLE,
222, 195, 200, 300,
0, 0,
hInst,
nil);
win2 := CreateWindowEx(0,
winClass.lpszClassName,
'222',
WS_OVERLAPPEDWINDOW OR WS_VISIBLE,
222, 195, 200, 300,
win1, 0,
hInst,
nil);
lpClassName - создавать новый класс?
Можно примерчик, плз...
2. > if (temState and ODS_SELECTED) <> 0
Спасибо, помогло
3. Понятно..
alpet (2005-08-03 11:22:00) [6]1. Как обычно, два не зависимых окна делаешь и все.
2. Можно увидеть, как ты его создаешь?
3. "Вручную". Вероятно удобнее всего при обработке WM_SIZING.
Игорь Шевченко (2005-08-03 10:15:00) [7]
> 1. Как сделать, чтобы одной программой показывались и обрабатывались
> 2 окна, чтобы второе не находилось в клиентской области
> первого?
Убрать стиль WS_CHILD из второго окна ? Я угадал ?
> if itemState = ODS_SELECTED
if (temState and ODS_SELECTED) <> 0
> Есть ли в WinAPI такое понятие, как Alignment, или все изменения
> размеров нужно прописывать вручную?
Вручную.
На будущее рекомендую - прежде чем задавать вопрос, посмотреть исходные тексты VCL - там все-все написано.