标题:请教hellovfp大哥关于位图的问题
只看楼主
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
已结贴  问题点数:60 回复次数:6 
请教hellovfp大哥关于位图的问题
windows编程自学手册看到位图那一节
书中提供了一个Emerson2程序例子 我把.cpp .h .rc文件都录入到VC6中
因为是手抄的编译后出现很多错误 我都一一排除了 剩下最后三个错误 :

D:\开发语言\练习程序\C语言\EMERSON2\Emerson2.cpp(134) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct HBITMAP__ *' (or there is no acceptable conversion)
D:\开发语言\练习程序\C语言\EMERSON2\Emerson2.cpp(135) : error C2675: unary '!' : 'struct tagBITMAP' does not define this operator or a conversion to a type acceptable to the predefined operator
D:\开发语言\练习程序\C语言\EMERSON2\Emerson2.cpp(160) : error C2440: 'type cast' : cannot convert from 'struct tagBITMAP' to 'struct HBITMAP__ *'
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Error executing cl.exe.

貌似都是关于Bitmap的。
出错的就在下面这两个函数里
程序代码:
/////////////////////////////
// Create window Load bitmap
// from resource
/////////////////////////////

#pragma argsused
BOOL skyline_OnCreate(HWND hwnd, CREATESTRUCT FAR * lpCreateStruct)
{
    TEXTMETRIC TextMetrics;

    skylineBitmap = LoadBitmap(hInstance, "skylineBitmap");  // 这句
    if (!skylineBitmap)                                      // 和这句
    {
        MessageBox(hwnd, "Not find skylineBitmap!",
                   "Fatal Error", MB_OK | MB_ICONERROR);
        return FALSE;
    }

    HDC PaintDC = GetDC(hwnd);
    GetTextMetrics(PaintDC, &TextMetrics);
    ReleaseDC(hwnd, PaintDC);
    TextHeight = TextMetrics.tmHeight + TextMetrics.tmInternalLeading;

    SetScrollRange(hwnd, SB_VERT, 0, -1, FALSE);

    return TRUE;
}
/////////////////////////////
// Destructor : Delete Bitmap
// from Memory
/////////////////////////////

#pragma argsused
void skyline_OnDestroy(HWND hwnd)
{
    DeleteBitmap(skylineBitmap);  // 这这函数
    PostQuitMessage(0);
}

用Go To Definition 看了下
源程序是这么定义函数和变量的
#define     DeleteBitmap(hbm)       DeleteObject((HGDIOBJ)(HBITMAP)(hbm))
——————————————
// Varliables
BITMAP skylineBitmap;
————————————————————
程序代码:
/* Bitmap Header Definition */
typedef struct tagBITMAP
  {
    LONG        bmType;
    LONG        bmWidth;
    LONG        bmHeight;
    LONG        bmWidthBytes;
    WORD        bmPlanes;
    WORD        bmBitsPixel;
    LPVOID      bmBits;
  } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;

如果我将 BITMAP skylineBitmap; 改成 BITMAP *skylineBitmap;
就只剩下一个编译错误 D:\开发语言\练习程序\C语言\EMERSON2\Emerson2.cpp(134) : error C2440: '=' : cannot convert from 'struct HBITMAP__ *' to 'struct tagBITMAP *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-  style cast

后来就不知道这么弄了。

一大篇啊 麻烦看看。



搜索更多相关主题的帖子: windows conversion C语言 
2012-04-13 22:27
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:50 
// Varliables
HBITMAP skylineBitmap;

这个程序编译的时候只有一个小问题,不难改的,就是About对话框过程函数,LRESULT CALLBACK AboutDlgProc
cpp的文件里写成了BOOL CALLBACK AboutDlgProc。
全部工程代码:
Emerson2.rar (48.13 KB)

我们都在路上。。。。。
2012-04-14 11:03
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
我下了你给你Emerson2.rar 解压后用VC6打开工作空间 编译连接没问题 点红叹号运行出现 Can not execute program 的提示  但是我照你的说明改了下自己的源程序 可以了 能运行出对话框 并打开菜单按钮 poems 菜单能显示下拉菜单的三首诗在窗口中 但是显示的位图和程序文件里的位图不一致。
昨天刚下了个 Adobe photoshop cs5 原来只要我下一个Bitmap 图片在文件夹下都会直接显示图片内容 但是现在显示的全是PS打开模式 改成其他打开模式后一样 PS现在还不会搞





原来能显示原图的 就像下面这个样子
bitmap 格式



[ 本帖最后由 有容就大 于 2012-4-14 12:02 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-04-14 11:59
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
哦,这个图片可能太小了,被平铺了,你可以把图片改大一点,或是用你原来的图替换偶工程里的。
偶直接用windows自带的画图,随便找了一个BMP,存成256色将就着编译的。
photoshop cs5,这个高档货,记得以前网上有人发过一个资源浏览器缩略图系统补丁的,打上后可以在上面查看很多流行格式的图片缩略图的。
PS很好玩的,偶也玩这个,玩程序的同时玩平面设计。如同偶的头像所示。

[ 本帖最后由 hellovfp 于 2012-4-14 12:11 编辑 ]

我们都在路上。。。。。
2012-04-14 12:09
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 4楼 hellovfp
哇 我还真没注意你的头像就是Adobe Photoshop CS
昨天刚下了个CS5 竟然有1.5个G 和 MSDN 差不多大。
也是初学,发现没学这个来编关于图形的东西很棘手。

梅尚程荀
马谭杨奚







                                                       
2012-04-14 14:41
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:10 
回复 5楼 有容就大
用 GIMP

我就是真命天子,顺我者生,逆我者死!
2012-04-14 14:43
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 6楼 BlueGuy
谢谢你的建议 往后一定去用用。
看了下网上的介绍 貌似API编程 和 GIMP 结合的很好
一般用于LINUX下?

梅尚程荀
马谭杨奚







                                                       
2012-04-14 14:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-365736-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.245547 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved