Вообщем недавно решил состряпать программу которая бы рисовала графики любых функций, программа довольно легкая и дабы усложнить задачу и для улучшения своих навыков программирование решил написать ее на win api, и столкнулся с проблемой, для начала я приведу листинг моей программы:
PHP код:
//тут я создаю окно и впоследствии выполняю функцию drawgrid
procedure CreateMainWindow;
begin
window.cbSize := sizeof (window);
//window.style := CS_HREDRAW or CS_VREDRAW;
window.lpfnWndProc := @WindowProc;
window.cbClsExtra := 0;
window.cbWndExtra := 0;
window.hInstance := HInstance;
window.hIcon := LoadIcon (0,IDI_APPLICATION);
window.hCursor := LoadCursor (0,IDC_ARROW);
window.hbrBackground:=Color_BtnFace+12;
window.lpszMenuName := nil;
window.lpszClassName := 'Main_Window';
RegisterClassEx (window);
Mwindow:=CreateWindowEx0,'Main_Window','Graphic',WS_POPUP,100,100,xRect,yRect,0,0,Hinstance,nil);
SHOWWINDOW (Mwindow,SW_Show);
DrawGrid;
end;
procedure DrawGrid;
var
DC:HDC;
Penhandle:HPEN;
color:Cardinal;
i:integer;
x,y:Integer;
ps:PAINTSTRUCT;
begin
DC:=BeginPaint(Mwindow,ps);
color:=RGB(255,51,0);
Penhandle:=CreatePen(PS_SOLID,1,color);
SelectObject(DC,Penhandle);
x:=xRect div 2;
y:=yRect div 2;
MoveToEx(DC,x,yRect,nil);
LineTo(DC,x,0);
MoveToEx(DC,0,y,nil);
LineTo(DC,xRect,y);
DeleteObject(Penhandle);
Endpaint(Mwindow,ps);
end;
//в ней я рисую оси графика
В итоге все рисуется но при переключениена другое окно, это уже не открывается и даже не перерисовывается, полазав по гуглу до меня дошло что нужно перерисовывать вручную в событие WM_PAINT
Дальше я столкнулся с такой проблемой: если в событие WM_PAINT написать например:
PHP код:
DC:=BeginPaint(Mwindow,ps);
TextOut(DC,0,0,PChar('Программа'),4);
Endpaint(Mwindow,ps);
То все прекрасно перерисовывается, так же как и пока окно пустое, а если по WM_PAINT вызывать DrawGrid, то опять же проблема ничего не прорисовывается. Так же я и пытался создать BMP, делать изменения на нем и потом его прорисовывать. Также ноль успеха. Прошу помочь мне разобраться с моей задачей