C#截取WM_PAINT消息进行图片绘制问题。望不吝赐教...
先来说说的想法: 我用子类化的方法对截取到的WM_PAINT消息进行自定义的处理,处理的过程就是在窗口背景上画张图片。但是问题出现了,代码在第一次调试运行的时候有效,但是以后在调试图片就画不出来了。不知道问题出现在哪里,如果有知道原因的还望指导交流下。以下为测试代码:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationuses GDIPOBJ,GDIPAPI;{$R *.dfm}var OldWinProc: integer; g_hdc: HDC; g_hWnd: HWND;function WinProc(Hwnd,Msg,wParam,lParam:longint):LRESULT;Stdcall;var g: TGPGraphics; img: TGPImage; ps: tagPAINTSTRUCT;begin case Msg of WM_LBUTTONDBLCLK: ShowMessage('DoubleClick!'); WM_PAINT: begin BeginPaint(g_hWnd,ps); g := TGPGraphics.Create(g_hdc); img := TGPImage.Create(ExtractFilePath(ParamStr(0)) + '背景图片.jpg'); g.DrawImage(img,0,0); img.Free; g.Free; EndPaint(g_hWnd,ps); end; end; result := CallWindowProc(pointer(OldWinProc),Hwnd,Msg,wParam,lParam);end;procedure TForm1.FormCreate(Sender: TObject);begin g_hdc := Self.Canvas.Handle; g_hWnd := Self.Handle; OldWinProc := SetWindowLong(Self.Handle,GWL_WNDPROC,Integer(@WinProc))end;end.