in src/native/windows/src/gui.c [780:902]
static LRESULT CALLBACK __apxSelectUserDlgProc(HWND hDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
static HWND hList;
static LPWSTR lpUser;
RECT r, *l;
// Ensure NETAPI32.DLL is loaded as the functions that populate the user
// dialogue box depend on it.
LoadLibraryExA("NETAPI32.DLL", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
switch (uMsg) {
case WM_INITDIALOG:
/* Set the application icon */
SetClassLong(hDlg, GCLP_HICON,
(LONG)(SIZE_T)LoadIcon(_st_sys_gui.hInstance,
MAKEINTRESOURCE(IDI_MAINICON)));
apxCenterWindow(hDlg, _st_sys_gui.hMainWnd);
hList = GetDlgItem(hDlg, IDSU_LIST);
__apxSelectUserCreateLv(hDlg);
__apxSelectUserCreateCbex(hDlg);
GetClientRect(hDlg, &r);
/* Resize the controls */
__apxSelectUserDlgResize(hDlg, r.right - r.left,
r.bottom - r.top);
lpUser = (LPWSTR)lParam;
__apxSelectUserPopulate(hDlg, NULL);
return TRUE;
break;
case WM_SIZING:
l = (LPRECT)lParam;
/* limit the window size */
switch (wParam) {
case WMSZ_BOTTOM:
case WMSZ_BOTTOMRIGHT:
if ((l->bottom - l->top) < SUMIN_HEIGHT)
l->bottom = l->top + SUMIN_HEIGHT;
if ((l->right - l->left) < SUMIN_WIDTH)
l->right = l->left + SUMIN_WIDTH;
break;
case WMSZ_TOPLEFT:
if ((l->bottom - l->top) < SUMIN_HEIGHT)
l->top = l->bottom - SUMIN_HEIGHT;
if ((l->right - l->left) < SUMIN_WIDTH)
l->left = l->right - SUMIN_WIDTH;
break;
case WMSZ_TOP:
case WMSZ_RIGHT:
case WMSZ_TOPRIGHT:
if ((l->bottom - l->top) < SUMIN_HEIGHT)
l->top = l->bottom - SUMIN_HEIGHT;
if ((l->right - l->left) < SUMIN_WIDTH)
l->right = l->left + SUMIN_WIDTH;
break;
case WMSZ_BOTTOMLEFT:
case WMSZ_LEFT:
if ((l->bottom - l->top) < SUMIN_HEIGHT)
l->bottom = l->top + SUMIN_HEIGHT;
if ((l->right - l->left) < SUMIN_WIDTH)
l->left = l->right - SUMIN_WIDTH;
break;
}
break;
case WM_SIZE:
__apxSelectUserDlgResize(hDlg, LOWORD(lParam),
HIWORD(lParam));
GetClientRect(hDlg, &r);
InvalidateRect(hDlg, &r, FALSE);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
case IDCANCEL:
/* Clear the user name buffer */
*lpUser = L'\0';
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
break;
case IDSU_SELECTED:
if (HIWORD(wParam) == EN_CHANGE) {
/* enable OK button if there is a user */
GetDlgItemTextW(hDlg, IDSU_SELECTED, lpUser, SIZ_RESMAX);
if (lstrlenW(lpUser))
Button_Enable(GetDlgItem(hDlg, IDOK), TRUE);
else
Button_Enable(GetDlgItem(hDlg, IDOK), FALSE);
}
break;
case IDSU_COMBO:
if (HIWORD(wParam) == CBN_SELCHANGE) {
COMBOBOXEXITEMW cbEi;
DWORD i;
WCHAR szServer[SIZ_RESLEN] = L"\\\\";
HWND hCombo = GetDlgItem(hDlg, IDSU_COMBO);
if ((i = ComboBox_GetCurSel(hCombo)) >= 0) {
cbEi.mask = CBEIF_TEXT;
cbEi.iItem = i;
cbEi.cchTextMax = SIZ_RESMAX;
cbEi.pszText = &szServer[2];
SendMessageW(hCombo, CBEM_GETITEM, 0, (LPARAM)&cbEi);
}
if (szServer[2])
__apxSelectUserPopulate(hDlg, szServer);
}
break;
}
break;
case WM_MOUSEWHEEL:
{
int nScroll;
if ((SHORT)HIWORD(wParam) < 0)
nScroll = _st_sys_gui.nWhellScroll;
else
nScroll = _st_sys_gui.nWhellScroll * (-1);
}
break;
}
return FALSE;
}