Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

205 lines
5.3 KiB

/**************************** Module Header ********************************\
* Module Name: combodir.c
*
* Copyright (c) 1985 - 1999, Microsoft Corporation
*
* Directory Combo Box Routines
*
* History:
* ??-???-???? ?????? Ported from Win 3.0 sources
* 01-Feb-1991 mikeke Added Revalidation code
\***************************************************************************/
#define CTLMGR
#define LSTRING
#include "precomp.h"
#pragma hdrstop
/***************************************************************************\
* xxxCBDir
*
* Supports the CB_DIR message which adds a list of files from the
* current directory to the combo box.
*
* History:
\***************************************************************************/
int xxxCBDir(
PCBOX pcbox,
UINT attrib,
LPWSTR pFileName)
{
PLBIV plb;
int errorValue;
TL tlpwnd;
CheckLock(pcbox->spwnd);
UserAssert(pcbox->spwndList);
plb = ((PLBWND)pcbox->spwndList)->pLBIV;
ThreadLock(plb->spwnd, &tlpwnd);
errorValue = xxxLbDir(plb, attrib, pFileName);
ThreadUnlock(&tlpwnd);
switch (errorValue) {
case LB_ERR:
return CB_ERR;
break;
case LB_ERRSPACE:
return CB_ERRSPACE;
break;
default:
return errorValue;
break;
}
}
/***************************************************************************\
* DlgDirSelectComboBoxEx
*
* Retrieves the current selection from the listbox of a combobox.
* It assumes that the combo box was filled by xxxDlgDirListComboBox()
* and that the selection is a drive letter, a file, or a directory name.
*
* History:
* 12-05-90 IanJa converted to internal version
\***************************************************************************/
FUNCLOG4(LOG_GENERAL, int, DUMMYCALLINGTYPE, DlgDirSelectComboBoxExA, HWND, hwndDlg, LPSTR, pszOut, int, cchOut, int, idComboBox)
int DlgDirSelectComboBoxExA(
HWND hwndDlg,
LPSTR pszOut,
int cchOut,
int idComboBox)
{
LPWSTR lpwsz;
BOOL fRet;
lpwsz = (LPWSTR)UserLocalAlloc(HEAP_ZERO_MEMORY, cchOut * sizeof(WCHAR));
if (!lpwsz) {
return FALSE;
}
fRet = DlgDirSelectComboBoxExW(hwndDlg, lpwsz, cchOut, idComboBox);
WCSToMB(lpwsz, -1, &pszOut, cchOut, FALSE);
UserLocalFree(lpwsz);
return fRet;
}
FUNCLOG4(LOG_GENERAL, int, DUMMYCALLINGTYPE, DlgDirSelectComboBoxExW, HWND, hwndDlg, LPWSTR, pwszOut, int, cchOut, int, idComboBox)
int DlgDirSelectComboBoxExW(
HWND hwndDlg,
LPWSTR pwszOut,
int cchOut,
int idComboBox)
{
PWND pwndDlg;
PWND pwndComboBox;
PCBOX pcbox;
pwndDlg = ValidateHwnd(hwndDlg);
if (pwndDlg == NULL)
return FALSE;
pwndComboBox = _GetDlgItem(pwndDlg, idComboBox);
if (pwndComboBox == NULL) {
RIPERR0(ERROR_CONTROL_ID_NOT_FOUND, RIP_VERBOSE, "");
return 0;
}
pcbox = ((PCOMBOWND)pwndComboBox)->pcbox;
if (pcbox == NULL) {
RIPERR0(ERROR_WINDOW_NOT_COMBOBOX, RIP_VERBOSE, "");
return 0;
}
return DlgDirSelectHelper(pwszOut, cchOut, HWq(pcbox->spwndList));
}
/***************************************************************************\
* xxxDlgDirListComboBox
*
* History:
* 12-05-90 IanJa converted to internal version
\***************************************************************************/
FUNCLOG5(LOG_GENERAL, int, DUMMYCALLINGTYPE, DlgDirListComboBoxA, HWND, hwndDlg, LPSTR, lpszPathSpecClient, int, idComboBox, int, idStaticPath, UINT, attrib)
int DlgDirListComboBoxA(
HWND hwndDlg,
LPSTR lpszPathSpecClient,
int idComboBox,
int idStaticPath,
UINT attrib)
{
LPWSTR lpszPathSpec;
TL tlpwndDlg;
PWND pwndDlg;
BOOL fRet;
pwndDlg = ValidateHwnd(hwndDlg);
if (pwndDlg == NULL)
return FALSE;
lpszPathSpec = NULL;
if (lpszPathSpecClient) {
if (!MBToWCS(lpszPathSpecClient, -1, &lpszPathSpec, -1, TRUE))
return FALSE;
}
ThreadLock(pwndDlg, &tlpwndDlg);
fRet = xxxDlgDirListHelper(pwndDlg, lpszPathSpec, lpszPathSpecClient,
idComboBox, idStaticPath, attrib, FALSE);
ThreadUnlock(&tlpwndDlg);
if (lpszPathSpec) {
if (fRet) {
/*
* Non-zero retval means some text to copy out. Copy out up to
* the nul terminator (buffer will be big enough).
*/
WCSToMB(lpszPathSpec, -1, &lpszPathSpecClient, MAXLONG, FALSE);
}
UserLocalFree(lpszPathSpec);
}
return fRet;
}
FUNCLOG5(LOG_GENERAL, int, DUMMYCALLINGTYPE, DlgDirListComboBoxW, HWND, hwndDlg, LPWSTR, lpszPathSpecClient, int, idComboBox, int, idStaticPath, UINT, attrib)
int DlgDirListComboBoxW(
HWND hwndDlg,
LPWSTR lpszPathSpecClient,
int idComboBox,
int idStaticPath,
UINT attrib)
{
LPWSTR lpszPathSpec;
PWND pwndDlg;
TL tlpwndDlg;
BOOL fRet;
pwndDlg = ValidateHwnd(hwndDlg);
if (pwndDlg == NULL)
return FALSE;
lpszPathSpec = lpszPathSpecClient;
ThreadLock(pwndDlg, &tlpwndDlg);
fRet = xxxDlgDirListHelper(pwndDlg, lpszPathSpec, (LPBYTE)lpszPathSpecClient,
idComboBox, idStaticPath, attrib, FALSE);
ThreadUnlock(&tlpwndDlg);
return fRet;
}