ちらつき防止と波形描写
開発環境:
OS : vista
visual stdio c++ 2010
C言語でAPIを使っています。
録音と再生、波形表示のプログラムを作っています。
子ウィンドウを作成して、子ウィンドウにリアルタイムに波形表示を行おうと思っているのですが、上手くいきません。
画面がちらつき、再生も上手くいかなくなってしまいます。
別ウィンドウにリアルタイム波形描写する方法は、どのような方法があるのでしょうか。
現在は下記のような感じになっています。
自分が思いつく方法は、SendMessageを使うことくらいでした。
///////////////////
struct Draw
{
RECT m_recGraph , m_recGraphHalf, m_recGraph_FFT ;
HDC m_hPaint, m_hdcBMP[4];
HBITMAP m_hBMP[4] , m_hOld[4];
PAINTSTRUCT m_hPs;
HPEN m_hPenLine;
};
static LPBYTE SaveData; //録音された音データ
//子ウィンドウ
LRESULT CALLBACK ChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static Draw DrawS;
switch( uMsg )
{
case WM_CREATE:
描写領域のハンドルなどの収得
return 0;
case 12345: //番号は適当。とりあえずこれにする。
描写領域の裏描写
InvalidateRect( hwnd, NULL, FALSE );
return 0;
case WM_PAINT:
DrawS.m_hPaint = BeginPaint( proc.m_hWnd, &DrawS.m_hPs );
BitBlt( DrawS.m_hPaint, 150, 48, 600, 256, DrawS.m_hdcBMP[1], 0, 0, SRCCOPY);
BitBlt( DrawS.m_hPaint, 150, 350, 600, 300, DrawS.m_hdcBMP[2], 0, 0, SRCCOPY);
EndPaint(proc.m_hWnd, &DrawS.m_hPs);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//親ウィンドウ
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LPBYTE DrawData; //子ウィンドウに渡すため
switch( uMsg )
{
・
・
・
録音や再生の処理
・
・
・
case MM_WOM_OPEN:
再生のための処理
return 0;
case MM_WOM_DONE: //再生済みバッファがここにやってくる
再生済みバッファに次のデータを入れインキュー
インキューされたデータをDrawDataにもコピー
SendMessage( 子ウィンドウハンドル, 12345. NULL, (LPSTR)DrawData );
//ここで子ウィンドウに必要なデータを送り描写させています。強引にですが・・。
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
お礼
回答有難うございました。とても参考になり助かりました。