AkelPad.WindowSubClass (+ActiveX)

Установить перехватчик сообщений окна.

WindowSubClass(hHandle, lpFunction[, ...])

Параметры

hHandleДескриптор окна или одно из следующих значений:
1   //WSC_MAINPROC   Установить перехватчик сообщений для главного окна.
2   //WSC_EDITPROC   Установить перехватчик сообщений для всех окон редактирования.
3   //WSC_FRAMEPROC  Установить перехватчик сообщений для всех вкладок режима MDI.
lpFunctionФункция с 4 параметрами, куда будут приходить сообщения.
...Фильтр сообщений. Будут приходить только указанные сообщения. Если не указан, будут приходить все сообщения.

Возвращаемое значение


Число. Дескриптор перехватчика.

Пример

var oSys = AkelPad.SystemFunction();
var hSubClass;
var nSelStart;

if (hSubClass = AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/ , EditCallback, 258 /*WM_CHAR*/ )) {
    //Message loop
    AkelPad.WindowGetMessage();

    AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/ );
}

function EditCallback(hWnd, uMsg, wParam, lParam) {
    if (uMsg == 258 /*WM_CHAR*/ ) {
        if (String.fromCharCode(wParam) == "q") {
            AkelPad.MessageBox(0, "Key \"" + String.fromCharCode(wParam) + "\" is pressed. Exiting script...", "", 0);

            //Exit message loop
            oSys.Call("user32::PostQuitMessage", 0);
        } else {
            //First do default processing
            AkelPad.WindowNextProc(hSubClass, hWnd, uMsg, wParam, lParam);

            //After default processing we can select inserted character
nSelStart = AkelPad.GetSelStart();
            AkelPad.SetSel(nSelStart - 1, nSelStart);

            //We already do default processing, so skip it
            AkelPad.WindowNoNextProc(hSubClass);
            return 0;
        }
    }
}