Code: Select all
var oSys = AkelPad.SystemFunction();
var hInstDLL = AkelPad.GetInstanceDll();
var sClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + hInstDLL;
var hMainWnd = AkelPad.GetMainWnd();
var hMenu = CreateMainMenu();
var hEdit;
var hButton;
var hFocus;
AkelPad.WindowRegisterClass(sClass);
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
sClass, //lpClassName
"Menu", //lpWindowName
0x90CA0000, //dwStyle=WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
300, //x
200, //y
260, //nWidth
160, //nHeight
hMainWnd, //hWndParent
hMenu, //hMenu
hInstDLL, //hInstance
DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
AkelPad.WindowGetMessage();
AkelPad.WindowUnregisterClass(sClass);
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 1) //WM_CREATE
{
hEdit =
oSys.Call("User32::CreateWindowExW",
0x0200, //dwExStyle
"EDIT", //lpClassName
"Text", //lpWindowName
0x50010080, //dwStyle
10, //x
70, //y
130, //nWidth
21, //nHeight
hWnd, //hWndParent
1001, //ID
hInstDLL, //hInstance
0); //lpParam
hButton =
oSys.Call("User32::CreateWindowExW",
0, //dwExStyle
"BUTTON", //lpClassName
"Exit", //lpWindowName
0x50010000, //dwStyle
160, //x
70, //y
80, //nWidth
23, //nHeight
hWnd, //hWndParent
1002, //ID
hInstDLL, //hInstance
0); //lpParam
hFocus = hEdit;
}
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 == 256 /*WM_KEYDOWN*/)
{
if (wParam == 27 /*VK_ESCAPE*/)
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
else if (uMsg == 273 /*WM_COMMAND*/)
{
var nLowParam = LoWord(wParam);
var nHiwParam = HiWord(wParam);
//button
if (lParam)
{
if (nLowParam == 1002)
oSys.Call("User32::PostMessageW", hWnd, 16 /*WM_CLOSE*/, 0, 0);
}
//menu
else if (! nHiwParam)
oSys.Call("User32::SetWindowTextW", hEdit, "Menu ID: " + nLowParam);
}
else if (uMsg == 16 /*WM_CLOSE*/)
oSys.Call("User32::DestroyWindow", hWnd); //Destroy dialog
else if (uMsg == 2 /*WM_DESTROY*/)
oSys.Call("User32::PostQuitMessage", 0); //Exit message loop
return 0;
}
function LoWord(nDwNum)
{
return nDwNum & 0xFFFF;
}
function HiWord(nDwNum)
{
return (nDwNum >> 16) & 0xFFFF;
}
function CreateMainMenu()
{
var MF_STRING = 0x0000;
var MF_POPUP = 0x0010;
var hMenu = oSys.Call("User32::CreateMenu");
var hMenu1 = oSys.Call("User32::CreatePopupMenu");
var hMenu2 = oSys.Call("User32::CreatePopupMenu");
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu1, "&Find");
oSys.Call("User32::AppendMenuW", hMenu, MF_POPUP, hMenu2, "&Go to");
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, 5101, "Find &1");
oSys.Call("User32::AppendMenuW", hMenu1, MF_STRING, 5102, "Find &2");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 5201, "Go to &1");
oSys.Call("User32::AppendMenuW", hMenu2, MF_STRING, 5202, "Go to &2");
return hMenu;
}