Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > SendMessage() или обиен данными между класами...


Автор: rokky05 7.4.2008, 12:41
У меня есть 2 класа (условно А и В), в класе А создан екзамляр класа В, но мне нужно сделать так чтоби когда произошли изменения тоесть юзер кликнул на кнопку в класе В, отобразилса некий текст в ЕдитБоксе класа А, думаю можно сделать с помощю SendMessage(), но я с сообщениями никогда не работал и ничево у меня не получаетса :((( Может кто подскажет решения???

Автор: Andrey44 7.4.2008, 13:06
в хедере :
Код

#define MWM_MYMESSAGE WM_APP+1



 в классе 
LRESULT OnMyMessage(WPARAM, LPARAM);


в спп файле
Код

BEGIN_MESSAGE_MAP(CAudVidDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_WM_ERASEBKGND()
    ON_MESSAGE(MWM_MYMESSAGE, OnMyMessage)

END_MESSAGE_MAP()


LRESULT А::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    MessageBox(0);
}


где-то в В классе
Код

::SendMessage(GetParent()->GetSafeHwnd(), MWM_MYMESSAGE, 0, 0);// или если надо передавай параметры WPARAM wParam, LPARAM lParam

Автор: rokky05 7.4.2008, 13:17
Цитата(Andrey44 @ 7.4.2008,  13:06)
в хедере :
Код

#define MWM_MYMESSAGE WM_APP+1



 в классе 
LRESULT OnMyMessage(WPARAM, LPARAM);


в спп файле
Код

BEGIN_MESSAGE_MAP(CAudVidDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_WM_ERASEBKGND()
    ON_MESSAGE(MWM_MYMESSAGE, OnMyMessage)

END_MESSAGE_MAP()


LRESULT А::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    MessageBox(0);
}


где-то в В классе
Код

::SendMessage(GetParent()->GetSafeHwnd(), MWM_MYMESSAGE, 0, 0);// или если надо передавай параметры WPARAM wParam, LPARAM lParam

Не работает :( зделал так как ты писал,  ничево не происходит...

Автор: Andrey44 7.4.2008, 13:39
Ты вообще какому окну собрался слать сообщения? Главному твоего приложения? Или созданному потом.

Автор: rokky05 7.4.2008, 13:43
Главному окну мого приложения...

Автор: Andrey44 7.4.2008, 13:51
При создании В.Create(....., this); ----------this передаешь?

Автор: rokky05 7.4.2008, 13:57
Цитата(Andrey44 @ 7.4.2008,  13:51)
При создании В.Create(....., this); ----------this передаешь?

в класе А делаю так:

B *pChild = pChild new B;

Автор: Andrey44 7.4.2008, 14:15
Для того, что-бы послать сообщение 
какому либо окну - нужно знать его HWND.

Автор: rokky05 7.4.2008, 14:24
Цитата(Andrey44 @ 7.4.2008,  14:15)
Для того, что-бы послать сообщение 
какому либо окну - нужно знать его HWND.

GetParent()->GetSafeHwnd() разве недостаточно?

Автор: Andrey44 7.4.2008, 14:46
А ты уверен, что у В родителем является А?
Ты где нибудь указываешь это?

Автор: rokky05 7.4.2008, 15:10
Цитата(Andrey44 @ 7.4.2008,  14:46)
А ты уверен, что у В родителем является А?
Ты где нибудь указываешь это?

но я же пишу в А так: B *pChild = pChild new B; етого мало?

Автор: Andrey44 7.4.2008, 15:15
Конечно мало.

Посмотри в дебагере что у тебя возвращает GetParent()->GetSafeHwnd()

Автор: rokky05 7.4.2008, 15:35
Цитата(Andrey44 @ 7.4.2008,  15:15)
Конечно мало.

Посмотри в дебагере что у тебя возвращает GetParent()->GetSafeHwnd()

да ти прав, передал через указатель и всьо сработало smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)