Тема: MFC
Показать сообщение отдельно
Старый 22.02.2010, 20:47   #1
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
MFC

Кто-нибудь юзал?

Дано:
Окно с кнопкой.
И то и другое имеют свои классы, дерив..ова..ные (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()
{
 
}
И собсно вот! В послденей функции надо получить поинтер на нажатую кнопку, от которой по идее шёл месседж. Как это сделать?

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

21.02.2010 17:33:48, Mr F
MFC запутанное говно
21.02.2010 18:58:22,
+100

---

22.02.2010 19:32:22,
В МФЦ там все как-то по другому и через жопу сделано

---

22.02.2010 19:12:05,
ты извращенец!
но тем не менее требуется так вот сделать


-----
хм, если овверрайдить 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);
}
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер

Последний раз редактировалось Mr_F_, 22.02.2010 в 22:14.
(Offline)
 
Ответить с цитированием