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

}

CBCGPImage的GetSize的问题及解决方法的更多相关文章

  1. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  2. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  3. iPhone Anywehre虚拟定位提示“后台服务未启动,请重新安装应用后使用”的解决方法

    问题描述: iPhone越狱了,之后在Cydia中安装Anywhere虚拟定位,但是打开app提示:后台服务未启动,请重新安装应用后使用. 程序无法正常使用... 解决方法: 打开Cydia-已安装, ...

  4. python中IndentationError: expected an indented block错误的解决方法

    IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进

  5. js闭包for循环总是只执行最后一个值得解决方法

    <style> li{ list-style: none;width:40px;height: 40px;text-align:center;line-height: 40px;curso ...

  6. mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!

    mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...

  7. maven常见异常以及解决方法

    本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...

  8. WebEssentials 在vs2013 update5安装报错的解决方法.

    WebEssentials 最高支持到update4 如果更新到了update5 RC, 则无法直接安装. 解决方法是 1,下载WebEssentials2013.vsix 文件. 2, 安装7zip ...

  9. [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一

    1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...

随机推荐

  1. [转]25个HTML5和JavaScript游戏引擎库

    本文转自:http://www.open-open.com/news/view/27c6ed 1. The GMP JavaScript Game Engine GMP是一个基于精灵2-D游戏,它可以 ...

  2. logback.xml日志文件过滤器配置简析

    自定义过滤器 java代码,目的是在mdc中放值,然后在日志中打印 package com.controller; import com.pojo.JsonData; import org.slf4j ...

  3. maven课程 项目管理利器-maven 3-4 eclipse安装maven插件和新建maven项目

    本节主要讲了两个主要内容, 1       eclipse安装maven插件 2 新建maven项目 3 本人实操 1       eclipse安装maven插件 eclipse4.0以上和myec ...

  4. Java方法命名之“由简入繁”原则

    1.访问控制层(Controller 层)中的方法命名方向是简洁明了,向着自然化语言方向靠拢,比如“更新用户”,建议命名为“updateUser”,而非“updateUserById”,实际上我们更新 ...

  5. python--Time(时间)模块

    要使用一个模块,首先要把模块导入进来 import time 我们先把这一篇文章需要用的模块导入进来 首先说一下time模块,time模块中的函数 --sleep:休眠指定的秒数(可以是小数) imp ...

  6. 《深入理解Java 7核心技术与最佳实践》读书笔记(2) Java语言动态性引言

    Java语言是一种静态类型的编程语言.静态类型的含义是指在编译时进行类型检查.Java源代码中的每个变量的类型都要显式地进行声明.所有变量.方法的参数和方法返回值的类型在程序运行之前就必须是已知的.J ...

  7. tcpdump确认服务器连接的交换机信息

    Displaying CDP info via tcpdump or snoop Cisco Discovery Protocol is a management protocol that Cisc ...

  8. SQLServer:执行计划

    http://www.cnblogs.com/kissdodog/category/532309.html

  9. 初看Mybatis 源码 (一)

    Mybatis 的使用,首先需要构建一个SqlSessionFactory 实例.而该实例可以通过SqlSessionFactoryBuilder来创建. String resource = &quo ...

  10. Element(Vue)+Express(Node)模拟服务器获取本地json数据

    网上很多教程说需要在build目录下的dev-server.js文件中配置,但目前最新的vue-cli是没有dev-server.js这个文件的,因为已经被合并到webpack.dev.conf.js ...