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有默认安装,如果没有 ...
随机推荐
- pat1046. Shortest Distance (20)
1046. Shortest Distance (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The ...
- Matlab 2013a 和 VS2010 混合编程
最近由于项目需求,某项目的算法是基于MATLAB完成的,在短时间内需要去调用算法功能.因此,基于MATLAB生成DLL, C 调用的方式完成. 环境:MATLAB 2013a + VS2010 + w ...
- HDU 5418——Victor and World——————【状态压缩+floyd】
Victor and World Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Other ...
- DevExtreme 搭建Node.js开发环境
简介 DevExtreme is a component suite for creating highly responsive web applications for touch devices ...
- 第一次尝试用Open Live Writer写日志
注册博客园很久了,一直没怎么用,今天登陆了一下,看到这个写日志工具,看着不错,试一下
- intellijidea课程 intellijidea神器使用技巧 4-2 抽取
1 抽取变量 Ctrl alt V 抽取变量 Ctrl alt C 抽取静态变量 顺带创建静态方法 Crrl alt F 抽取成员变量 2 抽取方法参数 Ctrl alt P 抽取参数,到方法体中 ...
- 在UITableView中识别左右滑动,实现上下翻页的功能
目前有三种方案: 1. UIScrollView + UITableView. 实现方法,在UIScrollView中,加入UITableView即可 设置UIScrollView的代理和方法 - ( ...
- TeeChart for .NET常用属性总结
本文总结了图表控件Teechart for .NET常用的一些属性,对图表开发人员来说是一个很好的参考. 原文链接:http://blog.csdn.net/u010270772/article/de ...
- 树checkbox选择jquery实例
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- 关于android项目的习惯
编码使用UTF-8. 布局中多写style,常用字号颜色尺寸写进values对应文件 如中号 小号 大号 下部按钮颜色 上标题颜色 左边距,右边距,等. 任何文件类型通用名放在最前 如item_a;i ...