static LRESULT CALLBACK __apxSelectUserDlgProc()

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;
}