我想在程序里面某个地方发送自定义消息,然后执行某些操作,但是SendMessage的用法不熟悉,编译通过不了,下面是我用的步骤,大家帮忙看看
第一步
#define WM_SUCCESSACCEPTREG WM_USER+101
第二步
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)后面加入
ON_MESSAGE(WM_SUCCESSACCEPTREG,OnSuccessAcceptReg) 这个是报错的那个第80行
END_MESSAGE_MAP()
第三步
afx_msg LRESULT OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam);
第四步
SendMessage(WM_SUCCESSACCEPTREG,(WPARAM)0,(LPARAM)0);
第五步
这个是那个执行的函数
LRESULT C0506Dlg::OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("获取自定义消息!");
return 0;
}编译通过不了
0506Dlg.cpp(80) : error C2065: 'OnSuccessAcceptReg' : undeclared identifier
0506Dlg.cpp(80) : error C2440: 'type cast' : cannot convert from 'int *' to 'long (__thiscall CWnd::*)(unsigned int,long)'
上面是按照网上介绍的写的,后来看了别人程序,把把第三步和第5步改了下
第三步
void OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam);
第五步
void C0506Dlg::OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("获取自定义消息!");
}
但是还是不行,不知道是哪里错了。
第一步
#define WM_SUCCESSACCEPTREG WM_USER+101
第二步
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)后面加入
ON_MESSAGE(WM_SUCCESSACCEPTREG,OnSuccessAcceptReg) 这个是报错的那个第80行
END_MESSAGE_MAP()
第三步
afx_msg LRESULT OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam);
第四步
SendMessage(WM_SUCCESSACCEPTREG,(WPARAM)0,(LPARAM)0);
第五步
这个是那个执行的函数
LRESULT C0506Dlg::OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("获取自定义消息!");
return 0;
}编译通过不了
0506Dlg.cpp(80) : error C2065: 'OnSuccessAcceptReg' : undeclared identifier
0506Dlg.cpp(80) : error C2440: 'type cast' : cannot convert from 'int *' to 'long (__thiscall CWnd::*)(unsigned int,long)'
上面是按照网上介绍的写的,后来看了别人程序,把把第三步和第5步改了下
第三步
void OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam);
第五步
void C0506Dlg::OnSuccessAcceptReg(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("获取自定义消息!");
}
但是还是不行,不知道是哪里错了。
应该加到C0506Dlg 这个里面的消息映射 还是用上面的LRESULT 方式 不要用void
声明消息#define WM_HIDE WM_USER+110
在回调函数中做对消息的处理
我用DLGBOX示例:BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HINSTANCE hi;
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
//HANDLE_MSG(hWnd,WM_CTLCOLOR, Main_OnCtlColor);
HANDLE_MSG(hWnd,WM_TIMER, Main_OnTimer);
case WM_HIDE:
{
MessageBox(hWnd,"HIDE","",0);
ShowWindow(hWnd,SW_HIDE);
}break;
}
return FALSE;
}然后调用就可以了
例如按下BUTTON
case IDC_OK:
SendMessage(hwnd,WM_HIDE,0,0);
break;