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);
}
CBCGPImage的GetSize的问题及解决方法的更多相关文章
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
- iPhone Anywehre虚拟定位提示“后台服务未启动,请重新安装应用后使用”的解决方法
问题描述: iPhone越狱了,之后在Cydia中安装Anywhere虚拟定位,但是打开app提示:后台服务未启动,请重新安装应用后使用. 程序无法正常使用... 解决方法: 打开Cydia-已安装, ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- js闭包for循环总是只执行最后一个值得解决方法
<style> li{ list-style: none;width:40px;height: 40px;text-align:center;line-height: 40px;curso ...
- mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...
- maven常见异常以及解决方法
本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...
- WebEssentials 在vs2013 update5安装报错的解决方法.
WebEssentials 最高支持到update4 如果更新到了update5 RC, 则无法直接安装. 解决方法是 1,下载WebEssentials2013.vsix 文件. 2, 安装7zip ...
- [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一
1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...
随机推荐
- [转]25个HTML5和JavaScript游戏引擎库
本文转自:http://www.open-open.com/news/view/27c6ed 1. The GMP JavaScript Game Engine GMP是一个基于精灵2-D游戏,它可以 ...
- logback.xml日志文件过滤器配置简析
自定义过滤器 java代码,目的是在mdc中放值,然后在日志中打印 package com.controller; import com.pojo.JsonData; import org.slf4j ...
- maven课程 项目管理利器-maven 3-4 eclipse安装maven插件和新建maven项目
本节主要讲了两个主要内容, 1 eclipse安装maven插件 2 新建maven项目 3 本人实操 1 eclipse安装maven插件 eclipse4.0以上和myec ...
- Java方法命名之“由简入繁”原则
1.访问控制层(Controller 层)中的方法命名方向是简洁明了,向着自然化语言方向靠拢,比如“更新用户”,建议命名为“updateUser”,而非“updateUserById”,实际上我们更新 ...
- python--Time(时间)模块
要使用一个模块,首先要把模块导入进来 import time 我们先把这一篇文章需要用的模块导入进来 首先说一下time模块,time模块中的函数 --sleep:休眠指定的秒数(可以是小数) imp ...
- 《深入理解Java 7核心技术与最佳实践》读书笔记(2) Java语言动态性引言
Java语言是一种静态类型的编程语言.静态类型的含义是指在编译时进行类型检查.Java源代码中的每个变量的类型都要显式地进行声明.所有变量.方法的参数和方法返回值的类型在程序运行之前就必须是已知的.J ...
- tcpdump确认服务器连接的交换机信息
Displaying CDP info via tcpdump or snoop Cisco Discovery Protocol is a management protocol that Cisc ...
- SQLServer:执行计划
http://www.cnblogs.com/kissdodog/category/532309.html
- 初看Mybatis 源码 (一)
Mybatis 的使用,首先需要构建一个SqlSessionFactory 实例.而该实例可以通过SqlSessionFactoryBuilder来创建. String resource = &quo ...
- Element(Vue)+Express(Node)模拟服务器获取本地json数据
网上很多教程说需要在build目录下的dev-server.js文件中配置,但目前最新的vue-cli是没有dev-server.js这个文件的,因为已经被合并到webpack.dev.conf.js ...