
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
24.08.2007, 17:37:45
|
|||
|---|---|---|---|
Creating "MFC ActiveX Control" |
|||
|
#18+
Я создал проектик "MFC ActiveX Control". Класс СXxxCtrl нарисовался на автопилоте. И даже кружочек в контроле рисуется! Осталось как-то вместо отрисовки кружка встроить в контрол экзепляр от некоего CWnd-наследника. Вопросы: 1. Почему OnDraw для моего OleControl вызывается, а Create НЕ вызывается вообще. Подозреваю, что pDC, который прилетает в OnDraw - это pDC контейнера моего контрола. Это круто, но.. хочется свое Нормальное, Персональное окно для контрола, с реальным m_hWnd, чтобы было куда дочерние окна вставлять. 2. Как следствие из первого - я замучался вставлять экземпляр наследника от CWnd в мой контрол. Как это по-хорошему делается? Если можно - то лучше с примерами кода. Пасиба ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.08.2007, 18:39:05
|
|||
|---|---|---|---|
Creating "MFC ActiveX Control" |
|||
|
#18+
подобное лучше писать на чистом api (ну или почти чистом, обернув часто вызываемое), а тут мало того что MFC так еще и ActiveX, простенький контрол будет жирно весить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.08.2007, 15:32:25
|
|||
|---|---|---|---|
|
|||
Creating "MFC ActiveX Control" |
|||
|
#18+
Мы делаем так. 1. Убедись, что в MESSAGE_MAP есть ON_WM_CREATE и ON_WM_SIZE; 2. В классе CXxxCtrl сделай две функции: Код: plaintext 1. 2. 3. В OnCreate тупо создаешь свой диалог (можно у диалога поставить свойство Visible в True, тогда он сам тут же и отрисуется). 4. В OnDraw ничего не рисуешь. 5. В OnSize делаешь следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.08.2007, 21:00:55
|
|||
|---|---|---|---|
Creating "MFC ActiveX Control" |
|||
|
#18+
Исчерпывающе! Спасибо огромЕнное! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.08.2007, 09:18:11
|
|||
|---|---|---|---|
|
|||
Creating "MFC ActiveX Control" |
|||
|
#18+
Всегда пожалуйста;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.08.2007, 22:14:01
|
|||
|---|---|---|---|
Creating "MFC ActiveX Control" |
|||
|
#18+
В догонку... Сделал все так, как сказано. С одним исключением - своего диалога у меня нет. Но есть НЕЧТО, наследующее CWnd и очень хитро (с визуальной точки зрения) себя отрисовывающее. С технической точки зрения отрисовываются только тексты и рамки. На данный момент, я уперся в то, что это НЕЧТО не желает отрисовываться после открытия тех зон, которые были перекрыты другими окнами. Перерисовка происходит только в момент возврата фокуса моему приложению. Какими таблетками это можно полечить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.08.2007, 15:54:17
|
|||
|---|---|---|---|
|
|||
Creating "MFC ActiveX Control" |
|||
|
#18+
А в стиль окна этого НЕЧТО добавить CS_SAVEBITS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.08.2007, 15:58:32
|
|||
|---|---|---|---|
|
|||
Creating "MFC ActiveX Control" |
|||
|
#18+
Пардон, фигню посоветовал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.08.2007, 11:08:08
|
|||
|---|---|---|---|
|
|||
Creating "MFC ActiveX Control" |
|||
|
#18+
Я вот подумал тут на досуге... Окна отрисовываются, когда получают WM_PAINT. Получают они его вне зависимости от того, имеют ли они фокус. Если часть окна не хочет рисоваться, значит, окно либо где-то недополучает WM_PAINT, либо вольно с ним обходится (например, сначала проверяет, есть ли у него фокус, а потом рисуется). Ситуация с недополучением сообщений бывает в Active-X-контролах и решается следующим образом: 1. В MESSAGE_MAP добавить ON_WM_MOUSEACTIVATE() 2. Добавить к контролу метод afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message); Код: plaintext 1. 2. 3. 4. 5. 6. 7. Если не поможет, надо смотреть код отрисовки, и еще немаловажно, в какое приложение вставлен контрол, может быть, оно виновато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.09.2007, 02:38:14
|
|||
|---|---|---|---|
Creating "MFC ActiveX Control" |
|||
|
#18+
Мда. Такой рецепт, если не подскажут, можно до потери пульса выдумывать, и так и не выдумать :-/ Контрол вставлялся в наипростейшую форму .Net прилодения (FW2). Короче, не хватило у меня терпения лабать его на плюсах. Cлабал на Шарп'ах. Но... :) Cнова с нюансами. Надеюсь, многоуважаемые модеры не покуцают меня и не выгонят в ветку C# (?) :) Тема, скорее о механизмах отрисовки в системе, нежели о средстве реализации конкретной задачи. Вобщем, в контроле дофига чего рисуется. Контрол длинный, виден не целиком. Условно - пусть это будет грид. Отрисовка умная (относительно). Т.е. рисуется только graphics.ClipRectangle ( +\- чуток за его краями, с расчетом на то, что от отрисовки за пределами ClipRectangle хуже никому не сделается). Спецэффект выражается в частичной недорисовке тех частей контрола, которые были вне ClientRect до начала скроллинга (контрол воткнут в ScrollBox). Т.е. начинаем скролить и видим, что из 10 WP_PAINTов 6 - отработаны на ура и целиком, 3 - частично, а 1 не отработан вообще. Эффект рандомный, т.е. недорисовки всегда разные. PS: очень не хочется рисовать тот-же грид тупо, лейблами. надеюсь, до этого не дойдет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2028269]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 319ms |

| 0 / 0 |
