Я хочу иметь обработчик сообщений в MFC, который принимает любые параметры, которые я определяю на карте сообщений.mfc - sendmessage/postmessage с настраиваемыми параметрами
Например,
static UINT UWM_STATUS_MSG = RegisterWindowMessage("Status message");
static UINT UWM_GOT_RESULT= RegisterWindowMessage("Result has been obtained");
//{{AFX_MSG(MyClass)
afx_msg void OnCustomStringMessage(LPCTSTR);
afx_msg void OnStatusMessage();
//}}AFX_MSG
BEGIN_MESSAGE_MAP(MyClass, CDialog)
//{{AFX_MSG_MAP(MyClass)
ON_REGISTERED_MESSAGE(UWM_STATUS_MSG, OnStatusMessage)
ON_REGISTERED_MESSAGE(UWM_GOT_RESULT, OnCustomStringMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void MyClass::OnCustomStringMessage(LPCTSTR result)
{
m_result.SetWindowText(result);
}
void MyClass::OnStatusMessage()
{
// Do something
}
DWORD WINAPI MyClass::thread(LPVOID lParam)
{
char result[256] = { 0 };
SendMessage(UWM_STATUS_MSG);
// Do some stuff and store the result
PostMessage(UWM_GOT_RESULT, result);
}
ли такое возможно?
Итак, нет способа обойти переменные 'WPARAM' и' LPARAM' в качестве аргументов? Я просто подумал, что все эти кастинги и дополнительные переменные будут лишними. Мне было интересно, есть ли другой метод обработки сообщений, который больше подходит для моей задачи. Отсюда вопрос. Спасибо за ваш ответ, хотя! –
Кроме того, о 'result', да. Но это была лишь небольшая демонстрация того, что я хотел. Я буду заботиться обо всем этом. Спасибо :) –
Нет, вы не можете передавать параметры других типов таким функциям-членам. Если вы беспокоитесь о дополнительных переменных, вы также можете написать «m_result.SetWindowText ((LPCTSTR) p1)». –