2013-04-25 29 views
0

滾動骰子並顯示相應的裸片位圖由diceroll製作的位圖

一些快速高效的代碼示例?

void CMFCApplication12Dlg::OnBnClickedDiceroll() 

    { 
     int die1 = 1 + rand() % 6; // first die roll 
     int die2 = 1 + rand() % 6; // second die roll 
     //display die1 & die2 
    } 

// 無效CMFCApplication12Dlg :: OnPaint處理()

{ 
//load the image file 
    CString szFilename("C:\\Talla\\yourimg.bmp"); 
    HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename, 
    IMAGE_BITMAP,0,0, 
    LR_LOADFROMFILE|LR_CREATEDIBSECTION); 

//Create a Bitmap Object and Attach It to the Object 
    CBitmap bmp; 
    bmp.Attach(hBmp); 

// Create a Memory DC and Select the BMP to It 
    CClientDC dc(this); 
    CDC bmDC; 
    bmDC.CreateCompatibleDC(&dc); 
    CBitmap *pOldbmp = bmDC.SelectObject(&bmp); 

//Get the BMP Height and Width 
    BITMAP bi; 
    bmp.GetBitmap(&bi); 

//Get the Block of Pixels from memoryDC to the Screen 

    dc.BitBlt(0,0,bi.bmWidth,bi.bmHeight,&bmDC,0,0,SRCCOPY); 
    bmDC.SelectObject(pOldbmp); 
    } 

回答

2

無效窗口InvalidateRect使其重繪本身。在WM_PAINT處理程序中,您需要將骰子編號轉換爲資源ID。然後,您使用​​從資源加載位圖。創建一個內存DC並選擇位圖,然後使用BitBlt將其複製到窗口。

+0

詳細說明...... – Mac 2013-04-25 01:46:06

+0

@Mac代碼你看起來像一個很好的開始。不要將它放在OnBnClicked處理程序中,而要將它放在OnPaint處理程序中。您不需要CClientDC,因爲您會在OnPaint中自動獲取一個。 – 2013-04-25 02:14:38

+0

@Mac正如我所說的,你調用InvalidateRect並且OnPaint會被調用。 – 2013-04-25 02:40:54