Кто-нибудь юзал?
Дано:
Окно с кнопкой.
И то и другое имеют свои классы, дерив..ова..ные (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);
}