MFC自定义消息
第一步 准备
创建自定义消息(Dlg.h)
绑定消息对应的响应事件(Dlg.cpp)
第二步 编写响应函数 在类视图(Class View)中添加响应消息
响应函数中可以不带参数,可以只带一个参数,最多带两个参数
获取参数
若传递过来的参数(wParam)为DWORD或UINT类型,可直接使用. 若传递过来的参数(lParam)为DWORD或LONG类型,可直接使用. 否则:
例1:获取double类型
double * dNum = (double *)wParam; //double * dNum = (double *)wLaram; 例2:获取CString类型
CString *str=(CString*)wParam; //CString *str=(CString*)wLaram; 例3:获取结构体类型
Struct * s=(Struct*)wParam;
//Struct * s=(Struct*)wLaram;
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
:我们先获取传递过来的指针地址(WPARAM、LPARAM格式),然后转换为原始数据格式的指针(double *;CString *等)便可以进行引用了。
第三步 调用SendMessage 类函数调用
不带参数可直接使用SendMessage(WM_SEND, 0, 0);
非类函数(C全局函数)调用
不带参数可直接使用SendMessage(hwnd,WM_SEND, 0, 0); 其中,hwnd可以通过类函数传递过来(this->m_hWnd),也可以自动获取
AfxGetApp();//获取主线程指针CWinApp *
AfxGetApp()->GetMainWnd();//获取主窗口对象指针CWnd *
AfxGetMainWnd();//获取主窗口对象指针CWnd *
HWND hwnd = AfxGetMainWnd()->m_hWnd; //获取主窗口句柄
HWND hwnd = AfxGetMainWnd()->GetSaveHwnd();//获取主窗口句柄
传递参数
传递参数为DWORD或UINT类型,可直接使用wParam
传递参数为DWORD或LONG类型,可直接使用lParam.
否则:
例1:传递double类型
double * dNum = new dNum;//栈堆内存问题
*dNum = 1.0;
SendMessage(WM_SEND, (WPARAM)dNum, 0); //SendMessage(WM_SEND, 0, (LPARAM)dNum); //SendMessage(hwnd,WM_SEND, (WPARAM)dNum, 0); //SendMessage(hwnd,WM_SEND, 0, (LPARAM)dNum);
:传递CString类型 例2
CString * str = new CString(“hello”);
SendMessage(WM_SEND, (WPARAM) str, 0); //SendMessage(WM_SEND, 0, (LPARAM) str); //SendMessage(hwnd,WM_SEND, (WPARAM) str, 0); //SendMessage(hwnd,WM_SEND, 0, (LPARAM) str); 例3:传递结构体
Struct * s = (Struct *)malloc(sizeof(Struct)); s->a=1;
s->b=2;
SendMessage(WM_SEND, (WPARAM)s, 0); //SendMessage(WM_SEND, 0, (LPARAM)s); //SendMessage(hwnd,WM_SEND, (WPARAM)s, 0); //SendMessage(hwnd,WM_SEND, 0, (LPARAM)s); 总结:我们先建立一个堆数据(new),保证数据在传递后不会释放其自身内存,然后用SendMessage传递其指针地址(并转换为WPARAM、LPARAM格式)。
不同对话框间通信
在接受对话框Dlg类中执行第一、二步
在发送对话框Dlg类中执行第三步(注意hwnd为接受对话框的句柄)