MFC笔记:GDI+贴图、双缓冲绘图、向屏幕上输出文字
来源:互联网 发布:卓鸿网络 编辑:程序博客网 时间:2024/06/10 08:39
CImage类是一个非常有用的类,利用它可以非常简单地实现贴图。
1)加载图片
basic_ui.Load("pic\\basic_ui.png");可以读png实现直接的透明贴图,括号中填写绝对/相对路径即可。
2)透明化
直接读进来的png如果直接贴会花屏,需要进行一步处理:
void TransparentPNG(CImage *png){for(int i = 0; i <png->GetWidth(); i++){for(int j = 0; j <png->GetHeight(); j++){unsigned char* pucColor = reinterpret_cast<unsigned char*>(png->GetPixelAddress(i , j));pucColor[0] = pucColor[0] *pucColor[3] / 255;pucColor[1] = pucColor[1] *pucColor[3] / 255;pucColor[2] = pucColor[2] *pucColor[3] / 255;}}}本段函数取自于七十一雾央的《C++游戏开发》,好吧不用管这是怎么实现的……总之读进来之后用它处理一下就可以了。
3)贴图
basic_ui.Draw(m_cacheDC, 0,0);green_button.Draw(m_cacheDC, GREEN_BUTTON_COD);直接调用Draw函数即可。第一个参数是HDC,传DC句柄,第二个参数是目的坐标,可以是xy也可以是CPoint。
4)双缓冲绘图
直接在屏幕DC上绘画,会遭遇闪屏的问题,比如响应每次鼠标移动的时候就刷新画面的时候就会闪,随便做一个动画也会闪,这是因为在绘图的时候系统会用白屏填充,结果我们就会看到闪屏。如果我们用双缓冲绘图,就可以解决这个问题了。我们可以把要画的东西画在一个兼容DC上,然后系统刷新画面的时候,就会用这个DC刷新,这样我们就看不到闪屏了。
此段代码同样来自《MFC游戏教程》
先在头文件里创建需要的东西:
<span style="white-space:pre"></span>CRect m_client;<span style="white-space:pre"></span>CDC m_cacheDC; //缓冲DC <span style="white-space:pre"></span>CBitmap m_cacheCBitmap;//缓冲位图
然后在OnDraw函数里:
//创建缓冲DCGetClientRect(&m_client);m_cacheDC.CreateCompatibleDC(NULL);m_cacheCBitmap.CreateCompatibleBitmap(pDC, m_client.Width(),m_client.Height());m_cacheDC.SelectObject(&m_cacheCBitmap);
先创建兼容DC,然后创建兼容Bitmap,然后选定该Bitmap即可。
之后所有的东西都画在该兼容DC上,最后的时候
pDC->BitBlt(0, 0, m_client.Width(), m_client.Height(), &m_cacheDC,0,0,SRCCOPY); ValidateRect(m_client);m_cacheCBitmap.DeleteObject();m_cacheDC.DeleteDC();先贴图,然后扔掉用的DC句柄即可。
4)向屏幕上输出文字
CFont font;font.CreatePointFont(120,"微软雅黑", &m_cacheDC);m_cacheDC.SelectObject(font);
这样就可以创建并选定一个字体,然后TextOut即可。
CString buffer("现在时刻:");CString now_time = pDoc->GetNowTime();buffer = buffer + now_time;m_cacheDC.TextOut(TIME_COD.x, TIME_COD.y, buffer);
这里引用的代码都来自 http://blog.csdn.net/column/details/megogame.html
0 0
- MFC笔记:GDI+贴图、双缓冲绘图、向屏幕上输出文字
- GDI 双缓冲贴图
- MFC中的GDI/GDI+和双缓冲绘图
- MFC中的GDI/GDI+和双缓冲绘图
- GDI双缓冲绘图
- GDI双缓冲绘图
- GDI双缓冲绘图
- GDI双缓冲绘图
- MFC GDI+双缓冲
- GDI+ 输出文字 贴图 矩形 画线
- c# 双缓冲绘图GDI
- MFC绘图,双缓冲
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- 【测绘】高速公路中线放样
- 功课数学分析(一) 第一讲
- 第十二周项目-阅读程序
- jQuery获取Select选择的Text和Value
- HTTP中的keepalive(长连接)
- MFC笔记:GDI+贴图、双缓冲绘图、向屏幕上输出文字
- Linux - Vsftp之安装和配置
- 给tableview Cell添加动画(两种实现方法 效果还不错)
- SrcExpl 插件实现自动显示跳转函数及变量定义功能
- cURL简单使用、libcurl编程, curl_easy_setopt
- Delphi XE5 for Android (一)
- C Primer Plus(第五版)学习(一)
- 第十二周项目-阅读程序
- apt-get命令简单记录