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
我知道nsDialogs可以创建编辑框。这只是一个例子,我创建了一个透明的复选框,nsDialogs不能。其相同的概念,我必须给编辑框/复选框一个有效的父HWWD。是否有可能传递一个hwnd作为参数,或者我必须传递一个hwnd ID? – 2012-07-12 02:51:24
明白了:它只是HWND hwnd =(HWND)popint(); – 2012-07-12 03:02:56
控件透明度中有一些已知的错误。最好的方法是将您的控件进行子类化并处理WM_PAINT消息。 – Slappy 2012-07-13 04:30:59