CBCGPImage的GetSize的问题及解决方法
BCGControlBar Pro for MFC 25.10是目前(2018-07-16)网上能够找到的最新能够使用的版本,我配合Visual Studio 2010使用。在单文档MFC程序的视图中上下/左右居中显示一幅图片,最终效果如下。
发现关于CBCGPImage的一个奇怪问题,如下:
// m_Image.GetSize()首次调用得到的图片尺寸为(0,0),
// 第二次DrawImage调用得到正确的图片像素尺寸
// m_Image.GetSize(m_pGM) 每次都可以得到正确的图片像素尺寸
程序源代码如下:
1、在SDI程序的stdafx.h文件末尾,添加:
#include <BCGCBProInc.h>
2、在SDI程序的ChildView.h文件的CChildView类定义中,添加:
CBCGPGraphicsManager* m_pGM;
CBCGPImage m_Image;
void DrawImage();
3、在SDI程序的ChildView.cpp 文件中,添加:
3.1在构造函数CChildView::CChildView()中添加:
m_pGM = NULL;
m_Image.Load(TEXT("D:\\myPicture.JPG")); // 导入提前定义好的图片文件
3.2在析构函数CChildView:: ~CChildView()中添加:
if (m_pGM != NULL) delete m_pGM;
3.3在绘图函数void CChildView::OnPaint()中添加:
if (m_pGM == NULL) m_pGM = CBCGPGraphicsManager::CreateInstance();
if (m_pGM == NULL) return;
m_pGM->BindDC(&dc);
m_pGM->BeginDraw();
m_pGM->Clear(CBCGPColor::White);
DrawImage();
m_pGM->EndDraw();
3.3定义显示图片函数void CChildView::DrawImage():
void CChildView::DrawImage()
{
ASSERT_VALID(m_pGM);
CRect rectClient;
GetClientRect(rectClient);
// m_Image.GetSize()首次调用得到的图片尺寸为(0,0),
// 第二次DrawImage调用得到正确的图片像素尺寸
// m_Image.GetSize(m_pGM) 每次都可以得到正确的图片像素尺寸
CBCGPSize imgSize = m_Image.GetSize(m_pGM);
CBCGPPoint pntPos = CBCGPPoint(
max( 0, 0.5*(rectClient.Width() - imgSize.Width()) ),
max( 0, 0.5*(rectClient.Height() - imgSize.Height()) ) );
m_pGM->DrawImage(m_Image, pntPos, imgSize);
}
上一篇: php中explode函数用法分析
下一篇: 八年数据库之路的感悟
推荐阅读
-
win10系统设备管理器没有端口怎么办 win10设备管理器没有端口的多种原因及解决方法
-
表单提交错误后返回内容消失问题的解决方法(PHP网站)
-
详解DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法
-
Ajax跨域访问Cookie丢失问题的解决方法_AJAX相关
-
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
-
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
-
笔记本电脑电池无法充满电的可能原因及解决方法整理
-
mysql/Java服务端对emoji的支持与问题解决方法详解
-
浏览器解析js生成的html出现样式问题的解决方法_javascript技巧
-
phpmailer 发送邮件中文乱码问题的解决方法总结