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