CBCGPImage的GetSize的问题及解决方法

2018-07-16 02:36:07来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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);

}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:线段树的应用一中模拟lites

下一篇:记忆化搜索(例)