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

Вниз

Несколько вопросов по WinAPI   Найти похожие ветки 

 
i-s-v ©   (2005-08-03 03:32) [0]

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, или все изменения размеров нужно прописывать вручную?

Спасибо.


 
Игорь Шевченко ©   (2005-08-03 10:15) [1]


> 1. Как сделать, чтобы одной программой показывались и обрабатывались
> 2 окна, чтобы второе не находилось в клиентской области
> первого?


Убрать стиль WS_CHILD из второго окна ? Я угадал ?


> if itemState = ODS_SELECTED


 if (temState and ODS_SELECTED) <> 0


> Есть ли в WinAPI такое понятие, как Alignment, или все изменения
> размеров нужно прописывать вручную?


Вручную.

На будущее рекомендую - прежде чем задавать вопрос, посмотреть исходные тексты VCL - там все-все написано.


 
alpet ©   (2005-08-03 11:22) [2]

1. Как обычно, два не зависимых окна делаешь и все.
2. Можно увидеть, как ты его создаешь?
3. "Вручную". Вероятно удобнее всего при обработке WM_SIZING.


 
i-s-v ©   (2005-08-03 15:28) [3]

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. Понятно..


 
Игорь Шевченко ©   (2005-08-03 16:22) [4]


> 1. А как создавать второе окно?...


А я же не в курсе, что тебе нужно. Убрать Win1 из параметров CreateWindow(Ex) при создании второго окна.


 
i-s-v ©   (2005-08-03 17:01) [5]

Есть главное окно проги... Есть еще одно окно - настройки проги, которое вызывается при нажатии на кнопку...

>Убрать Win1

win2 стает мертвым

В строчки
while GetMessage(Msg, win1, 0, 0) do
begin
 TranslateMessage(Msg);
 DispatchMessage(Msg);
end;
случайно не нужно каким-то образом добавить обработку сообщений для win2?


 
Игорь Шевченко ©   (2005-08-03 17:24) [6]


> while GetMessage(Msg, win1, 0, 0) do


while GetMessage (Msg, 0, 0, 0) do


 
i-s-v ©   (2005-08-03 18:43) [7]

Спасибо!
:)



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

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

Наверх




Память: 0.48 MB
Время: 0.046 c
1-1125849561
kblc
2005-09-04 19:59
2005.09.25
Ошибка в алгоритме


3-1123757311
Marat
2005-08-11 14:48
2005.09.25
Долгий поиск


3-1124104138
sashuly
2005-08-15 15:08
2005.09.25
Подключение к MS SQL Servery


3-1123617870
carmen
2005-08-10 00:04
2005.09.25
Экспорт средствами Firebird


1-1125561181
aybolit66
2005-09-01 11:53
2005.09.25
запуск одного экземпляра приложения