Показать сообщение отдельно
  #1  
Старый 08.04.2012, 19:20
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию WinApi перерисовка формы

Вообщем недавно решил состряпать программу которая бы рисовала графики любых функций, программа довольно легкая и дабы усложнить задачу и для улучшения своих навыков программирование решил написать ее на 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, делать изменения на нем и потом его прорисовывать. Также ноль успеха. Прошу помочь мне разобраться с моей задачей
Ответить с цитированием