![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
требуется создать два окна через вин айпи, и если закрываешь одно то и закрывается другое. нужна помошь
![]() Последний раз редактировалось BIG_BO, 13.02.2012 в 17:46. |
|
#2
|
|||
|
|||
|
вот сделал, одно окно выводит а что дальше
|
|
#3
|
||||
|
||||
|
Выводить то может и выводит, но уж больно много ляпов в коде. Второе окно можно вывести строкой:
Код:
CreateDialog(hInstance, MAKEINTRESOURCE(MYDLG), Wnd, @MyDialogFunc); |
|
#4
|
|||
|
|||
|
CreateDialog(hInstance, MAKEINTRESOURCE(WinHandle), hWnd, @MyWndProc);
вот написал, запускается просто одно окно |
|
#5
|
||||
|
||||
|
добавь еще один блок:
Код:
WinHandle:=CreateWindow(WndClass.lpszClassName,'the hello win',ws_overlappedwindow, cw_usedefault, cw_usedefault, cw_usedefault, cw_usedefault, 0, 0, Hinstance, nil); ShowWindow(WinHandle, sw_show); UpdateWindow(WinHandle); Код:
ShowWindow(WinHandle, sw_show); UpdateWindow(winHandle); |
|
#6
|
|||
|
|||
|
Спасибо =) завтра буду пробовать защищать)
|
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
|||
|
|||
|
Не правильно. Это не два процесса а два окна.
чорт |
|
#9
|
||||
|
||||
|
Используй "нить".
|
|
#10
|
|||
|
|||
|
не понял, что за нить
|
|
#11
|
||||
|
||||
|
Берём словарь, смотрим:
Нить - Thread далее используем функцию CreateThread. Код:
var
hPreLoad : HWND; // переменные для создания нити
Dummy : DWORD;
hThread : HWND;
...
function PreLoadDialogProc(hWndDlg : HWND; Msg : Longint; wParam, lParam : Longint) : Integer; stdcall;
begin
Result := 1;
case Msg of
WM_INITDIALOG :
begin
hPreLoad := hWndDlg;
end;
WM_CLOSE : EndDialog(hWndDlg, ord(True));
end;
end;
...
hThread := CreateThread(NIL, 0, @PreLoadDialogThread, NIL, 0, Dummy);
...
// закрывем окно предзагрузки
SendMessage(hPreLoad, WM_COMMAND, IDOK, 0);
if hThread <> 0 then
begin
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
end; |
|
#12
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#13
|
|||
|
|||
|
ну да это я сначала так задание понял, когда пришел сказал мне что два окна это не два процесса(
|
|
#14
|
||||
|
||||
|
Код:
program CreateWindowAPI;
uses
Windows, Messages;
var
AWndClass: WNDCLASS;
AWnd: HWND;
AMsg: TMsg;
function WindowProc(AWnd: HWND; Msg: Integer;
wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
case Msg of
WM_CLOSE: begin
PostQuitMessage(0);
Result:=0;
end;
else Result:=DefWindowProc(AWnd, Msg, wParam, lParam);
end
end;
begin
AWndClass.Style:=CS_HREDRAW or CS_VREDRAW;
AWndClass.lpfnWndProc:=@WindowProc;
AWndClass.cbClsExtra:=0;
AWndClass.cbWndExtra:=0;
AWndClass.hInstance:=HInstance;
AWndClass.hIcon:=0;
AWndClass.hCursor:=LoadCursor(0, IDC_ARROW);
AWndClass.hbrBackground:=HBRUSH(COLOR_WINDOW);
AWndClass.lpszMenuName:=nil;
AWndClass.lpszClassName:='TWINAPIFORM';
RegisterClass(AWndClass);
AWnd:=CreateWindowEx(0, AWndClass.lpszClassName, AWndClass.lpszClassName,
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
320, 240,
0, 0, HInstance, nil);
ShowWindow(AWnd, SW_SHOWNORMAL);
UpdateWindow(AWnd);
while GetMessage(AMsg, 0, 0, 0) do
begin
TranslateMessage(AMsg);
DispatchMessage(AMsg);
end;
DestroyWindow(AWnd);
UnregisterClass(AWndClass.lpszClassName, HInstance);
AWnd:=FindWindow(AWndClass.lpszClassName, AWndClass.lpszClassName);
if AWnd<>0 then SendMessage(AWnd, WM_CLOSE, 0, 0);
end. |
|
#15
|
|||
|
|||
|
поясни плз
|