2012-07-24 50 views
0

我很困惑,因为我无法确定为什么我的ImageList_Add调用失败。我知道这一定是我做错了图像的东西,或者我错了,但我不知道如何去解决它:S任何帮助,你可以提供将不胜感激! :)添加到HIMageList失败,无法弄清楚为什么

我使用的代码如下。我在控制台上得到输出,说它无法添加到图像列表中。从文档中,ImageList_Add将返回图像列表中哪个位置的映像,以便它能够添加图像,因此-1如果不能显示则返回。

这是一个好主意,但我找不到任何地方为什么/是什么原因导致的附加失败!

代码可能有内存泄漏,但此刻,我已经花了差不多一天试图找出各种问题与此,所以我只想得到它的工作!

HIMAGELIST imageList = ImageList_Create(20,20,ILC_COLOR16,1,2); 
if (imageList == NULL) 
{ 
    printf("Error creating imagelist - dlg_create_dropdown_menu. Returning NULL\n"); 
    return NULL; 
} 

HBITMAP currentImage = (HBITMAP) LoadImage(NULL,"active_mdoe_icn.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
if (currentImage == NULL) 
{ 
    if (GetLastError()== 2) 
    { 
     printf("File not found - dlg_create_dropdown_menu. Returning NULL.\n"); 
     return NULL; 
    } 
    printf("Error loading image from file - dlg_create_dropdown_menu. Returning NULL.\n"); 
    return NULL; 
} 
int imageIndex; 
if ((imageIndex = ImageList_Add(imageList,currentImage,NULL)) == -1) 
{ 
    printf("Error adding to the image list - dlg_create_dropdown_menu. Returning NULL.\n"); 
    return NULL; 
} 

谢谢大家,任何帮助都会大受好评! :)

这可能是一个问题,实际图像被损坏?我读过有关,在一些地方..可能只是我的运气,如果我没有做任何愚蠢的:)

+0

这是可能的,你的图像列表使用'ILC_COLOR16'所以它是每像素DIB 16位的,但打完电话后您的位图'LoadImage'将是一个兼容的位图,即它匹配当前的显示设置。所以如果它们不一样,那么添加可能会失败。您可以尝试使用'ILC_COLORDDB',或者您可以确保您的位图格式与图像列表相匹配,并在'LoadImage'调用中使用'LR_CREATEDIBSECTION'。 – tinman 2012-07-24 12:51:44

+0

尝试加载另一个位图,看看你的代码是否工作。 :-) – Xearinox 2012-07-26 03:40:40

+0

是的,我要去尝试一些简单的名字,比如只是主动或者事情发生了_正在引起问题:)感谢所有的建议,今天就打个招呼:P – andrewktmeikle 2012-07-26 08:23:19

回答

0

与自己和窗户太多争吵后我没明白,为什么加不工作。

而是采用了图像列表我只是每一个图像在在与它的工作,这样一个时间加载尝试。不知道为什么我想用图像列表是更好:■

我试图将图像加载到一个下拉菜单,我创建,但我发现这样做的更好的方法。其中使用了MENUITEMINFO结构并指定了MIIM_BITMAP | MIIM_STRING因为这两个标志,以fMask :)这意味着我可以有一个形象以及每个菜单项:)的文本

还与0图像名称强调不知何故使得它更容易让Windows找到笑

不管怎么说,希望这有助于有人:)

相关问题