Кнопка поверх...
От: Аноним  
Дата: 06.12.04 15:29
Оценка:
Подскажите кто знает как вывернуться из такой ситуации:

Я создаю кнопку и добавляю ее на ст. CommonDialog-Open. Но проблема в том, что места там не очень много и кнопка хоть и смотриться поверх всех элементов окна диалога, однако нажиматься не хочет.

Например, я помещаю свою кнопку в верхн. правый угол окна, там пустое место (сразу после кнопки "меню Вид"), но на самом деле, там еще тулбар продолжается. И вот в тех местах, где этот тулбар пересекается с моей кнопкой — кнопка нажиматься не хочет. Вообще это относится ко всем элементам и даже подписи (STATIC) и то находятся под кнопкой, но нажимать ее не дают в тех местах где они пересекаются с кнопкой, при нажатии на эти места фокус тут же убегает на кнопку — "Открыть". Как это можно обойти?


Создаю я кнопку так... привязываю ее к hWnd гл. окна CommonDialog:

btWnd = CreateWindowEx(ByVal 0&, "BUTTON", "Hi", WS_CHILD Or WS_VISIBLE,390, 0, 20, 20, hWndParent, ByVal 0&, ByVal 0&, ByVal 0&)
Re: Кнопка поверх...
От: Аноним  
Дата: 06.12.04 20:40
Оценка:
Кажись понял, завтра буду разбираться ... наконец попал на статью с MSDN — Explorer-Style Custom Templates пока понял токо что надо свои доп. контролы должны иметь соотв. стили чтобы их не перекрывали станд. контролы
Re[2]: Кнопка поверх...
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 06.12.04 21:21
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Кажись понял, завтра буду разбираться ... наконец попал на статью с MSDN — Explorer-Style Custom Templates пока понял токо что надо свои доп. контролы должны иметь соотв. стили чтобы их не перекрывали станд. контролы


Простенький пример можно взять здесь.
[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by Rainbow — Man On The Silver Mountain ]
- Искренне ваш, Поросенок Пафнутий
Re[3]: Вдогонку
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 06.12.04 21:40
Оценка:
Возможно, для Вас окажутся интересными и полезными вот эти статьи:

[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by Rainbow — Catch The Rainbow ]
- Искренне ваш, Поросенок Пафнутий
Re[3]: Кнопка поверх...
От: Аноним  
Дата: 07.12.04 08:28
Оценка:
Спасибо за примеры, разбираюсь с ними, к сожалению они все исповедуют одну мысль — создание dialog на основе своего templates. Для этого надо создать и использовать res файл....у меня задачи несколько иные

Посколько все это пишется для макроса под Excel-VBA, то очень не хотелось бы связываться с доп. файлами: res, dll, ocx и т.д. которые надо таскать за модулем макроса. Поэтому мне надо добавить свои контролы на окно common dialog на лету, сразу после создания..так что приходится топать своей дорогой

Что то в MSDN я прочитал что можно сохранить стиль OFN_EXPLORER при установке своей hook функции — у меня что-то так не получается, как только я выставляю флаг OFN_ENABLEHOOK на WIN2000 открывается common dialog в СТАРОМ стиле. В принципе это конечно для меня не критично, но просто интресно, можно сохранить OFN_EXPLORER со своим hook или нет?
Re[4]: Кнопка поверх...
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 07.12.04 08:34
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Спасибо за примеры, разбираюсь с ними, к сожалению они все исповедуют одну мысль — создание dialog на основе своего templates. Для этого надо создать и использовать res файл....у меня задачи несколько иные


Не обязательно.

OFN_ENABLETEMPLATEHANDLE

Indicates that the hInstance member identifies a data block that contains a preloaded dialog box template. The system ignores the lpTemplateName if this flag is specified.


А>Что то в MSDN я прочитал что можно сохранить стиль OFN_EXPLORER при установке своей hook функции — у меня что-то так не получается, как только я выставляю флаг OFN_ENABLEHOOK на WIN2000 открывается common dialog в СТАРОМ стиле. В принципе это конечно для меня не критично, но просто интресно, можно сохранить OFN_EXPLORER со своим hook или нет?


Гх-м-м... а разве в примере, ссылку на который я давал в Re[2]: Кнопка поверх...
Автор: SchweinDeBurg
Дата: 07.12.04
, диалог не "новостильный"?
[ posted via RSDN@Home 1.1.4 beta 3 r241 ]
- Искренне ваш, Поросенок Пафнутий
Re[5]: Кнопка поверх...
От: Аноним  
Дата: 07.12.04 12:12
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Не обязательно.


SDB>

SDB>OFN_ENABLETEMPLATEHANDLE

SDB>Indicates that the hInstance member identifies a data block that contains a preloaded dialog box template. The system ignores the lpTemplateName if this flag is specified.


SDB>Гх-м-м... а разве в примере, ссылку на который я давал в Re[2]: Кнопка поверх...
Автор: SchweinDeBurg
Дата: 07.12.04
, диалог не "новостильный"?

SDB>[/q]

Запустить не могу, у меня токо VB6 стоит, так что я просто исходный код изучал.

По поводу OFN_ENABLETEMPLATEHANDLE я не очень понял.
В своем коде OFN_ENABLETEMPLATEHANDLE использовать не могу, потому что мне не на что указывать, как я сделаю preloaded dialog box template??? а так, если просто добавить флаг OFN_ENABLETEMPLATEHANDLE то при создании диалога получаю ошибку номер 3
Re[6]: Кнопка поверх...
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 07.12.04 12:28
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Запустить не могу, у меня токо VB6 стоит, так что я просто исходный код изучал.


Диалог будет "новостильным".

