掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビットマップを使用して波形の表示をするには (ID:56069)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
色々と間違った使い方をしていたようで、自分なりに調べて 新しく処理を作りかえました。 ************************************ 1.メンバー変数に2変数を追加 CDC m_memDC; CBitmap m_memBmp; 2.OnInitDialog() でこの2つの変数を初期化 CRect rct; GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> GetWindowRect(&rct); CDC *pDC = GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> GetDC(); m_memBmp.CreateCompatibleBitmap(pDC, rct.Width(), rct.Height()); m_memDC.CreateCompatibleDC(pDC); m_memDC.SelectObject(&m_memBmp); GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> ReleaseDC(pDC); // メモリ上のビットマップイメージを初期化しています。 CDC dc; CBitmap bitmap; bitmap.LoadBitmap(IDB_WAVE_SCREEN_1); // 初期画面のビットマップ dc.CreateCompatibleDC(&m_memDC); CBitmap *pOldBmp = dc.SelectObject(&bitmap); m_memDC.BitBlt(0, 0, rct.Width(), rct.Height(), &dc, 0, 0, SRCCOPY); dc.SelectObject(pOldBmp); dc.DeleteDC(); bitmap.DeleteObject(); 3.OnPaint() に以下のコードを記述 // --------------------------------- // グラフ領域の表示 // --------------------------------- CDC *pDC = GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> GetDC(); CRect rct; GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> GetClientRect(&rct); pDC -> BitBlt(0, 0, rct.Width(), rct.Height(), &m_memDC, 0, 0, SRCCOPY); GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> ReleaseDC(pDC); 4.波形を描画するための処理 void CANALOGDlg::WriteWave() { int i; double nYten; CDC dc; CBitmap bitmap; CDC *pDC = GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> GetDC(); bitmap.LoadBitmap(IDB_WAVE_SCREEN_2); dc.CreateCompatibleDC(pDC); CBitmap *pOldBmp = dc.SelectObject(&bitmap); CRect rct; GetDlgItem(IDC_WAVE_DRAW_WINDOW) -> GetClientRect(&rct); // グラフ波形 ライン設定 CPen GraphPEN(PS_SOLID, 1, RGB(255, 255, 255)); dc.SelectObject(&GraphPEN); dc.MoveTo(0, (int)(wave_zero - ((dDataV_ch[0][0] / volt_scale) * wave_zero))); for(i = 1; i <= draw_point; i += skip_data) { nYten = (dDataV_ch[0][i] / volt_scale) * wave_zero; dc.LineTo((int)(skip_draw * i),(int)(wave_zero - nYten)); } m_memDC.BitBlt(0, 0, rct.Width(), rct.Height(), &dc, 0, 0, SRCCOPY); dc.SelectObject(pOldBmp); dc.DeleteDC(); bitmap.DeleteObject(); OnPaint(); } 5.DestroyWindow() に下記のコードを記述 void CANALOGDlg::OnDestroy() { m_memDC.DeleteDC(); m_memBmp.DeleteObject(); } *********************************** IDC_WAVE_DRAW_WINDOWはグラフを表示する為のピクチャーコントロール IDB_WAVE_SCREEN_1は背景を黒く塗り、白線で縦、横を10等分にした罫線を引いたビットマップ IDB_WAVE_SCREEN_2はIDB_WAVE_SCREEN_1と同じビットマップを設定 これにより、起動時にはIDB_WAVE_SCREEN_1が表示され、グラフ表示の処理が走るとWriteWave()でIDB_WAVE_SCREEN_2に波形を描画したものが表示されるようになりました。 今のところしたかった動作をしているのですが もし、改善点があればご指摘いただけますようお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.