不一定。只要在lpfnWndProc函数起作用之前调用就可以了(即执行了SetWindowLong之后,lpfnWndProc才会被系统调用),通常情况下是放在oninit中的。
对,先执行你的响应代码,然后再执行系统默认的响应代码(DefWindowProc)。
好像和第二问题相同。先执行自定义代码,如果你的自定义代码中,直接return函数(未调用DefWindowProc),那么这个消息的行为就被你改变了。
----------------------------------
DefWindowProc就是系统默认的处理。你的自定义代码和DefWindowProc的先后顺序就是调用顺序。不调用DefWindowProc就是不执行系统默认处理。
回调函数并不是mfc专有的,在非mfc中也有,有时候设置回调函数其实是希望某个程序执行过程中希望某个函数被调用,而这个被调用的函数习惯上叫回调函数,只是一种称呼而已,每一个窗口程序在注册窗口类的时候都要填写一个窗口过程函数指针,其实这个窗口过程函数也可以叫做回调函数,只不过习惯叫窗口过程。举个例子,在编写复制文件的程序时候,调用复制文件的函数时候,也可以设置一个回调函数,那么在系统进行文件复制的过程中会不断调用这个回调函数,回调函数的参数中就有一个指明复制了几个字节数据,因此我们就可以在回调函数里面统计已经复制了多少个字节,根据统计可以绘制文件复制进度等,如果没有设置回调函数的话,复制的过程中就没有机会知道当前复制的进度,因为复制文件只需要调用一个API,复制文件其实由驱动程序来完成,API仅仅是给驱动发一个命令而已。你在你的串口类SerialPort里面加一个线程函数或者回调函数private函数:static DWORD WINAPI ReceiveData(LPVOID lpParam) //线程函数
static WORD ProcessReceiveData(void* data);
void ProcessData(DWORD (*Func)(void*) )//回调函数
然后再你接收数据的地方创建一个线程或者回调函数来处理你从串口接收到的数据:
CreateThread(NULL, 0, ReceiveData, this(或者你传入的参数) ,NULL, 0);//忘记了函数参数啊 或者
ProcessData(ProcessReceiveData);
最后将该数据在编辑框中显示出来就可以了
(CEdit*)GetDlgItem(ID_xxx)->SetWindowsText("DATA")
只是提供一个思路
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)