Winapi 如何在Visual C+中显示图像+;应用 我试图在Visual C++(2019)应用程序中显示PNG图像。它是一个基于Win32对话框的应用程序(我不使用MFC)来显示包含姓名、地址和照片(800x600px)的地址目录。所以,除了照片之外,一切都很好。在互联网的帮助下,我尝试了我所知道的一切,但仍然无法让它发挥作用。下面给出了我的应用程序的外观示例

Winapi 如何在Visual C+中显示图像+;应用 我试图在Visual C++(2019)应用程序中显示PNG图像。它是一个基于Win32对话框的应用程序(我不使用MFC)来显示包含姓名、地址和照片(800x600px)的地址目录。所以,除了照片之外,一切都很好。在互联网的帮助下,我尝试了我所知道的一切,但仍然无法让它发挥作用。下面给出了我的应用程序的外观示例,winapi,visual-c++,Winapi,Visual C++,到目前为止我所尝试的。。。 (1) 添加图像作为资源(您可以在“资源文件”中看到图像)。 (2) 创建了显示图像的对话框。 (3) 在对话框中添加了一个图片控件。 (4) 试图将图像连接到图片控件。。。(~问题~) 因此,我仍然没有找到将“图片控制”连接到“图像”的方法。如果你能告诉我怎么做,或者给我发一个链接,上面描述了怎么做,我将不胜感激。构造器会获取任何图像文件并从中创建位图(在程序中更容易操作) #包括 位图bmp=位图(L“c:\\users\\user\\restofpath\\im

到目前为止我所尝试的。。。 (1) 添加图像作为资源(您可以在“资源文件”中看到图像)。 (2) 创建了显示图像的对话框。 (3) 在对话框中添加了一个图片控件。 (4) 试图将图像连接到图片控件。。。(~问题~)

因此,我仍然没有找到将“图片控制”连接到“图像”的方法。如果你能告诉我怎么做,或者给我发一个链接,上面描述了怎么做,我将不胜感激。

构造器会获取任何图像文件并从中创建位图(在程序中更容易操作)

#包括
位图bmp=位图(L“c:\\users\\user\\restofpath\\image.png”)//获取位图
HBITMAP HBITMAP;
bmp.GetHBITMAP(0,&hBitmap)//制作一张HBITMAP
HDC HDC=GetDC(hwnd)//从窗口句柄获取HDC(可以是任何窗口)
HIMAGELIST imageList=imageList_Create(640480,ILC_COLOR24,1,10)//创建包含640(宽)*480(高)和24位rgb图像的图像列表
ImageList_添加(ImageList,hBitmap,NULL)//将位图添加到imageList
BOOL DRAWED=ImageList\U Draw(ImageList,0,hdc,0,0,ILD\U图像)//在窗口上绘制图像
删除对象(hBitmap);
ImageList_销毁(ImageList);
删除对象(hdc);

您可以查看ImageList_Create函数中的其他选项:。特别是标志部分,它允许对要绘制的图像类型进行个性化设置。如果要保持PNG的透明度,可能需要使用32位DIB。

渲染图像时不需要图像列表。既然你已经选择了GDI+,你只需打电话就可以了。还要注意GDI+需要。更简单的是,因为已经有一个图片控件,所以向它发送一条消息,而不必处理渲染。
#include <gdiplusheaders.h>

Bitmap bmp = Bitmap(L"c:\\users\\user\\restofpath\\image.png"); //Get bitmap
HBITMAP hBitmap;
bmp.GetHBITMAP(0, &hBitmap); //Make it an HBITMAP
HDC hdc = GetDC(hwnd); //Get HDC from window handle (can be any window)
HIMAGELIST imageList = ImageList_Create(640, 480, ILC_COLOR24, 1, 10); //Create image list with images of 640 (width) * 480 (height) and 24 bits rgb
ImageList_Add(imageList, hBitmap, NULL); //Add the bitmap to the imageList
BOOL drawn = ImageList_Draw(imageList, 0, hdc, 0, 0, ILD_IMAGE); //Draw the image on the window
DeleteObject(hBitmap);
ImageList_Destroy(imageList);
DeleteObject(hdc);