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有默认安装,如果没有 ...
随机推荐
- instancemethod, staticmethod, classmethod & abstractmethod
实例方法.静态方法.类方法.抽象方法 1. Python中方法的工作方式(How methods work in Python) A method is a function that is sto ...
- 在Application_Error获取Asp.Net未处理异常信息
在Application_Error获取Asp.Net未处理异常信息 protected void Application_Error(object sender, EventArgs e) { // ...
- jQuery源代码学习笔记_工具函数_noop/error/now/trim
jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...
- linux内核态和用户态小结
一 内核态和用户态的区别 当进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核状态.此时处理器处于特权级最高的(0级)内核代码.当进程处于内核态时,执行的内核代码会使用当前的内核栈.每个进程 ...
- CefSharp High DPI问题的解决
使用CefSharp控件,在部分高分辨率的电脑中(显示缩放比例非100%,而是120%或者125%等)会出现以下一些情况: 显示的页面中出现了黑边,且按钮定位也偏了,比如点击[图层]按钮,需要点击上面 ...
- Win7无线路由Win8/8.1开启网络承载DOS命令笔记本电脑当无线路由器
以下废话,先吐槽几句 这个功能其实在Win7+系统都内置了,不要再用什么某豹.某大师.某Soft之类的开启无线网络,这些软件都是骗你们安装一些垃圾软件的. 另外吐槽 某度wifi.某数字wifi都是垃 ...
- zookeeper的几种使用场景
1.数据的发布与订阅 通过发布与订阅实现配置的信息的统一管理,主要采用zk节点可以存储数据的特性,我们可以将一些配置信息存放到某一节点上,订阅这个节点的服务就可以动态的获取这个节点的数据.在应用启动的 ...
- Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
下雨天,巧克力和音乐很配…… 大冬天,男神和捧在手里的奶茶很配…… 「驴牌」的包包,和女神的全部衣服都配…… 对于「王首富」,容易实现的小目标和一个亿是绝配…… …… 醒醒吧!!这些事情和每天只会写代 ...
- 获取当前事件对象及this的用法
js <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta h ...
- 对react vd 性能的理解
相信大家都知道react vd的性能是很好的,速度挺快的,真实dom操作很慢的,但是结果完全相反: 后来我就做了个测试,从两个方面去测试,在页面初始渲染1w条数据,react渲染耗时超过了1秒 在12 ...