admin 管理员组

文章数量: 887021

mfc , 超简单实现动态背景,

1, 在主对话框中, 添加一个类属性 nowOne, 标记循环的位图

2,  在初始化函数中, 添加一个线程, ThreadProc, 不添加直接设置一个定时器也行

//创建动态背景线程DWORD ThreadID = 1;HANDLE pThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, m_hWnd, 0, &ThreadID);

3, 在ThreadProc中, 设置一个定时器, 

DWORD WINAPI ThreadProc(HWND hWnd)
{SetTimer(hWnd, 1, 200, NULL);return 0;
}

4, 在窗口中响应定时器消息,  Invalidate(false), 刷新界面

void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值Invalidate(false);
}

5, 处理窗口中的Onpaint函数, 内容如下, 其中154-202, 是插入位图的资源id

 

CPaintDC dc(this);CRect rc;GetClientRect(&rc);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(nowOne);++nowOne;if (nowOne > 202) nowOne = 154;BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap* pbmpPri = dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0, 0, rc.Width(), rc.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);

 缺点: 文件体积显著增大

效果如图:

 

本文标签: MFC 超简单实现动态背景