![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перерисовать окно на WinAPI? [D7, WinME, WinXP]
maker © (2003-11-04 20:16:00)
Помогите разобраться, есть простейший пример создания приложения на WinAPI. Вроде бы по таймеру должны менятся цифры в заголовке окна, которым управляет таймер:
program Main;
uses
Windows, Messages, SysUtils;
var
Tm:Uint;
//обработка сообщений
function WindowProc (Window: HWND; Message, WParam: Cardinal;
LParam: Cardinal): Longint; stdcall;
var
ps : PaintStruct;
DC : HDC;
a,bc:integer;
begin
case Message of
WM_MOUSEMOVE:
begin
if (LoWord(lParam)<190)and(HiWord(lParam)<10) then
begin
ReleaseCapture;
SendMessage(window, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
end;
WM_LBUTTONDOWN:
begin
//Усли курсор у кнопки выхода
if (LoWord(lParam)>190)and(HiWord(lParam)<10) then
WindowProc(window,$0002,0,0);
end;
$0002:
begin
PostQuitMessage(0);
Result:=0; Exit;
end;
WM_Paint:
begin
//Нарисуемся!
dc:=BeginPaint (Window, ps);
try
TextOut(dc,0,0,PChar(Inttostr( Random(100)+1)),20);
finally
EndPaint (Window, ps);
end;
end;
WM_Timer:
begin
UpdateWindow(Window);//Вроде-бы должно переривовываться окно (WM_Paint), но...
end;
end;
Result := DefWindowProc (Window, Message, WParam, LParam);
end;
var WClass : WNDCLASS;
OplayHWND : HWND;
oPlayMsg : MSG;
lpMsgBuf : PChar;
begin
WClass.hInstance := HInstance;
WClass.hIcon := 0;
WClass.hCursor := LoadCursor (0, IDC_ARROW);
WClass.hbrBackground := COLOR_BTNFACE+1;
WClass.lpfnWndProc := @WindowProc;
WClass.lpszClassName := "Fly";
if RegisterClass (WClass) = 0 then begin
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
nil, GetLastError(), 0, @lpMsgBuf, 0, nil);
MessageBox(HWND_Desktop,lpMsgBuf, "Ошибка", MB_ICONSTOP);
Exit;
end;
OplayHWND := CreateWindowEx (0, "Fly", "FlyWin",
WS_POPUP,470, 470, 200, 200, 0, 0, HInstance, nil);
if OplayHWND = 0 then begin
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
nil, GetLastError(), 0, @lpMsgBuf, 0, nil);
MessageBox(HWND_Desktop,lpMsgBuf, "Ошибка", MB_ICONINFORMATION);
Exit;
end;
ShowWindow (OplayHWND, SW_SHOWNORMAL);
SetTimer(OPlayHWND,0,100,nil);
while GetMessage(OplayMsg, 0, 0, 0) do begin
TranslateMessage (OplayMsg);
DispatchMessage(OplayMsg);
end;
end.
Может кто знает, что не так?
maker (2003-11-04 20:41:00) [1]
ZrenBy, Спасибо!
ZrenBy (2003-11-04 20:34:00) [2]
InvalidateRect(Window,nil,True);