将位图加载到WinAPI窗口(NO FORM!)来自.res文件

时间:2013-04-22 00:43:49

标签: delphi delphi-2007

我在Delphi 2007中有一个没有表格的Win32 API应用程序,并且想要从.res文件加载位图。一直在环顾四天,似乎无法找到关于这个主题的任何内容,所以是时候发帖了。 :)

假设我需要将代码添加到“WM_PAINT”消息,只是不确定要添加什么。也许可以使用GDI。

/感谢。

编辑:

function WndProc(hWin: HWnd; Msg, WParam, LParam: Longint): Longint; stdcall;
var
  hbmp: HBITMAP;
  ps: PAINTSTRUCT;
  DC, hdcMem: HDC;
  bmp: BITMAP;
  oldBitmap: HGDIOBJ;
begin
  case Msg of
    WM_CREATE:
    begin
      hbmp := LoadImage(HInstance, 'C:\test_img.bmp', IMAGE_BITMAP, 0, 0,    LR_LOADFROMFILE); // Never called H2077 Value assigned to 'hbmp' never used
      ShowMessage('Im Here'); // Called
      Result := 0;
      Exit;
    end;
    WM_PAINT:
    begin
      hbmp := LoadImage(HInstance, 'C:\test_img.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // Called
      DC := BeginPaint(hWin, ps);
      hdcMem := CreateCompatibleDC(DC);
      oldBitmap := SelectObject(hdcMem, hbmp);
      GetObject(hbmp, SizeOf(bmp), @bmp);
      BitBlt(DC, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);
      SelectObject(hdcMem, oldBitmap);
      DeleteDC(hdcMem);
      DeleteObject(hbmp);
      EndPaint(hWin, ps);
      Result := 0;
      Exit;
    end;
    WM_DESTROY:
    begin
      PostQuitMessage(0);
      Result := 0;
      Exit;
    end;
  end;
  Result := DefWindowProc(hWin, Msg, WParam, LParam);
end;

我认为WM_CREATE相当于Form1.OnCreate而WM_DESTROY是Form1.OnDestroy等等。

1 个答案:

答案 0 :(得分:1)

查看TBitmap单元中的Graphics课程。它有LoadFromResourceName()LoadFromResourceID()方法。