2012-07-12 49 views
0

我有我自己的NSIS插件DLL。该dll有一个函数,它将一个hwnd id号码作为参数,然后创建一个编辑框窗口,该hwnd作为编辑框的父级hwnd。NSIS插件:不能从参数函数获取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 

回答

0

nsDialogs ::创建inner dialog的回报HWND(未标识)。

nsDialogs已经可以创建编辑框让你当前的代码是毫无意义的...

+0

我知道nsDialogs可以创建编辑框。这只是一个例子,我创建了一个透明的复选框,nsDialogs不能。其相同的概念,我必须给编辑框/复选框一个有效的父HWWD。是否有可能传递一个hwnd作为参数,或者我必须传递一个hwnd ID? – 2012-07-12 02:51:24

+0

明白了:它只是HWND hwnd =(HWND)popint(); – 2012-07-12 03:02:56

+0

控件透明度中有一些已知的错误。最好的方法是将您的控件进行子类化并处理WM_PAINT消息。 – Slappy 2012-07-13 04:30:59