c语言getsize函数,CBCGPImage的GetSize的问题及解决方法

c4468b3f4df77e96b0a416fa2a870fba.png

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

l5oylcw2gjo.html

l5oylcw2gjo.html

发现关于CBCGPImage的一个奇怪问题,如下:

// m_Image.GetSize()首次调用得到的图片尺寸为(0,0),

//                  第二次DrawImage调用得到正确的图片像素尺寸

// m_Image.GetSize(m_pGM) 每次都可以得到正确的图片像素尺寸

程序源代码如下:

1、在SDI程序的stdafx.h文件末尾,添加:

#include

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

}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

C语言本身并没有提供内置的vector,但可以通过结构体和动态内存分配来实现类似于vector的功能。 下面是一个简单的示例代码,展示了如何使用结构体和动态内存分配实现一个简单的vector函数: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int* data; int size; int capacity; } Vector; void vector_init(Vector* vec) { vec->data = NULL; vec->size = 0; vec->capacity = 0; } void vector_push_back(Vector* vec, int value) { if (vec->size >= vec->capacity) { vec->capacity = (vec->capacity == 0) ? 1 : vec->capacity * 2; vec->data = (int*)realloc(vec->data, vec->capacity * sizeof(int)); } vec->data[vec->size++] = value; } int vector_get(Vector* vec, int index) { if (index >= 0 && index < vec-1; // 返回一个特殊值表示索引无效 } void vector_free(Vector* vec) { free(vec->data); vec->data = NULL; vec->size = 0; vec->capacity = 0; } int main() { Vector vec; vector_init(&vec); vector_push_back(&vec, 10); vector_push_back(&vec, 20); vector_push_back(&vec, 30); printf("Vector size: %d\n", vec.size); printf("Vector capacity: %d\n", vec.capacity); for (int i = 0; i < vec.size; i++) { printf("Vector[%d]: %d\n", i, vector_get(&vec, i)); } vector_free(&vec); return 0; } ``` 这个示例代码中,我们定义了一个名为Vector的结构体,其中包含一个指向动态分配的整型数组的指针data,以及当前元素个数size和容量capacity。vector_init函数用于初始化一个Vector对象,vector_push_back函数用于向Vector中添加元素,vector_get函数用于获取指定索引处的元素值,vector_free函数用于释放Vector对象占用的内存。 请注意,这只是一个简单的示例,实际上,实现一个完整的、功能齐全的vector函数需要考虑更多的细节和边界情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值