0

我在 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 等。

4

1 回答 1

1

看看单位里的TBitmap班级Graphics。它有LoadFromResourceName()LoadFromResourceID()方法。

于 2013-04-22T01:46:16.170 回答