15,980
社区成员




public:
UINT IDJPG[4];
int i;
int m_iPic;
CBrush m_brBk;
CBitmap bmp;
CPoint pt;
CPen pen;
CBrush cbrush;
CTestJPGDlg::CTestJPGDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestJPGDlg::IDD, pParent)
{
IDJPG[0] = IDR_JPG1;
IDJPG[1] = IDR_JPG2;
IDJPG[2] = IDR_JPG3;
IDJPG[3] = IDR_JPG4;
i = 0;
m_iPic = 1;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
BOOL CTestJPGDlg::OnInitDialog()
{
…………
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
//初始化一个画笔-------------------------------
pen.CreatePen(PS_INSIDEFRAME,1,RGB(255,0,0));
SetTimer(1, 1000, NULL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CTestJPGDlg::OnPaint()
{
DrawCircle();
CPaintDC dc(this);
}
void CTestJPGDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nIDEvent == 1)
{
pt.x=(long)rand()%100+30;
pt.y=(long)rand()%100+30;
DrawCircle();
i++;
m_iPic++;
if ( i == 4 )
{
i = 0;
}
if ( m_iPic == 40 )
{
m_iPic = 0;
}
/*if (m_iPic < 80)
{
m_iPic++;
}*/
}
CDialog::OnTimer(nIDEvent);
}
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Gdiplus::Image * &pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); //type
if (!hRsrc)
{
return FALSE;
}
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
{
return FALSE;
}
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}
//画图函数-------------------------
void CTestJPGDlg::DrawPicture(void)
{
m_brBk.DeleteObject();
bmp.DeleteObject();
Image *pBackImage = NULL;
//int index = min(4,m_iPic/10);
if ( ImageFromIDResource(/*IDJPG[index]*/IDJPG[m_iPic/10],_T("JPG"),pBackImage) )
{
CDC *pDC = GetDC();
Graphics graph(pDC->m_hDC);
CRect rect;
GetClientRect(&rect);
Rect rectClient(rect.left,rect.top,rect.Width(),rect.Height());
graph.DrawImage(pBackImage,rectClient);
ReleaseDC(pDC);
}
//pDC->FillRect(rect,&m_brBk);
}
//画圆函数---------------------
void CTestJPGDlg::DrawCircle()
{
DrawPicture();
CDC *pDC = GetDC();
CPen *pPen = pDC->SelectObject(&pen);
cbrush.CreateSolidBrush(RGB(255,0,0));
CBrush *poldbrush = pDC->SelectObject(&cbrush);
pDC->Ellipse(pt.x-30,pt.y-30,pt.x+30,pt.y+30);
//Sleep(500); //不用这个
//Sleep(500);
pDC->SelectObject(poldbrush);
pDC->SelectObject(pPen);
//Invalidate();
cbrush.DeleteObject();
ReleaseDC(pDC);
}
HBRUSH CTestJPGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
if (pWnd == this)
{
return m_brBk;
}
return hbr;
}