|
|
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
Многоуважаемые, расскажите, пожалуйста, кратенько все основные моменты реализации subclassing-а контролов в mfc. winapi часть мне хорошо известна, так что мне только четко куда/что в mfc. СПАСИБО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 21:54 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
А там ничег делать не надо. Создаешь оконный cpp-объект, создаешь его методом окно - и оно уже сабклассировано. А если нужно существующее окно привязать - вызываешь метод Attach. Потом, если нужно - Detach. И все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 22:02 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
смотри help для CWnd::SubclassWindow и CWnd::SubclassDlgItem ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2005, 22:54 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
Хм, это получается, что в MFC все контролы по дефолту сабкласенные?.. кошмАр! все больше ненавижу mfc. :/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 11:03 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
Не, народ. что-то у меня не выходит. Не понимаю я, как с этим работать. вот смотрите, что у меня (не) получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. int CMyEdit::OnCreate(LPCREATESTRUCT lpCreateStruct) { int iRes = CEdit::OnCreate(lpCreateStruct); //здесь добавлены мои функции return iRes; } LRESULT CMyEdit::OnSetMargins(LPARAM, WPARAM) { // а здесь я хочу послать в настоящую wndproc edit control-a мессаж // EM_SETMARGINS со своими данными. //вобщем, по сути это заглушка на EM_SETMARGINS. // но как послать в настоящую wndproc??? return 0; } спасибо тем, кто дочитает до сюда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 11:49 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
что есть термин: "настоящая wndproc" ? если базовый класс, от которого наследовались - прям зовите его методы и усё. Если нужно дотянуться до других обьектов в этом процессе - ну то мона разными средствами (передача через указатель, ссылку, ну и много мона писать на этот счёт). "послать" можно кого угодно и куда угодно. Но думаю Вам так же грубо и ответят :) Или другими словами - для приёма мессаги (синхронно) потребуеться тот кто будет принимать эту мессагу. Т.е. другой процесс (либо поток). Если асинхронно - то там гибче. Но от этого яснее не становиться :) Что нуна то получить на выходе ? (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 13:01 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
хе-хе. "настоящая wndproc" Вобщем, в винде есть предопределенные окна -- контролы. Они создаются с заданными WNDPROC ( Код: plaintext 1. 2. 3. 4. 5. К примеру, если попробовать пооткрывать разные приложения и спайем посмотреть на адрес wndproc у edit-ов, то он почти всегда будет одинаковым. Изменить wndproc можно -- и это называется subclassing-ом. Так вот. У виндового контрола "EDIT", как показывает мне spy 0x773Е3B41. Вот это я и называю настоящей wndproc. Судя по всему, mfc заменяет стандартную оконную процедуру и пересылает контролу необработанные сообщения. А я не могу никак разобраться, что к чему в этом мфс. В моей проблемной функции: Код: plaintext 1. 2. 3. 4. 5. если я так делаю, то у меня CEdit::SetMargins(20, 20); опять попадает сюда же., стек переполняется и до свидания. А реальный wndproc control-а сообщение EM_SETMARGINS не идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 13:48 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
Вызов оригинальной WNDPROC осуществляется вызовом метода Default(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 14:28 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
А нет, погоди, наверное тебе нужно было не это. А LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam) Оно устроено так : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Ну можешь либо ее звать, либо самому что-то такое же изобразить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 14:37 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
SeraTJХм, это получается, что в MFC все контролы по дефолту сабкласенные?.. кошмАр! все больше ненавижу mfc. :/ А как ты хочешь еще и сообщения обрабатывать, и виртуальные методы оконные делать ? И не все, а только те, к которым привязанны оконные CPP-объекты. А будешь еще MFC ругать - помогать не буду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 14:39 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
автор ... либо самому что-то такое же изобразить. - п.п. "либо самой что-то такое же изобразить". ;) за DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam) ОГРОМНОЕ спасибо! Заработало так, как нужно. авторА будешь еще MFC ругать - помогать не буду А с mfc у меня своя песня... Весь мой WTL-ный проект заставили переводить на MFC, так у меня типа "переходный период". ОЧЕЕЕНЬ тяжело.. ( хотя вообще мне и без виртуальных методов оконных было очень даже неплохо ), однако Обещаю больше на MFC не гнать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 16:32 |
|
||
|
subclassing conrol-ов в mfc
|
|||
|---|---|---|---|
|
#18+
авторВесь мой WTL-ный проект заставили переводить на MFC а какая была мотивировка? ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2005, 16:56 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33155733&tid=2033058]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 369ms |

| 0 / 0 |
