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;
}
}
}