Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中加载位图图像+;线_C++_Winapi_Bitmap - Fatal编程技术网

C++ 在c+中加载位图图像+;线

C++ 在c+中加载位图图像+;线,c++,winapi,bitmap,C++,Winapi,Bitmap,我正在尝试加载所选的.bmp文件并在WM_PAINT中显示它。该函数由代码运行,因此visual studio确实可以看到它。 以下是似乎不起作用的代码: case WM_PAINT: { _hWindowDC = BeginPaint(_hwnd, &ps); if (g_bIsFileLoaded) { std::wstring wsFileName = g_vecImageFileNames.back(); g_vecIma

我正在尝试加载所选的.bmp文件并在WM_PAINT中显示它。该函数由代码运行,因此visual studio确实可以看到它。 以下是似乎不起作用的代码:

case WM_PAINT:
{
    _hWindowDC = BeginPaint(_hwnd, &ps);

    if (g_bIsFileLoaded)
    {
        std::wstring wsFileName = g_vecImageFileNames.back();
        g_vecImageFileNames.pop_back();

        std::string File(wsFileName.length(), ' ');
        std::copy(wsFileName.begin(), wsFileName.end(), File.begin());

        HBITMAP h_BitMap = (HBITMAP)LoadImageA(g_hInstance, File.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        HDC h_HomeDC = CreateCompatibleDC(_hWindowDC);
        BITMAP BitMap;

        int i_Final = GetObject(reinterpret_cast<HGDIOBJ>(h_BitMap), sizeof(BITMAP), reinterpret_cast<LPVOID>(&BitMap));

        HBITMAP h_OldBit = (HBITMAP)::SelectObject(h_HomeDC, h_BitMap);

        SetStretchBltMode(_hWindowDC, HALFTONE);

        BOOL PaintBit = StretchBlt(_hWindowDC, 1, 1, 50, 50, h_HomeDC, 0, 0, BitMap.bmWidth, BitMap.bmHeight, SRCCOPY);

        ::SelectObject(h_HomeDC, h_OldBit);
        ::DeleteDC(h_HomeDC);
        ::DeleteObject(h_BitMap);

        InvalidateRect(_hwnd, NULL, NULL);

        g_bIsFileLoaded = false;
    }

    EndPaint(_hwnd, &ps);
    return (0);
}
break;
case WM_PAINT:
{
_hWindowDC=开始喷漆(_hwnd,&ps);
如果(g_bIsFileLoaded)
{
std::wstring wsFileName=g_vecImageFileNames.back();
g_vecImageFileNames.pop_back();
std::字符串文件(wsFileName.length(),“”);
std::copy(wsFileName.begin(),wsFileName.end(),File.begin());
HBITMAP h_BitMap=(HBITMAP)LoadImageA(g_hInstance,File.c_str(),IMAGE_BitMap,0,0,LR_LOADFROMFILE);
HDC h_HomeDC=CreateCompatibleDC(_hWindowDC);
位图;
int i_Final=GetObject(重新解释强制转换(h_位图)、sizeof(位图)、重新解释强制转换(&BitMap));
HBITMAP h_OldBit=(HBITMAP)::选择对象(h_HomeDC,h_位图);
SetStretchBltMode(半色调);
BOOL PaintBit=StretchBlt(_hWindowDC,1,1,50,50,h_HomeDC,0,0,BitMap.bmWidth,BitMap.bmHeight,SRCCOPY);
::选择对象(h_HomeDC,h_OldBit);
::DeleteDC(h_HomeDC);
::删除对象(h_位图);
无效竖立(_-hwnd,NULL,NULL);
g_bisfileload=false;
}
端漆(hwnd和ps);
返回(0);
}
打破

你所说的
似乎不起作用是什么意思?您是否收到特定的错误消息?不,只是没有加载图像,只是显示了一个白色背景。此代码是否在单独的线程中运行?您只绘制了一次位图,然后就不再绘制了。此外,在绘制后禁用窗口,这会破坏绘制点。你在那里的工作是使窗口有效!您也不会进行任何错误检查,因此可能您甚至不会绘制位图一次。也许你甚至从来没有设法加载它。无论如何,你必须更好地理解WM_PAINT。它会被反复调用。你的工作是在窗户着火时粉刷它,而不是一次。我建议您重新阅读Win32教程,或者购买Petzold的书。