Форум: "WinAPI";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
ВнизTThread CreateWindow and DestroyWindow Найти похожие ветки
← →
vova_d (2003-10-10 18:07) [0]есть следующий код Execute в THread
procedure TWaitThread.Execute;
var Progress:Integer; Start:DWORD;
WClass: TWndClass;
Handle: HWND;
Msg: TMsg;
Result: Integer;
begin
with WClass do begin
style := CS_VREDRAW or CS_HREDRAW;
lpfnWndProc := @WndProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := SysInit.HInstance;
hIcon := LoadIcon(HInstance,IDI_APPLICATION);
hCursor := LoadCursor(HInstance,IDC_WAIT);
hbrBackground := GetStockObject(LTGRAY_BRUSH);
lpszMenuName := nil;
lpszClassName:= AppName;
end;
windows.RegisterClass(WClass);
Handle := CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW ,
AppName,"Progress",
WS_OVERLAPPED ,
(Screen.Width - 260) div 2, (Screen.height - 80) div 2,
260,80,
0,0, HInstance, nil);
ShowWindow(Handle,SW_SHOW);
UpdateWindow(Handle);
SetFocus(Handle);
while GetMessage(Msg,0,0,0) do begin
if Terminated then begin
ShowWindow(Handle,SW_HIDE);
DestroyWindow(Handle);
end;
TranslateMessage(Msg);
DispatchMessage(Msg);
Inc(Count);
end;
Handle:=0;
end;
Wndproc:
function WndProc(HWnd: HWND; Msg: UINT;
wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
end
else
Result := DefWindowProc(HWnd,Msg,WParam,LParam);
end;
end;
Вопрос - из главного приложения создаю тред - появляеться окно- все как положено, когда вызываю Terminate тред как и положено по закругляеться - т е выходит.
однако созданное окно висит на экране пока на него как то не поместить фокус (мышкой навести )
почему так и как поступить дабы это окно грохнуть и освободить ?
а то создаеться впечатление что оно не получает сообщений совсем.
Пытаюсь сделать прогресс барчик через АПИ тк надо вызывать долго отрабатывающую функцию в главном приложении
← →
clickmaker (2003-10-10 18:25) [1]А где у тебя DestroyWindow в конце потока ?
← →
l2t_guest (2003-10-10 18:29) [2]нашел в чем суть проблемы, peekMessage меня спасло ну и соответсвенно вынес DestroyWindow в конец потока
← →
clickmaker (2003-10-10 18:30) [3]Сорри, не заметил, есть DestroyWindow
Скорей всего у тебя не доходит до
if Terminated then begin
когда делаешь Terminate, поскольку поток висит на while GetMessage. А когда фокусируешь, GetMessage срабатывает и if Terminated срабатывает. Попробуй ему послать сообщение PostThreadMessage вместо Terminate
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c