Тема: MFC
Показать сообщение отдельно
Старый 23.02.2010, 20:21   #2
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: MFC

Сообщение от Mr_F_ Посмотреть сообщение
Кто-нибудь юзал?

Дано:
Окно с кнопкой.
И то и другое имеют свои классы, дерив..ова..ные (derived короче) от CButton и CFrameWnd.

У окна есть Message Map для отлова сообщения о нажатии кнопки.
В хидере окна:
//{{AFX_MSG(CMyDialog)
  afx_msg void OnButtonPressed();
//}}AFX_MSG 
DECLARE_MESSAGE_MAP()
в реализации:

BEGIN_MESSAGE_MAP(CMyDialog, CFrameWnd)
//{{AFX_MSG(CMyDialog)
 ON_COMMAND(7,OnButtonPressed)
//}}AFX_MSG
END_MESSAGE_MAP()

void CMyDialog::OnButtonPressed()
{
 
}
И собсно вот! В послденей функции надо получить поинтер на нажатую кнопку, от которой по идее шёл месседж. Как это сделать?

Да, я знаю, что



но тем не менее требуется так вот сделать


-----
хм, если овверрайдить windowproc окна, можно словить мессагу
и по идее там должно быть
lParam
Identifies the control that sends the message if the message is from a control. Otherwise, lParam is 0.
и вроде он как раз отличается в зависимости от нажатой кнопки
Но, я не могу юзать его как CWnd* (вылетает), что делать?


----
ахаха, я крут, проблема решена

LRESULT COWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	if (message == WM_COMMAND)
	if (HIWORD(wParam) == BN_CLICKED)
	{
		if (LOWORD(wParam)==7) //только fbutton'ы
		{
			fbutton* c=(fbutton*)CWnd::FromHandle( ((HWND)(lParam)) );
			((FARPROC)c->func)();
		}
	}

	return CWnd::WindowProc(message, wParam, lParam);
}
"Брось бяку!" Открой для себя Qt,жизнь станет просче,гарантирую!
(Offline)
 
Ответить с цитированием