Я пытаюсь использовать gdi + inno, но не могу нарисовать вне события onpaint
MyDllCode:
int DrawLine(HWND hwnd, ARGB LineColor, int startX, int startY, int endX,
int endY) {
auto hDc = GetDC(hwnd);
Graphics graphics(hDc);
graphics.SetSmoothingMode(SmoothingModeHighQuality);
Pen pen((Color(LineColor)));
pen.SetWidth(100);
auto r = graphics.DrawLine(&pen, startX, startY, endX, endY);
ReleaseDC(hwnd, hDc);
return r;
}
Функция выше при вызове внутри события onpaint успешнано ничего не рисует при вызове откуда-то еще, например InitializeWizard ();
Работает InnoCode, рисование проходит успешно:
function StartGDI(): Longword;
external 'StartGDI@{#DLLPATH} stdcall delayload';
procedure ShutDownGDI(token: longword);
external 'ShutDownGDI@{#DLLPATH} stdcall delayload';
function DrawLine(h : HWND; LineColor: ARGB;startX: integer;startY: integer;endX: integer;
endY: integer): integer;
external 'DrawLine@{#DllPATH} stdcall delayload';
var
Token: Longword;
procedure PaintWF(Sender: TObject);
var
col : ARGB;
begin
DrawLine(WizardForm.Handle,$ffFF00ff,10,10,900,900);
end;
procedure InitializeWizard();
begin
token := StartGDI;
with WizardForm do
begin
ClientWidth:=854;
ClientHeight:=576;
Center;
OuterNotebook.Hide;
InnerNotebook.Hide;
Bevel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
MainPanel.Hide;
BackButton.SetBounds(0,0,0,0);
NextButton.SetBounds(0,0,0,0);
CancelButton.SetBounds(0,0,0,0);
DirBrowseButton.SetBounds(0,0,0,0);
GroupBrowseButton.SetBounds(0,0,0,0);
OnPaint := @PaintWF;
end;
end;
не работает, но то, что мне нужно для работы
function StartGDI(): Longword;
external 'StartGDI@{#DLLPATH} stdcall delayload';
procedure ShutDownGDI(token: longword);
external 'ShutDownGDI@{#DLLPATH} stdcall delayload';
function DrawLine(h : HWND; LineColor: ARGB;startX: integer;startY: integer;endX: integer;
endY: integer): integer;
external 'DrawLine@{#DllPATH} stdcall delayload';
var
Token: Longword;
procedure InitializeWizard();
begin
token := StartGDI;
with WizardForm do
begin
ClientWidth:=854;
ClientHeight:=576;
Center;
OuterNotebook.Hide;
InnerNotebook.Hide;
Bevel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
MainPanel.Hide;
BackButton.SetBounds(0,0,0,0);
NextButton.SetBounds(0,0,0,0);
CancelButton.SetBounds(0,0,0,0);
DirBrowseButton.SetBounds(0,0,0,0);
GroupBrowseButton.SetBounds(0,0,0,0);
end;
DrawLine(WizardForm.Handle,$ffFF00ff,10,10,900,900);
end;
полный код с dll кодом: https://drive.google.com/open?id=1_3Gn9Y6PD9iqxQCgZ8VXVrMM1-ncBTOs