forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   MFC (http://forum.boolean.name/showthread.php?t=12001)

Mr_F_ 22.02.2010 20:47

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);
}


Igor' 23.02.2010 20:21

Ответ: MFC
 
Цитата:

Сообщение от Mr_F_ (Сообщение 138842)
Кто-нибудь юзал?

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

Mr_F_ 24.02.2010 09:31

Ответ: MFC
 
что такое Qt

Igor' 24.02.2010 09:35

Ответ: MFC
 
Цитата:

Сообщение от Mr_F_ (Сообщение 139149)
что такое Qt

Qt - A cross-platform application and UI framework
http://qtlib.ru/


Часовой пояс GMT +4, время: 04:14.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot