开发某WinCE MFC GDI程序中遇到的问题——bmp解析,lib,gdi

要求用MFC做一个自定义的DLG,编译成静态lib供主程序使用。

要求DLG有背景图片,其上Static和Button也要显示bmp。图片不能放在资源中,因为GetDIBits函数CE下没有,没办法使资源中的位图通过双缓存进行加载,使用读bmp文件的方式解析bmp,SetDIBitsToDevice放进MemoryDC,然后BitBlt

Static貌似不支持OwnerDraw,最后只能把代码写OnPaint中,Button的OwnerDraw没有问题。

解析bmp显示右上角总是不对,说明Pattern数据的末尾部分由问题,检查代码:

BITMAPFILEHEADER bfh = {0};
FILE *file = _wfopen(strFile, L"r");
if (!file)
{
ASSERT(0);
return false;
} 
fread(&bfh, sizeof(bfh), 1, file);
long lSize = bfh.bfSize - sizeof(bfh);
m_pstBitmapInfo = (BITMAPINFO*)malloc(lSize);
if (!m_pstBitmapInfo)
{
fclose(file);
file = NULL;
return false;
}
fread(m_pstBitmapInfo, lSize, 1, file);


fclose(file);
file = NULL;

m_pBits = (char*)m_pstBitmapInfo + (bfh.bfOffBits - sizeof(bfh));

最后发现,是因为打开时不是二进制读取的,字节对齐的问题,应该传入参数"rb"


还有静态lib,最开始说做一个单独的exe,所以建了exe的工程,最后要改lib,我就把配置改了下直接用了,发现DoModal总是返回-1,不得其解。以为win32程序不可以调用包含MFC代码的lib呢。发现可以建立lib工程,可以支持MFC,重新建了工程还是返回-1。原来是因为lib本身不能包含dlg资源导致,需要把对话框资源放在主程序中。


解脱了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值