![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() требуется создать два окна через вин айпи, и если закрываешь одно то и закрывается другое. нужна помошь
![]() Последний раз редактировалось BIG_BO, 13.02.2012 в 17:46. |
#2
|
|||
|
|||
![]() вот сделал, одно окно выводит а что дальше
|
#3
|
||||
|
||||
![]() Выводить то может и выводит, но уж больно много ляпов в коде. Второе окно можно вывести строкой:
Код:
CreateDialog(hInstance, MAKEINTRESOURCE(MYDLG), Wnd, @MyDialogFunc); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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
|
||||
|
||||
![]() Используй "нить".
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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
|
|||
|
|||
![]() поясни плз
|