Форум: "WinAPI";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
ВнизСоздание окна и кнопки на нем Найти похожие ветки
← →
unKNOWN uSER (2002-01-18 00:19) [0]Можно ли с помощью WinAPI создать окно, а на нем кнопку, при нажатии на которую окно закрывается ?
Ели кто знает как это сделать, то приведите пожалуйста кусок кода.
← →
Adder (2002-01-18 04:23) [1]http://www.ict.nsc.ru/~cancel/delphi/index.html
← →
solo (2002-01-18 14:14) [2]program Alphabet;
uses
Windows,
Messages;
const
cClassName = "Alphabet"; // Имя класса окна
var
MainHandle : THandle; //индентификатор окна
btnHandle : THandle; //идентификатор кнопки
WndClass: TWndClass; //структура WndClass
Msg: TMsg; //структура для принятия сообщений
procedure CloseWND;
//Закрываем программу
begin
SendMessage(MainHandle, WM_CLOSE, 0, 0);
end;
function WindowProc(hWnd: THandle; uMsg, wParam, lParam: Integer): Integer; {функция окна}
stdcall; export;
//Оконная функция
begin
Result := 0;
case uMsg of
WM_DESTROY: //если uMsg равна WM_DESTROY(код закрытия окна) то закрываемся
begin
postquitmessage(0);
exit;
end;
WM_COMMAND:
if LParam = btnHandle then CloseWND;
end;
Result := DefWindowProc(hWnd, uMsg, wParam, lParam); //удалить остальные сообщения
end;
procedure CreateButton;
// Создание кнопки
begin
btnHandle:=CreateWindow("Button", "Закрыть",
BS_CENTER or BS_VCENTER or WS_CHILD or WS_VISIBLE,
110, 150, 80, 25,
mainHandle, 0, hInstance, nil);
end;
procedure CreateMainForm;
{Создание главного окна программы}
begin
FillChar(WndClass, SizeOf(WndClass), 0); //заполняем структуру нулями
with WndClass do begin
hInstance := SysInit.hInstance; //Обязательный параметр, индентификатор вашего приложения
lpszClassName := cClassName; //имя класса
lpfnWndProc := @WindowProc; //имя функции окна
hbrBackground := COLOR_WINDOW;// //способ заливки клиентской области
hCursor := LoadCursor(0,idc_arrow);//Задаем стандартный курсор
end;
RegisterClass(WndClass); //регистрируем класс
MainHandle := CreateWindow(cClassName,
"",
WS_THICKFRAME or WS_SYSMENU or WS_MAXIMIZEBOX or WS_MINIMIZEBOX or WS_VISIBLE,
0, 0,
300, 250,
0, 0, hInstance, NIL); //создаем окно
if MainHandle = 0 then begin //если произошла ошибка, то выходим
MessageBox(0, "Initialisation failed", NIL, ID_OK);
Exit;
end;
end;
begin
CreateMainForm;// Создание главного окна программы
CreateButton;//Создаем кнопку
while GetMessage(Msg, 0, 0, 0) do
begin //получаем сообщение
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Halt(Msg.wParam);
end.
← →
Dimaond Cat (2002-01-19 00:47) [3]немного корявый пример
1)
procedure CloseWND;
//Закрываем программу
begin
SendMessage(MainHandle, WM_CLOSE, 0, 0);
end;
Зачем самому себе отсылать сообщение о закрытии
2)
Зачем в WindowProc результу присваивать 0 когда он по любому потом получит другое значение от DefWindowProc
3)
Ты зарегистрировал класс, а при закрытии программы регистрацию не снял, есть идея что твоя процедура CloseWND смотрелась бы лучше так
procedure CloseWND;
begin
UnRegisterClass(////);
ExitProcess(///);
end;
4)
А зачем Halt(Msg.wParam); (это реально интересно, чего ты хотел добиться?)
← →
Ghost. (2002-01-19 12:36) [4]если надо сразу закртывать и обработать закрытиеююможет лучше так
program Project1;
uses
WinTypes, WinProcs;
begin
MessageBox(GetActiveWindow, "сообщение", "подпись",
MB_ICONINFORMATION OR MB_OK)
end.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c