2012-07-12 52 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