AkelPad.CreateDialog (+ActiveX)

Создать диалог.

CreateDialog(nExStyle, pClassName, pTitle, nStyle, x, y, nWidth, nHeight, hWndParent, lParam[, nFlags][, hMenu][, hInstance][, pFaceName][, nFontStyle][, nPointSize], "|", nExStyle1, pClassName1, pTitle1, nStyle1, x1, y1, nWidth1, nHeight1, nId1[, lParam1], "|", nExStyle2, pClassName2, pTitle2, nStyle2, x2, y2, nWidth2, nHeight2, nId2[, lParam2], "|", [...])

Параметры

nExStyleРасширенный стиль диалога. См. описание CreateWindowEx в MSDN.
pClassNameИмя класса зарегистрированное с помощью AkelPad.WindowRegisterClass.
pTitleТекст заголовка диалога.
nStyleСтиль диалога. См. описание CreateWindowEx в MSDN.
xГоризонтальная позиция диалога в экранных координатах.
yВертикальная позиция диалога в экранных координатах.
nWidthШирина диалога.
nHeightВысота диалога.
hWndParentРодительское окно создаваемого диалога.
lParamУказатель на процедуру диалога.
nFlags0x1  //CDF_MODAL   Создать модальный диалог. Если не указано, создаётся немодальный диалог, который требует наличия AkelPad.WindowGetMessage.
0x2  //CDF_PIXELS  Координаты указываются в пикселях для 96 DPI. Если не указано, координаты
//            указываются в единицах диалогового окна, которые зависят от размеров шрифта диалога.
//По умолчанию 0x0.
hMenuОпределяет порядковое значение ресурса меню в исполняемом файле или строку, которая определяет название ресурса меню в исполняемом файле. Если ноль, не используется (по умолчанию).
hInstanceДескриптор модуля, который будет связан с окном. Если ноль, будет использован дескриптор AkelPad.GetInstanceDll (по умолчанию).
pFaceNameИмя шрифта, например, "Courier". Если "", используется системный шрифт для диалогов (по умолчанию).
Обрабатывается только, когда nStyle имеет флаг 0x40 /*DS_SETFONT*/.
nFontStyle0 игнорировать (по умолчанию).
1 обычный шрифт.
2 жирный шрифт.
3 курсивный шрифт.
4 жирный курсивный шрифт.
Обрабатывается только, когда nStyle имеет флаг 0x40 /*DS_SETFONT*/.
nPointSizeРазмер шрифта. Не изменяется, если 0 (по умолчанию).
Обрабатывается только, когда nStyle имеет флаг 0x40 /*DS_SETFONT*/.
"|"Свидетельствует об окончании передачи параметров диалога и начале передачи параметров элементов управления.
nExStyle1Расширенный стиль окна. См. описание CreateWindowEx в MSDN.
pClassName1Имя класса, например, "BUTTON". См. описание CreateWindowEx в MSDN.
pTitle1Текст элемента управления.
nStyle1Стиль окна. См. описание CreateWindowEx в MSDN.
x1Горизонтальная позиция окна в клиентских координатах (относительно родительского окна).
y1Вертикальная позиция окна в клиентских координатах (относительно родительского окна).
nWidth1Ширина окна.
nHeight1Высота окна.
nId1Идентификатор элемента управления.
lParam1Данные для создания окна. Первый WORD указывает размер данных, в байтах, для создания (включая WORD размера).
Элемент управления получит эти данные в параметре lParam сообщения WM_CREATE. Если ноль, не используется (по умолчанию).
"|"Свидетельствует об окончании передачи параметров элемента управления.
...Параметры следующего элемента управления.

Возвращаемое значение


Если nFlags не содержит флаг CDF_MODAL, то возвращается дескриптор диалога.
Если nFlags содержит флаг CDF_MODAL, то возвращается значение переданное в "user32::EndDialog".

Пример

var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
var hWndDialog = 0;
var wCommand;
var dwFlags = 0x2 /*CDF_PIXELS*/ ;

//Control IDs
var IDC_BUTTON1 = 1001;
var IDC_BUTTON2 = 1002;
var IDC_EDIT = 1003;

if (AkelPad.WindowRegisterClass("My Class")) {
    AkelPad.CreateDialog(0, "My Class", "My Title", 0x90ca0040 /*DS_SETFONT|WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX*/ , 10, 10, 300, 200, hMainWnd, DialogCallback, dwFlags, "|",
        0, "BUTTON", "Button text 1", 0x50010001 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON*/ , 10, 10, 200, 20, IDC_BUTTON1, "|",
        0, "BUTTON", "Button text 2", 0x50010000 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP*/ , 10, 50, 200, 20, IDC_BUTTON2, "|",
        0, "EDIT", "Edit text 3", 0x50010000 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP*/ , 10, 90, 200, 20, IDC_EDIT);

    if (hWndDialog && !(dwFlags & 0x1 /*CDF_MODAL*/ )) {
        AkelPad.ScriptNoMutex();
        AkelPad.WindowGetMessage(0x4 /*WGM_KEYDOWNUP*/ );
    }
    AkelPad.WindowUnregisterClass("My Class");
}

function DialogCallback(hWnd, uMsg, wParam, lParam) {
    if (uMsg == 0x110 /*WM_INITDIALOG*/ ) {
hWndDialog = hWnd;
    } else if (uMsg == 273 /*WM_COMMAND*/ ) {
wCommand = LOWORD(wParam);

        if (wCommand == IDC_BUTTON1 ||
wCommand == IDC_BUTTON2) {
            AkelPad.MessageBox(hWnd, "Button=" + wCommand, WScript.ScriptName, 0 /*MB_OK*/ );
        } else if (wCommand == 2 /*IDCANCEL*/ ) {
            //Destroy dialog
            if (!(dwFlags & 0x1 /*CDF_MODAL*/ )) {
                //Exit message loop
                oSys.Call("user32::PostQuitMessage", 0);

                oSys.Call("user32::DestroyWindow", hWnd);
            } else oSys.Call("user32::EndDialog", hWnd, 0);
        }
    }
    return 0;
}

function LOWORD(dwNumber) {
    return (dwNumber & 0xffff);
}