【问题标题】:c++,bitmap won't show?c++,位图不显示?
【发布时间】:2013-04-11 00:09:37
【问题描述】:

单击鼠标左键时,位图不会显示。 我正在使用visual c++ express

HDC DC, memDC;

switch(message) {
case WM_CREATE:
        hBit1 = LoadBitmap(hInst, "C:\New folder (2)\MyBP1.bmp");
        break;

case WM_LBUTTONDOWN:
            DC = GetDC(hwnd);
            memDC = CreateCompatibleDC(DC);
        SelectObject (memDC, hBit1);
        BitBlt(DC, LOWORD(lParam), HIWORD(lParam), 27, 59, memDC, 0, 0, SRCCOPY);
        ReleaseDC(hwnd, DC);
        DeleteDC(memDC);
        break;

我不确定代码到底有什么问题。 在visual c++ express中没有显示错误 如果代码都错了,有人会指出我正确的方向

【问题讨论】:

  • 不显示错误是指没有编译器错误/警告,还是没有因函数调用失败而产生的错误(当然,您还要检查失败)?
  • 编译器没有错误
  • 好吧,然后进行功能故障检查:)
  • 位图将在下一个绘制周期中被删除。静态控件就是您想要的。为什么你忽略了错误检查。如果您刚刚这样做,计算机会为您解决它。为什么这么多人不检查错误?
  • 我只是想将我的答案转换为评论,以便更多人不提出相同的建议。我让 OP 尝试 "C:\\New folder (2)\\MyBP1.bmp" 但这没有帮助。

标签: c++ winapi bitmap


【解决方案1】:

LoadBitmap 仅用于加载作为资源存储在可执行文件或 DLL 中的位图。

要从 BMP 文件加载位图,您需要使用带有 LR_LOADFROMFILE 标志的 LoadImage,如下所示:

bmp = (HBITMAP)LoadImage(0, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

顺便说一句,您可能真的不想直接显示以响应WM_LBUTTONDOWN。相反,您通常希望记录位置,可能设置一个标志来指示应显示位图,并调用InvalidateRect 使您的客户矩形无效——然后执行实际绘图以响应WM_PAINT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2017-08-11
    相关资源
    最近更新 更多