我目前正在开发一个程序(C++ Win32,Visual Studio 2012),它从麦克风捕获音频信号,在另一个线程中计算傅立叶变换(你知道,以获取音频中的频率),最后在屏幕上绘制结果.
一切正常,除了绘图,所以这是一个与 GUI 相关的主题。
在 WndProc 中,当缓冲区已满并准备好处理时,我会收到一条消息,然后我调用
boost::thread t(&ComputationThread,data);
启动计算线程。
最后,ComputationThread
我向 GUI 线程发送一条消息以绘制数据,使用预定义的固定值和数据指针作为参数:
SendMessage(hWnd, WM_PAINT, PARAM_FFT_COMPUTED, (LPARAM)data);
这也很好,我收到消息,我也可以将计算的数据写入文件,但是,在表单上绘图(例如 using SetPixel
)没有效果,而当它不是时它有效果wParam
,例如 PARAM_FFT_COMPUTED
当表单被调整大小。
InvalidateRect
也没有效果。
我究竟做错了什么?
提前致谢!