Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.13 c
3-57293
Akhmadey
2002-02-18 20:05
2002.03.18
Проблема с Master-Detail


4-57569
Nimnul
2002-01-21 11:42
2002.03.18
Минимизация в systray по клику на taskbar...(Delphi,API)


4-57560
andersen
2002-01-15 21:40
2002.03.18
Как узнать в Интернете я или нет?


14-57506
Pete
2002-02-04 12:42
2002.03.18
Я тоже хочу...


4-57550
Death
2002-01-18 21:03
2002.03.18
Дебаг...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский