C++ 對話盒繪圖畫不出來

我想寫個固定式時間週期就把矩陣資料對映在對話盒中顯示出來的程式

在OnTimer中修改矩陣AAA的值並呼叫Invalidate()刷新畫面

但是在OnPaint()中試了很久都無法順利把矩陣中的資料畫在對話盒上

以下是我的程式碼

void XXXX::OnPaint()

{

BITMAPINFO BIH;

CPaintDC dc(this);

設定BIH相關參數

StretchDIBits(dc.m_hDC, 0, 0, 512, 512, AAA, &BIH, DIB_RGB_COLORS, SRCCOPY)

}

麻煩程式高手幫忙看一下問題出在哪裡

感激不盡

謝謝

Update:

應該是StretchDIBits(dc.m_hDC, 0, 0, 512, 512, 0, 0, 512, 512, AAA, &BIH, DIB_RGB_COLORS, SRCCOPY)才對

另外

我不是要顯示一張已經存在的bitmap

我是要把我程式中某個陣列的值換成顏色表示並顯示在對話盒上

這樣作法跟貼ㄧ張已經存在的BMP有相同嗎?

2 Answers

Rating
  • 1 decade ago
    Favorite Answer

    1. 使用StretchDIBits參數不對. (奇怪這樣能Complier的過嗎?還是你漏寫了)

    2. 參數定義內容

    int StretchDIBits(

    HDC hdc, // handle to DC

    int XDest, // x-coord of destination upper-left corner

    int YDest, // y-coord of destination upper-left corner

    int nDestWidth, // width of destination rectangle

    int nDestHeight, // height of destination rectangle

    int XSrc, // x-coord of source upper-left corner

    int YSrc, // y-coord of source upper-left corner

    int nSrcWidth, // width of source rectangle

    int nSrcHeight, // height of source rectangle

    CONST VOID *lpBits, // bitmap bits

    CONST BITMAPINFO *lpBitsInfo, // bitmap data

    UINT iUsage, // usage options

    DWORD dwRop // raster operation code

    );

    3. 是InvalidateRect, 沒有Invalidate. 後面最好再加上一行UpdateWindows

    4. 理論上這種寫法沒錯, 只要注意上述幾點, 除非BITMAPINFO內容有錯.

    5. 如果要畫一個Bitmap到畫面上, 通常我會這樣用

    void CMyDlg::OnPaint()

    {

    CPaintDC dc( this );

    CBitmap bmp, *poldbmp;

    CDC memdc;

    bmp.LoadBitmap( IDB_CORPLOGO );

    memdc.CreateCompatibleDC( &dc );

    poldbmp = memdc.SelectObject( &bmp );

    dc.BitBlt( 10, 10, 47, 47, &memdc, 0, 0, SRCCOPY );

    memdc.SelectObject( poldbmp );

    }

    2009-01-18 23:44:46 補充:

    那就不要用BITMAP方式, 太複雜又太辛苦了, 用

    dc.SetPixel( x, y, color ); 畫點就可以了

  • 1 decade ago

    先建立一個 DC與bitmap(讀檔),將bitmap先貼到這個 DC,最後在OnPaint將所建立的DC貼到OnPaint裡的DC

Still have questions? Get your answers by asking now.