【问题标题】:bitmap by diceroll骰子的位图
【发布时间】:2013-04-25 00:36:44
【问题描述】:

你会如何掷骰子并显示相应的骰子面位图

一些快速有效的代码示例?

void CMFCApplication12Dlg::OnBnClickedDiceroll()

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

// void 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);
    }

【问题讨论】:

    标签: c++ visual-studio-2012 mfc bitmap


    【解决方案1】:

    使用InvalidateRect 使窗口无效,以便它重新绘制自己。在WM_PAINT 处理程序中,您需要将模具编号转换为资源ID。然后使用LoadImage 从资源中加载位图。创建内存DC并选择位图到里面,然后使用BitBlt复制到窗口中。

    【讨论】:

    • @Mac 您拥有的代码看起来是一个好的开始。不要把它放在 OnBnClicked 处理程序中,而是把它放在 OnPaint 处理程序中。您不需要 CClientDC,因为您会在 OnPaint 中自动获得一个。
    • @Mac 正如我所说,您调用 InvalidateRect 并且 OnPaint 将因此而被调用。
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2012-02-29
    • 2013-10-30
    • 2017-04-09
    相关资源
    最近更新 更多