NT4/private/windows/win4help/hcw/addalias.cpp
2020-09-30 17:12:29 +02:00

304 lines
7.8 KiB
C++

/************************************************************************
* *
* ADDALIAS.CPP *
* *
* Copyright (C) Microsoft Corporation 1995 *
* All Rights reserved. *
* *
************************************************************************/
#include "stdafx.h"
#include "resource.h"
#pragma hdrstop
#include "addalias.h"
#include <ctype.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CAddAlias - Constructor.for the addalias dialog.
// pParent - handle of parent window
// dwHelpID - help ID for Overview button
// paContextHelpIDs - array of three help IDs for the
// three edit fields; specify zero for an edit
// field that has no context help; specify NULL
// if none of the fields have context help.
CAddAlias::CAddAlias(CWnd* pParent, DWORD dwHelpID /* =0 */,
LPDWORD paContextHelpIDs /* =NULL */ )
: CDialog(CAddAlias::IDD, pParent)
{
idDlgCaption = DEFAULT_TEXT;
idStr1Prompt = DEFAULT_TEXT;
idStr2Prompt = DEFAULT_TEXT;
idStr3Prompt = DEFAULT_TEXT;
idEmptyStr1 = DEFAULT_TEXT;
idEmptyStr2 = DEFAULT_TEXT;
idEmptyStr3 = DEFAULT_TEXT;
cbMaxStr1 = cbMaxStr2 = cbMaxStr3 = 256; // override with zero for no limit
m_str2 = "";
m_str1 = "";
m_str3 = "";
m_dwHelpID = dwHelpID;
if (paContextHelpIDs) {
static DWORD aIdStatic[] = {
IDC_STATIC_CTX,
IDC_STATIC_MAP_VALUE,
IDC_STATIC_COMMENT
};
static DWORD aIdEdit[] = {
IDC_EDIT_ORG_CTX,
IDC_EDIT_ALIAS_CTX,
IDC_EDIT_COMMENT
};
UINT iField; // index into array provided by caller
UINT iHelp; // index into array of DWORD pairs
// Initialize the array of DWORD pairs, each of which consists
// of a control id followed by a help id.
for (iField = 0, iHelp = 0; iField < 3; iField++) {
DWORD dwHelpID = paContextHelpIDs[iField];
if (dwHelpID) {
m_aContextHelpIDs[iHelp] = aIdStatic[iField];
m_aContextHelpIDs[iHelp + 1] = dwHelpID;
m_aContextHelpIDs[iHelp + 2] = aIdEdit[iField];
m_aContextHelpIDs[iHelp + 3] = dwHelpID;
iHelp += 4;
}
}
// The array is terminated by two zeros.
m_aContextHelpIDs[iHelp] = 0;
m_aContextHelpIDs[iHelp + 1] = 0;
}
else {
// Empty array (two zero terminators only).
m_aContextHelpIDs[0] = 0;
m_aContextHelpIDs[1] = 0;
}
m_id1_fTrackTranslation = m_id2_fTrackTranslation =
m_id3_fTrackTranslation = FALSE;
//{{AFX_DATA_INIT(CAddAlias)
//}}AFX_DATA_INIT
}
void CAddAlias::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddAlias)
//}}AFX_DATA_MAP
if (idStr1Prompt != HIDE_CONTROL) {
DDX_Text(pDX, IDC_EDIT_ORG_CTX, m_str1);
if (cbMaxStr1)
DDV_MaxChars(pDX, m_str1, cbMaxStr1);
if (idEmptyStr1 >= 0)
DDV_NonEmptyString(pDX, m_str1, idEmptyStr1);
}
if (idStr2Prompt != HIDE_CONTROL) {
DDX_Text(pDX, IDC_EDIT_ALIAS_CTX, m_str2);
if (cbMaxStr2)
DDV_MaxChars(pDX, m_str2, cbMaxStr2);
if (idEmptyStr2 == IDS_MUST_BE_DIGIT) {
if (!isdigit(*m_str2) && pDX->m_bSaveAndValidate) {
MsgBox(IDS_MUST_BE_DIGIT);
pDX->Fail();
}
}
else if (idEmptyStr2 >= 0)
DDV_NonEmptyString(pDX, m_str2, idEmptyStr2);
}
if (idStr3Prompt != HIDE_CONTROL) {
DDX_Text(pDX, IDC_EDIT_COMMENT, m_str3);
if (cbMaxStr3)
DDV_MaxChars(pDX, m_str3, cbMaxStr3);
if (idEmptyStr3 == IDS_MUST_BE_DIGIT) {
if (!isdigit(*m_str3) && pDX->m_bSaveAndValidate) {
MsgBox(IDS_MUST_BE_DIGIT);
pDX->Fail();
}
}
else if (idEmptyStr3 >= 0)
DDV_NonEmptyString(pDX, m_str3, idEmptyStr3);
}
if (!pDX->m_bSaveAndValidate) { // initialization
SetChicagoDialogStyles(m_hWnd);
}
}
BEGIN_MESSAGE_MAP(CAddAlias, CDialog)
//{{AFX_MSG_MAP(CAddAlias)
ON_BN_CLICKED(IDHELP, OnHelp)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_CONTEXTMENU, OnContextMenu)
ON_MESSAGE(WM_HELP, OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddAlias message handlers
enum {
I_STATIC_1,
I_EDIT_1,
I_STATIC_2,
I_EDIT_2,
I_STATIC_3,
I_EDIT_3,
I_BTN_OK,
I_BTN_CANCEL,
I_BTN_HELP,
C_CONTROLS
};
static UINT g_aControlIDs[C_CONTROLS] = {
IDC_STATIC_CTX,
IDC_EDIT_ORG_CTX,
IDC_STATIC_MAP_VALUE,
IDC_EDIT_ALIAS_CTX,
IDC_STATIC_COMMENT,
IDC_EDIT_COMMENT,
IDOK,
IDCANCEL,
IDHELP
};
BOOL CAddAlias::OnInitDialog()
{
CDialog::OnInitDialog();
CWnd* apControls[C_CONTROLS];
POINT aPtControls[C_CONTROLS];
int iCtl;
for (iCtl = 0; iCtl < C_CONTROLS; iCtl++) {
RECT rc;
apControls[iCtl] = GetDlgItem(g_aControlIDs[iCtl]);
apControls[iCtl]->GetWindowRect(&rc);
aPtControls[iCtl].x = rc.left;
aPtControls[iCtl].y = rc.top;
}
::MapWindowPoints(NULL, m_hWnd, aPtControls, C_CONTROLS);
int dyMove = 0;
if (idStr1Prompt == HIDE_CONTROL) {
apControls[I_STATIC_1]->ShowWindow(SW_HIDE);
apControls[I_EDIT_1]->ShowWindow(SW_HIDE);
dyMove = aPtControls[I_STATIC_1].y - aPtControls[I_STATIC_2].y;
}
else {
if (idStr1Prompt >= 0)
apControls[I_STATIC_1]->SetWindowText(
GetStringResource(idStr1Prompt));
if (cbMaxStr1)
((CEdit*) apControls[I_EDIT_1])->LimitText(cbMaxStr1);
}
if (idStr2Prompt == HIDE_CONTROL) {
apControls[I_STATIC_2]->ShowWindow(SW_HIDE);
apControls[I_EDIT_2]->ShowWindow(SW_HIDE);
dyMove += aPtControls[I_STATIC_2].y - aPtControls[I_STATIC_3].y;
}
else {
if (idStr2Prompt >= 0)
apControls[I_STATIC_2]->SetWindowText(
GetStringResource(idStr2Prompt));
if (cbMaxStr2)
((CEdit*) apControls[I_EDIT_2])->LimitText(cbMaxStr2);
if (dyMove) {
MoveCtl(apControls[I_STATIC_2], aPtControls[I_STATIC_2], 0, dyMove);
MoveCtl(apControls[I_EDIT_2], aPtControls[I_EDIT_2], 0, dyMove);
}
}
if (idStr3Prompt == HIDE_CONTROL) {
apControls[I_STATIC_3]->ShowWindow(SW_HIDE);
apControls[I_EDIT_3]->ShowWindow(SW_HIDE);
dyMove += aPtControls[I_STATIC_3].y - aPtControls[I_BTN_OK].y;
}
else {
if (idStr3Prompt >= 0)
apControls[I_STATIC_3]->SetWindowText(
GetStringResource(idStr3Prompt));
if (cbMaxStr3)
((CEdit*) apControls[I_EDIT_3])->LimitText(cbMaxStr3);
if (dyMove) {
MoveCtl(apControls[I_STATIC_3], aPtControls[I_STATIC_3], 0, dyMove);
MoveCtl(apControls[I_EDIT_3], aPtControls[I_EDIT_3], 0, dyMove);
}
}
if (idDlgCaption >= 0)
SetWindowText(GetStringResource(idDlgCaption));
if (m_id1_fTrackTranslation)
apControls[I_EDIT_1]->EnableWindow(!fTranslator);
if (m_id2_fTrackTranslation)
apControls[I_EDIT_2]->EnableWindow(!fTranslator);
if (m_id3_fTrackTranslation)
apControls[I_EDIT_3]->EnableWindow(!fTranslator);
int dxMove = m_dwHelpID ? 0 :
aPtControls[I_BTN_HELP].x - aPtControls[I_BTN_CANCEL].x;
// If we're moving any buttons, do so now.
if (dxMove || dyMove) {
MoveCtl(apControls[I_BTN_OK], aPtControls[I_BTN_OK], dxMove, dyMove);
MoveCtl(apControls[I_BTN_CANCEL], aPtControls[I_BTN_CANCEL], dxMove, dyMove);
if (m_dwHelpID)
MoveCtl(apControls[I_BTN_HELP], aPtControls[I_BTN_HELP], 0, dyMove);
else
apControls[I_BTN_HELP]->ShowWindow(SW_HIDE);
if (dyMove) {
RECT rc;
GetWindowRect(&rc);
SetWindowPos(NULL, 0, 0,
rc.right - rc.left, rc.bottom - rc.top + dyMove,
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CAddAlias::MoveCtl(CWnd *pCtl, POINT pt, int dx, int dy)
{
pCtl->SetWindowPos(NULL, pt.x + dx, pt.y + dy, 0, 0,
SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
}
void CAddAlias::OnHelp()
{
if (m_dwHelpID)
HelpOverview(m_hWnd, m_dwHelpID);
}
LRESULT CAddAlias::OnContextMenu(WPARAM wParam, LPARAM lParam)
{
::WinHelp((HWND) wParam,
AfxGetApp()->m_pszHelpFilePath,
HELP_CONTEXTMENU, (DWORD) (LPVOID) m_aContextHelpIDs);
return 0;
}
LRESULT CAddAlias::OnHelp(WPARAM wParam, LPARAM lParam)
{
::WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle,
AfxGetApp()->m_pszHelpFilePath,
HELP_WM_HELP, (DWORD) (LPVOID) m_aContextHelpIDs);
return 0;
}