ZBLOG

怎么通过句柄给窗口设置图片,并且后面不要让这张图片被刷新掉

要通过句柄给窗口设置图片,并确保该图片不会被刷新掉,可以使用窗口的WM_PAINT消息来绘制图像。

下面是一个示例代码,展示如何在窗口中绘制一张静态图片:

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int main()
{
    // 创建窗口类注册
    WNDCLASSEX wc = { 0 };
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = GetModuleHandle(NULL);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszClassName = L"MyWindowClass";
    
    RegisterClassEx(&wc);
    
    // 创建窗口
	HWND hwnd = CreateWindowEx(
        0,
        L"MyWindowClass",
        L"窗口标题",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL,
        NULL,
        GetModuleHandle(NULL),
        NULL
	);

	if (hwnd == NULL)
		return 0;

	// 显示窗口
	ShowWindow(hwnd, SW_SHOWDEFAULT);
	UpdateWindow(hwnd);

	// 消息循环
	MSG msg;
	while (GetMessage(&msg, nullptr, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return static_cast<int>(msg.wParam);
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_PAINT:
	{
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd, &ps);

		// 在绘制区域绘制图片
        HBITMAP hBitmap = static_cast<HBITMAP>(LoadImage(NULL,
                                                        L"path_to_image_file.bmp",
                                                        IMAGE_BITMAP,
                                                        0, 0,
                                                        LR_LOADFROMFILE));
        if (hBitmap != NULL)
        {
            HDC hdcMem = CreateCompatibleDC(hdc);
            HGDIOBJ hOldBitmap = SelectObject(hdcMem, hBitmap);

            // 获取图片的尺寸
            BITMAP bm;
            GetObject(hBitmap, sizeof(bm), &bm);
            int width = bm.bmWidth;
            int height = bm.bmHeight;

            // 将图片绘制到窗口客户区
            BitBlt(hdc, 0, 0, width, height, hdcMem, 0, 0, SRCCOPY);

            // 清理资源
            SelectObject(hdcMem, hOldBitmap);
            DeleteDC(hdcMem);
        }

		EndPaint(hwnd, &ps);
		break;
    }

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	return 0;
}

在上述代码中,我们使用WM_PAINT消息来处理窗口的绘制事件。当收到该消息时,我们在窗口的客户区域绘制一张指定路径的位图(.bmp)。

你需要将 L"path_to_image_file.bmp" 替换为实际的图片文件路径。

通过以上代码,在窗口创建后,图片将会被绘制到窗口的客户区域,并且不会被刷新掉。在窗口重绘时,WM_PAINT消息会再次触发绘制操作,确保图像的持久显示。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13737

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?