implemented feature request #711900 - StartMenu SetCtlColors support

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3916 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2005-03-04 13:04:14 +00:00
parent 8db5fa9604
commit e9efbba1a2
3 changed files with 55 additions and 12 deletions

View file

@ -27,7 +27,7 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK ParentWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void AddFolderFromReg(int nFolder);
void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
void __declspec(dllexport) Init(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
{
HWND hwStartMenuSelect;
@ -71,11 +71,17 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab
{
popstring(checkbox);
}
if (popstring(buf))
{
*buf = 0;
}
}
if (*buf)
{
lstrcpy(progname, buf);
}
else
{
pushstring("error reading parameters");
@ -87,23 +93,40 @@ void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variab
if (!hwStartMenuSelect)
{
pushstring("error creating dialog");
g_done = 1;
return;
}
else
{
lpWndProcOld = (void *) SetWindowLong(hwndParent, DWL_DLGPROC, (long) ParentWndProc);
wsprintf(buf, "%u", hwStartMenuSelect);
pushstring(buf);
}
}
}
while (!g_done)
{
MSG msg;
int nResult = GetMessage(&msg, NULL, 0, 0);
if (!IsDialogMessage(hwStartMenuSelect,&msg) && !IsDialogMessage(hwndParent,&msg) && !TranslateMessage(&msg))
DispatchMessage(&msg);
}
DestroyWindow(hwStartMenuSelect);
void __declspec(dllexport) Show(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
{
HWND hwStartMenuSelect = g_hwStartMenuSelect;
SetWindowLong(hwndParent, DWL_DLGPROC, (long) lpWndProcOld);
while (!g_done)
{
MSG msg;
int nResult = GetMessage(&msg, NULL, 0, 0);
if (!IsDialogMessage(hwStartMenuSelect,&msg) && !IsDialogMessage(hwndParent,&msg) && !TranslateMessage(&msg))
DispatchMessage(&msg);
}
DestroyWindow(hwStartMenuSelect);
SetWindowLong(hwndParent, DWL_DLGPROC, (long) lpWndProcOld);
}
void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
{
Init(hwndParent, string_size, variables, stacktop);
if (g_hwStartMenuSelect)
{
popstring(buf);
Show(hwndParent, string_size, variables, stacktop);
}
}
@ -345,6 +368,13 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
pushstring(buf);
pushstring("success");
}
case WM_CTLCOLORSTATIC:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORDLG:
case WM_CTLCOLORBTN:
case WM_CTLCOLORLISTBOX:
// let the NSIS window handle colors, it knows best
return SendMessage(hwParent, uMsg, wParam, lParam);
break;
}
return 0;