Плагин NSIS: невозможно получить HWND из функции параметра

У меня есть созданная мной собственная библиотека подключаемого модуля NSIS. В dll есть одна функция, которая принимает номер идентификатора hwnd в качестве параметра, а затем создает окно поля редактирования с этим hwnd в качестве родительского hwnd поля редактирования.

Моя проблема: Мне не удается передать HWND в свою DLL подключаемого модуля NSIS. Я могу получить идентификатор hwnd, а затем определить фактический hwnd (я думаю), но когда я создаю свой блок редактирования, он никогда не отображается в hwnd?

Что я делаю неправильно. Как мне правильно найти hwnd, переданный как параметр?

    extern "C" void __declspec(dllexport) __cdecl CreateEditbox(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra)
    {
        g_hwndParent=hwndParent;
        EXDLL_INIT();

        {
            int hwndID = popint();
            HWND hwnd  = GetDlgItem(hwndParent, hwndID);
            HWND a = CreateWindowEx(WS_EX_TRANSPARENT, TEXT("Edit"), text, WS_VISIBLE|WS_CHILD, 20, 20, 100, 20,
            hwnd, NULL, GetModuleHandle(NULL), NULL);
        }
    }

Мой код NSIS:

    Page custom Start

    Function Start
        nsDialogs::Create 1018
        Pop $0

        tbox::CreateEditbox $0

        nsDialogs::Show
    FunctionEnd

person sazr    schedule 12.07.2012    source источник


Ответы (1)


nsDialogs :: Create возвращает HWND (не идентификатор) внутреннего диалогового окна.

nsDialogs уже может создавать поля редактирования, поэтому ваш текущий код бессмыслен ...

person Anders    schedule 12.07.2012
comment
Я знаю, что nsDialogs может создавать поля редактирования. Это просто пример, я создаю прозрачный флажок, который не может nsDialogs. Это та же концепция, я должен дать блоку редактирования / флажку действительный родительский hwnd. Можно ли передать hwnd в качестве параметра или мне нужно передать идентификатор hwnd? - person sazr; 12.07.2012
comment
понял: это просто HWND hwnd = (HWND) popint (); - person sazr; 12.07.2012
comment
Есть несколько известных ошибок в прозрачности элементов управления. Лучший способ - создать подкласс вашего элемента управления и обработать сообщение WM_PAINT. - person Slappy; 13.07.2012