Code: Select all
var oSys = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hFont = oSys.Call("Gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var nCounter = 0;
var IDCLOSE = 2;
var IDNEW = 1000;
var IDCHECK1 = 1001;
var IDCHECK2 = 1002;
var IDCHECK3 = 1003;
var IDCHECK4 = 1004;
var IDCHECK5 = 1005;
var IDCHECK6 = 1006;
var IDCHECK7 = 1007;
var IDCHECK8 = 1008;
var IDCHECK9 = 1009;
var IDCHECK10 = 1010;
var IDCHECK11 = 1011;
var IDCHECK12 = 1012;
var IDCHECK13 = 1013;
var IDCHECK14 = 1014;
var IDCHECK15 = 1015;
if (AkelPad.WindowRegisterClass(sClass))
{
CreateNewWindow(0);
AkelPad.WindowUnregisterClass(sClass);
}
function CreateNewWindow(hParent)
{
var lpRect = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);
var nX, nY;
var hFocus;
oSys.Call("User32::GetWindowRect", hParent, lpRect);
nX = AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/) + 15;
nY = AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/) + 35;
oSys.Call("User32::GetWindowRect", oSys.Call("User32::GetDesktopWindow"), lpRect);
if (nY > AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/) - 100)
nY = 35;
AkelPad.MemFree(lpRect);
if (oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
sClass, //lpClassName
0, //lpWindowName
0x90CA0000, //dwStyle=WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
nX, //x
nY, //y
216, //nWidth
379, //nHeight
hParent, //hWndParent
0, //hMenu
hInstDLL, //hInstance
DialogCallback)) //Script function callback. To use it class must be registered by WindowRegisterClass.
{
oSys.Call("user32::EnableWindow", hParent, 0);
if (nCounter == 1)
AkelPad.WindowGetMessage();
}
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1 /*WM_CREATE*/)
{
var i;
oSys.Call("User32::SetWindowTextW", hWnd, "Window " + ++nCounter);
for (i = 0; i < 15; ++i)
{
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
"BUTTON", //lpClassName
"CheckBox" + (i + 1), //lpWindowName
0x50010003, //dwStyle=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
60, //x
10 + 20 * i, //y
100, //nWidth
16, //nHeight
hWnd, //hWndParent
IDCHECK1 + i, //ID
hInstDLL, //hInstance
0); //lpParam
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hWnd, IDCHECK1 + i), 48 /*WM_SETFONT*/, hFont, 0);
}
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
"BUTTON", //lpClassName
"&New Window", //lpWindowName
0x50010001, //dwStyle=WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON
10, //x
315, //y
90, //nWidth
23, //nHeight
hWnd, //hWndParent
IDNEW, //ID
hInstDLL, //hInstance
0); //lpParam
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hWnd, IDNEW), 48 /*WM_SETFONT*/, hFont, 0);
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
"BUTTON", //lpClassName
"Close", //lpWindowName
0x50010000, //dwStyle=WS_VISIBLE|WS_CHILD|WS_TABSTOP
110, //x
315, //y
90, //nWidth
23, //nHeight
hWnd, //hWndParent
IDCLOSE, //ID
hInstDLL, //hInstance
0); //lpParam
AkelPad.SendMessage(oSys.Call("User32::GetDlgItem", hWnd, IDCLOSE), 48 /*WM_SETFONT*/, hFont, 0);
hFocus = oSys.Call("User32::GetDlgItem", hWnd, IDNEW);
}
else if ((uMsg == 6 /*WM_ACTIVATE*/) && (wParam == 0 /*WA_INACTIVE*/))
hFocus = oSys.Call("User32::GetFocus");
else if (uMsg == 7 /*WM_SETFOCUS*/)
oSys.Call("User32::SetFocus", hFocus);
else if (uMsg == 273 /*WM_COMMAND*/)
{
var nLowParam = wParam & 0xFFFF;
if (nLowParam == IDNEW)
CreateNewWindow(hWnd);
else if (nLowParam == IDCLOSE)
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 16 /*WM_CLOSE*/)
{
oSys.Call("user32::EnableWindow", hParent, 1);
oSys.Call("User32::DestroyWindow", hWnd);
}
else if (uMsg == 2 /*WM_DESTROY*/)
{
if (nCounter-- == 1)
oSys.Call("User32::PostQuitMessage", 0);
}
return 0;
}
}