【问题标题】:NSIS Plugin: Cant get HWND from parameter functionNSIS 插件:无法从参数函数中获取 HWND
【发布时间】:2012-07-12 01:12:59
【问题描述】:

我有自己制作的 NSIS 插件 DLL。该 dll 有一个函数,它将 hwnd id 编号作为参数,然后创建一个编辑框窗口,该 hwnd 作为编辑框的父 hwnd。

我的问题:我无法将 HWND 传递给我的 NSIS 插件 DLL。我可以检索 hwnd id,然后识别实际的 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

【问题讨论】:

    标签: c++ winapi nsis


    【解决方案1】:

    nsDialogs::Create 返回 inner dialog 的 HWND(不是 ID)。

    nsDialogs 已经可以创建编辑框,因此您当前的代码毫无意义...

    【讨论】:

    • 我知道nsDialogs可以创建编辑框。这只是一个例子,我正在创建一个 nsDialogs 不能的透明复选框。它的概念相同,我必须给编辑框/复选框一个有效的父 hwnd。是否可以将 hwnd 作为参数传递,还是必须传递 hwnd id?
    • 知道了:它只是 HWND hwnd = (HWND)popint();
    • 控件透明度存在一些已知错误。最好的方法是子类化您的控件并处理 WM_PAINT 消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    相关资源
    最近更新 更多