windows-nt/Source/XPSP1/NT/shell/ext/dsui/dsquery/qf_ldap.cpp
2020-09-26 16:20:57 +08:00

210 lines
6.1 KiB
C++

#include "pch.h"
#pragma hdrstop
/*-----------------------------------------------------------------------------
/ Local functions / data
/----------------------------------------------------------------------------*/
#define MAX_QUERY_STRING_LENGTH 2048
static TCHAR szQueryString[] = TEXT("QueryString");
static COLUMNINFO columnsRawLDAP[] =
{
0, 20, IDS_CN, 0, c_szName,
0, 20, IDS_OBJECTCLASS, DSCOLUMNPROP_OBJECTCLASS, NULL,
0, 60, IDS_DESCRIPTION, 0, c_szDescription,
};
//
// Help ID mappings
//
static DWORD const aFormHelpIDs[] =
{
IDC_LDAP, IDH_LDAP_QUERY,
0, 0
};
/*-----------------------------------------------------------------------------
/ PageProc_RawLDAP
/ ----------------
/ PageProc for handling the messages for this object.
/
/ In:
/ pPage -> instance data for this form
/ hwnd = window handle for the form dialog
/ uMsg, wParam, lParam = message parameters
/
/ Out:
/ HRESULT (E_NOTIMPL) if not handled
/----------------------------------------------------------------------------*/
HRESULT CALLBACK PageProc_RawLDAP(LPCQPAGE pPage, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HRESULT hr = S_OK;
TCHAR szBuffer[MAX_QUERY_STRING_LENGTH];
USES_CONVERSION;
TraceEnter(TRACE_FORMS, "PageProc_RawLDAP");
switch ( uMsg )
{
case CQPM_INITIALIZE:
case CQPM_RELEASE:
break;
case CQPM_ENABLE:
EnableWindow(GetDlgItem(hwnd, IDC_LDAP), (BOOL)wParam);
break;
case CQPM_GETPARAMETERS:
{
LPDSQUERYPARAMS* ppDsQueryParams = (LPDSQUERYPARAMS*)lParam;
// If we already have some query params then lets add to the query string,
// if no then we must construct a new query.
if ( *ppDsQueryParams )
{
if ( GetDlgItemText(hwnd, IDC_LDAP, szBuffer, ARRAYSIZE(szBuffer)) )
{
hr = QueryParamsAddQueryString(ppDsQueryParams, T2W(szBuffer));
FailGracefully(hr, "Failed to append query to existing query string");
}
}
else
{
if ( GetDlgItemText(hwnd, IDC_LDAP, szBuffer, ARRAYSIZE(szBuffer)) )
{
hr = QueryParamsAlloc(ppDsQueryParams, T2W(szBuffer), GLOBAL_HINSTANCE, ARRAYSIZE(columnsRawLDAP), columnsRawLDAP);
FailGracefully(hr, "Failed to build DS argument block");
}
}
break;
}
case CQPM_CLEARFORM:
SetDlgItemText(hwnd, IDC_LDAP, TEXT(""));
break;
case CQPM_PERSIST:
{
BOOL fRead = (BOOL)wParam;
IPersistQuery* pPersistQuery = (IPersistQuery*)lParam;
// Read/Write the current query string from the file, if reading and we cannot
// get the string then no real problem, just ignore it.
if ( fRead )
{
if ( SUCCEEDED(pPersistQuery->ReadString(c_szMsPropertyWell, szQueryString, szBuffer, ARRAYSIZE(szBuffer))) )
{
Trace(TEXT("Query string from file is: %s"), szBuffer);
SetDlgItemText(hwnd, IDC_LDAP, szBuffer);
}
}
else
{
if ( GetDlgItemText(hwnd, IDC_LDAP, szBuffer, ARRAYSIZE(szBuffer)) )
{
Trace(TEXT("Writing query string to file: %s"), szBuffer);
hr = pPersistQuery->WriteString(c_szMsPropertyWell, szQueryString, szBuffer);
FailGracefully(hr, "Failed when writing out raw query string");
}
}
break;
}
case CQPM_HELP:
{
LPHELPINFO pHelpInfo = (LPHELPINFO)lParam;
WinHelp((HWND)pHelpInfo->hItemHandle,
DSQUERY_HELPFILE,
HELP_WM_HELP,
(DWORD_PTR)aFormHelpIDs);
break;
}
case DSQPM_GETCLASSLIST:
// we don't generate any class list
break;
case DSQPM_HELPTOPICS:
{
HWND hwndFrame = (HWND)lParam;
HtmlHelp(hwndFrame, TEXT("omc.chm"), HH_HELP_FINDER, 0);
break;
}
default:
hr = E_NOTIMPL;
break;
}
exit_gracefully:
TraceLeaveResult(hr);
}
/*-----------------------------------------------------------------------------
/ DlgProc_RawLDAP
/ ---------------
/ Handle operations specific to the RAW LDAP query form.
/
/ In:
/ hwnd, uMsg, wParam, lParam = standard parameters
/
/ Out:
/ INT_PTR
/----------------------------------------------------------------------------*/
INT_PTR CALLBACK DlgProc_RawLDAP(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
INT_PTR fResult = 0;
LPCQPAGE pQueryPage;
if ( uMsg == WM_INITDIALOG )
{
pQueryPage = (LPCQPAGE)lParam;
SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)pQueryPage);
Edit_LimitText(GetDlgItem(hwnd, IDC_LDAP), MAX_QUERY_STRING_LENGTH);
}
else
{
pQueryPage = (LPCQPAGE)GetWindowLongPtr(hwnd, DWLP_USER);
switch ( uMsg )
{
case WM_SIZE:
{
HWND hwndLDAP = GetDlgItem(hwnd, IDC_LDAP);
RECT rect;
// size the edit control to cover the entire form, retain the original
// height, but apply the left border to the edit control
GetRealWindowInfo(hwndLDAP, &rect, NULL);
SetWindowPos(hwndLDAP, NULL,
0, 0,
LOWORD(lParam)-(rect.left*2),
HIWORD(lParam)-rect.top-rect.left,
SWP_NOMOVE|SWP_NOZORDER);
break;
}
case WM_CONTEXTMENU:
{
WinHelp((HWND)wParam, DSQUERY_HELPFILE, HELP_CONTEXTMENU, (DWORD_PTR)aFormHelpIDs);
fResult = TRUE;
break;
}
}
}
return fResult;
}