А>По поводу OFN_ENABLETEMPLATEHANDLE я не очень понял.

А>В своем коде OFN_ENABLETEMPLATEHANDLE использовать не могу, потому что мне не на что указывать, как я сделаю preloaded dialog box template??? а так, если просто добавить флаг OFN_ENABLETEMPLATEHANDLE то при создании диалога получаю ошибку номер 3

Найдите в MSDN описание структур DLGTEMPLATE/DLGITEMTEMPLATE — там подробно все расписано. А дальше Вам останется только выделить блок памяти требуемого размера с помощью GlobalAlloc(), закинуть в эту память данные и указать дескриптор в поле hInstance структуры OPENFILENAME (не забыв конечно и флаг OFN_ENABLETEMPLATEHANDLE).
[ posted via RSDN@Home 1.1.4 beta 3 r241 ]
- Искренне ваш, Поросенок Пафнутий
Re[7]: Кнопка поверх...
От: Аноним  
Дата: 08.12.04 10:28
Оценка:
Спасибо за наводку, изучил... тяжеловато конечно будет на VB заполнить все эти структуры и правильно их разместить в памяти... пока хочу попробовать создавать на контролы на лету и привязывать их к окну диалога.. своих проблем там правда тоже хватает. Пока бьюсь над задачей — добавляем контролы имеют по умолч. большой жирный шрифт, пытаюсь сразу после создания своего контрола полсать ему сообщение WM_SETFONT с новым шрифтом, но ничего не меняется, хотя вроде в MSDN писали что можо прям в событии инициализации диалога посылать своим контролам WM_SETFONT....где же я тогда напартачил
Re[8]: Кнопка поверх...
От: Аноним  
Дата: 08.12.04 13:35
Оценка:
А>Пока бьюсь над задачей — добавляем контролы имеют по умолч. большой жирный шрифт, пытаюсь сразу после создания своего контрола полсать ему сообщение WM_SETFONT с новым шрифтом, но ничего не меняется, хотя вроде в MSDN писали что можо прям в событии инициализации диалога посылать своим контролам WM_SETFONT....где же я тогда напартачил

Через полдня наконец разобрался, просто была не правильно задекларирована функция SendMessage, не тот тип ждала она... с VB под winAPI надо держать ухо востро

Теперь токо осталось разобраться с GROUPBOX, он себя любопытно ведет, фон внутри этого GROUPBOX почему то не перерисовывает, там остается изображения части других окон, а когда закрываешь все окно диалога, то потом он закрашивает начинку GROUPBOX белым — типа цвет по умолч. пошел разбираться дальше
Re[9]: Кнопка поверх...
От: Аноним  
Дата: 08.12.04 15:36
Оценка:
А>Теперь токо осталось разобраться с GROUPBOX, он себя любопытно ведет, фон внутри этого GROUPBOX почему то не перерисовывает, там остается изображения части других окон, а когда закрываешь все окно диалога, то потом он закрашивает начинку GROUPBOX белым — типа цвет по умолч. пошел разбираться дальше

GROUPBOX победил с помощью совета Натали http://www.rsdn.ru/Forum/?mid=62893
Автор: Кодт
Дата: 11.06.02


Необходимо отобрать у гл. окна диалога стиль — WS_CLIPCHILDREN чтобы он начал рисовать нормально (а не просвечивать). Однако это еще не все. Контролы внутри GROUPBOX при этом перестают отображаться, чтобы этого избежать мне пришлось убрать у этих контролов стиль — WS_CLIPSIBLINGS (несмотря на рекомендации MSDN о стиле добавляемых контролов на диалог). Т.е.:

Гл. окно диалога:
....
WS_CLIPSIBLINGS
Not WS_CLIPCHILDREN (т.е. отбираем стиль у окна)

GROUPBOX:
WS_VISIBLE
WS_CHILD
WS_CLIPCHILDREN
WS_CLIPSIBLINGS
DS_3DLOOK
DS_CONTROL

Контрол внутри GROUPBOX:
WS_VISIBLE
WS_CHILD
WS_CLIPCHILDREN
Not WS_CLIPSIBLINGS
DS_3DLOOK
DS_CONTROL

В окнах других программ через Spy++ я смотрел контролы внутри GROUPBOX имели WS_CLIPSIBLINGS, но тогда parent window GROUPBOX не имело WS_CLIPSIBLINGS...проверить это на станд. диалоге open невозможно, потому что у него отобрать WS_CLIPSIBLINGS у меня не получилось... так что приходится строить токо предположения, что если гл. окно имеет WS_CLIPSIBLINGS, то контролы внутри GROUPBOX НЕ ДОЛЖНЫ иметь WS_CLIPSIBLINGS...видимл в этом кроется какой-то смысл
Re[10]: Кнопка поверх...
От: SergeySV Россия  
Дата: 09.12.04 15:00
Оценка:
Небольшое дополнение:
походя выяснился еще один момент — контролу BS_AUTORADIOBUTTON нельзя ставить стиль DS_3DLOOK — иначе не показывается на окне диалога
Re[11]: Кнопка поверх...
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 09.12.04 15:07
Оценка: 2 (1)
Здравствуйте, SergeySV, Вы писали:

SSV>походя выяснился еще один момент — контролу BS_AUTORADIOBUTTON нельзя ставить стиль DS_3DLOOK — иначе не показывается на окне диалога


Гх-м-м... DS_3DLOOK — это допусимый стиль диалогового окна, а не элемента управления класса "BUTTON" и назначать ему этот стиль явно не стоит.
[ posted via RSDN@Home 1.1.4 beta 3 r241 ]
- Искренне ваш, Поросенок Пафнутий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.