AkelPad.WindowRegisterClass (+ActiveX)
Зарегистрировать класс окна.
WindowRegisterClass(pClassName[, ...])
Параметры
pClassName | Имя класса для регистрации. |
... | Фильтр сообщений. Будут приходить только указанные сообщения. Если не указан, будут приходить все сообщения. |
Возвращаемое значение
Число. Атом класса.
Пример
(JScript)
var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var hWndDialog;
if (hMainWnd) {
if (AkelPad.WindowRegisterClass("NewClass")) {
//Create dialog
hWndDialog = oSys.Call("user32::CreateWindowEx" + _TCHAR,
0, //dwExStyle
"NewClass", //lpClassName
0, //lpWindowName
0x90CA0000, //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
0, //x
0, //y
351, //nWidth
179, //nHeight
hMainWnd, //hWndParent
0, //ID
hInstanceDLL, //hInstance
DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
if (hWndDialog) {
//Disable main window, to make dialog modal
oSys.Call("user32::EnableWindow", hMainWnd, false);
//Message loop
AkelPad.WindowGetMessage();
}
AkelPad.WindowUnregisterClass("NewClass");
}
}
function DialogCallback(hWnd, uMsg, wParam, lParam) {
if (uMsg == 1 /*WM_CREATE*/ ) {} else if (uMsg == 256 /*WM_KEYDOWN*/ ) {
if (wParam == 27 /*VK_ESCAPE*/ ) {
//Escape key pushes Cancel button
oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/ , 2 /*IDCANCEL*/ , 0);
}
} else if (uMsg == 273 /*WM_COMMAND*/ ) {
if ((wParam & 0xffff) == 2 /*IDCANCEL*/ ) {
oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/ , 0, 0);
}
} else if (uMsg == 16 /*WM_CLOSE*/ ) {
//Enable main window
oSys.Call("user32::EnableWindow", hMainWnd, true);
//Destroy dialog
oSys.Call("user32::DestroyWindow", hWnd);
} else if (uMsg == 2 /*WM_DESTROY*/ ) {
//Exit message loop
oSys.Call("user32::PostQuitMessage", 0);
}
return 0;
}
Пример (VBScript):
'Variables
hMainWnd=AkelPad.GetMainWnd()
hInstanceDLL=AkelPad.GetInstanceDll()
set oSys=AkelPad.SystemFunction()
set lpCallbackPtr=GetRef("DialogCallback")
hWndDialog=0
'Constants
Const WM_CREATE=1
Const WM_KEYDOWN=256
Const WM_COMMAND=273
Const WM_CLOSE=16
Const WM_DESTROY=2
Const VK_ESCAPE=27
Const IDCANCEL=2
if vbPtrMath(hMainWnd, "!=", 0) then
if AkelPad.WindowRegisterClass("NewClass") then
'Create dialog WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
hWndDialog=oSys.Call("user32::CreateWindowEx" & vbTCHAR, 0, "NewClass", 0, &H90CA0000, 0, 0, 351, 179, hMainWnd, 0, hInstanceDLL, lpCallbackPtr)
if vbPtrMath(hWndDialog, "!=", 0) then
'Disable main window, to make dialog modal
oSys.Call "user32::EnableWindow", hMainWnd, false
'Message loop
AkelPad.WindowGetMessage()
end if
AkelPad.WindowUnregisterClass "NewClass"
end if
end if
Function DialogCallback(hWnd, uMsg, wParam, lParam)
if uMsg = WM_CREATE then
elseif uMsg = WM_KEYDOWN then
if wParam = VK_ESCAPE then
'Escape key pushes Cancel button
oSys.Call "user32::PostMessage" & vbTCHAR, hWndDialog, WM_COMMAND, IDCANCEL, 0
end if
elseif uMsg = WM_COMMAND then
if (wParam And &Hffff) = IDCANCEL then
oSys.Call "user32::PostMessage" & vbTCHAR, hWndDialog, WM_CLOSE, 0, 0
end if
elseif uMsg = WM_CLOSE then
'Enable main window
oSys.Call "user32::EnableWindow", hMainWnd, true
'Destroy dialog
oSys.Call "user32::DestroyWindow", hWnd
elseif uMsg = WM_DESTROY then
'Exit message loop
oSys.Call "user32::PostQuitMessage", 0
end if
DialogCallback=0
End Function