欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CBCGPImage的GetSize的问题及解决方法

程序员文章站 2023-08-26 14:18:32
BCGControlBar Pro for MFC 25.10是目前(2018-07-16)网上能够找到的最新能够使用的版本,我配合Visual Studio 2010使用。在单文档MFC程序的视图中上下/左右居中显示一幅图片,最终效果如下。 发现关于CBCGPImage的一个奇怪问题,如下: // ......

BCGControlBar Pro for MFC 25.10是目前(2018-07-16)网上能够找到的最新能够使用的版本,我配合Visual Studio 2010使用。在单文档MFC程序的视图中上下/左右居中显示一幅图片,最终效果如下。

 CBCGPImage的GetSize的问题及解决方法CBCGPImage的GetSize的问题及解决方法

发现关于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);

}