JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

CallWindowProc

- функция WinAPI
Функции WinAPI
Вызывает оконную процедуру указанного окна с передачей указанного сообщения.
Синтаксис
function CallWindowProc(
  hOldWndProc,
  hWnd,
  Msg,
  wParam,
  lParam
): Number;

Параметры
Параметр Тип Описание
hOldWndProc Number указатель на оконную процедуру указанного окна
hWnd Number дескриптор указанного окна
Msg Number идентификатор сообщения Windows
wParam Number параметр WPARAM сообщения Windows
lParam Number параметр LPARAM сообщения Windows
Возвращаемое значение
Возвращаемое значение зависит от переданного сообщения и является результатом его обработки.
Пример 1 (JS+)
var tab=15,old_WndProc;
var pns=new TPaintStruct();

// Главная форма
frm=new TForm();
frm.Caption="JS+ - функция WinAPI CallWindowProc";
frm.Width =450;
frm.Height=300;

old_WndProc=GetWindowLong(frm.Handle,GWL_WNDPROC);
frm.WindowProc=new_WndProc;

frm.ShowModal();

// Оконная процедура главной формы
function new_WndProc(Sender,Msg,wParam,lParam)
{
  var hDC;
  var hWnd=Sender.Handle;
  var out_str="Текст выведен функцией WinAPI TextOut";

  switch (Msg) {
    case WM_PAINT : hDC=GetDC(hWnd);
                     BeginPaint(hWnd,pns);
                     SetBkColor(hDC,clLtGray.toRGB());
                     TextOut(hDC,tab,tab,out_str,out_str.length);
                     EndPaint(hWnd,pns);
                     ReleaseDC(hWnd,hDC);
                     return 0;

    case WM_DESTROY: SetWindowLong(hWnd,GWL_WNDPROC,old_WndProc);
  }

  return CallWindowProc(old_WndProc,hWnd,Msg,wParam,lParam);
}
Пример 2 (JS+)
// Главная форма
frm=new TForm();
frm.Caption="JS+ - функция WinAPI CallWindowProc";
frm.Width =600;
frm.Height=450;
frm.WindowProc=frm_WndProc;

// Строка состояния
stb=new TStatusBar(frm);
stb.SimpleText=" Немедленно закройте форму!";

frm.ShowModal();

// Оконная процедура главной формы
function frm_WndProc(Sender,Msg,wParam,lParam)
{
  var hWnd=Sender.Handle;

  switch (Msg) {
    case WM_CLOSE : alert("Осторожно, форма закрывается!");
                     break;

    case WM_DESTROY: SetWindowLong(hWnd,GWL_WNDPROC,Sender.OldWndProc);
  }

  return CallWindowProc(Sender.OldWndProc,hWnd,Msg,wParam,lParam);
}
Пример 3 (JS+)
// Структура PaintStruct для функций BeginPaint/EndPaint
var pns=new TPaintStruct();

// Форма без заголовка
frm=new TForm();
frm.BorderStyle=bsNone;
frm.Width =w1=GetSystemMetrics(SM_CXSCREEN)/3;
frm.Height=h1=GetSystemMetrics(SM_CYSCREEN)/3;
frm.Cursor=crHandPoint;
frm.OnMouseDown=frm_MouseDown;
frm.WindowProc=new_WndProc;

// Кисти
br1=CreateSolidBrush(0x005080.toTColor());
br2=CreateSolidBrush(0x004070.toTColor());

// Кнопка
btn=new TButton(frm);
btn.Caption="Закрыть";
btn.Left=frm.ClientWidth -btn.Width -20;
btn.Top =frm.ClientHeight-btn.Height-20;
btn.Hint="Закрыть окно";
btn.ShowHint=true;
btn.OnClick=btn_Click;

frm.ShowModal();

// Обработчик события OnClick кнопки "Закрыть"
function btn_Click(btn)
{
  frm.Close();
}

// Оконная процедура главной формы
function new_WndProc(Sender,Msg,wParam,lParam)
{
  var w2=w1-20,h2=h1-20;
  var hWnd=Sender.Handle;
  var owp=Sender.OldWndProc;

  switch (Msg) {
    case WM_PAINT:
         hDC=BeginPaint(hWnd,pns);

         // Прямоугольник с закругленными углами
         rgn1=CreateRoundRectRgn(0,0,w1,h1,40,40);

         // Эллипс внутри прямоугольника
         rgn2=CreateEllipticRgn(20,20,w2,h2);
         CombineRgn(rgn1,rgn1,rgn2,RGN_DIFF);

         FillRgn(hDC,rgn1,br1);
         FrameRgn(hDC,rgn1,br2,1,1);

         DeleteObject(rgn2);
         DeleteObject(rgn1);

         EndPaint(hWnd,pns);
         return 0;

    case WM_DESTROY:
         DeleteObject(br1);
         DeleteObject(br2);

         SetWindowLong(hWnd,GWL_WNDPROC,owp);
  }

  return CallWindowProc(owp,hWnd,Msg,wParam,lParam);
}

// Обработчик события OnMouseDown главной формы
function frm_MouseDown(frm,Button,Shift,X,Y)
{
  var crs=frm.Cursor;

  if (Button!=mbLeft)
    return;

  ReleaseCapture();
  frm.Cursor=crDrag;

  // Войти в процесс перемещения формы мышью
  frm.Perform(WM_SYSCOMMAND,0xF009,0);

  frm.Cursor=crs;
}
Совместимость
Windows API
JS+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/WinAPI/Function/CallWindowProc.htm
© 2024,