function windowproc(wnd:hwnd; msg,wparam,lparam:LongInt):LongInt; stdcall; begin case msg of WM_DESTROY: begin PostQuitMessage(0); Result:=0; exit; end; end; Result:=DefWindowProc(wnd,msg,wparam,lparam) end;
Вот простая оконная процедура, которая реагирует на выход. Зачем нужно
{ Модифицированная оконная процедура поля ввода } function EditWinProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case uMsg of { Запрещаем показ контекстного меню } WM_CONTEXTMENU: begin Result := 0; MessageBeep(0); Exit; // тут выходим из всей процедуры или из case? end; end; { Не забываем вызвать оригинальную оконную процедуру } Result := CallWindowProc(Pointer(GetWindowLong(hWnd, GWL_USERDATA)), hWnd, uMsg, wParam, lParam); end;
{Модифицированная оконная процедура кнопки } function BtnWinProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case uMsg of { При нажатии мыши запускаем таймер, интервал - 10 миллисекунд } WM_LBUTTONDOWN: SetTimer(hWnd, BtnTimer, 10, @BtnTimerProc);
{ При отпускании мыши уничтожаем таймер } WM_LBUTTONUP: begin KillTimer(hWnd, BtnTimer); { Восстанавливаем прежний текст } SetWindowText(hWnd, BtnText); end; end; { Не забываем вызвать оригинальную оконную процедуру } Result := CallWindowProc(Pointer(GetWindowLong(hWnd, GWL_USERDATA)), hWnd, uMsg, wParam, lParam); end;
В 1 функции - если произошло нужное событие, то выполняем что надо и EXit- выход из функции. А во 2 функции, если в оригинальной оконной процедуре есть обработчик WM_LBUTTONDOWN то выполнится работа с таймером а потом и другое? Тут EXIT'а нету
Добавлено через 4 мин.
Цитата
Как работает CreateWindow или GetDC тебе понятно?
С помощью CreateWindow нашел как создавать окно, кнопку, edit, label. Чекбокс и радио еще в процессе