2020-09-30 17:12:29 +02:00

233 lines
6.4 KiB
C++

/************************************************************************
* *
* PAGEWIND.CPP *
* *
* Copyright (C) Microsoft Corporation 1995 *
* All Rights reserved. *
* *
************************************************************************/
#include "stdafx.h"
#include "resource.h"
#pragma hdrstop
#include "pagewind.h"
#include "wininc.h"
#include <limits.h>
#include <string.h>
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPageWind property page
CPageWind::CPageWind(CPropWindows *pOwner) :
CWindowsPage(CPageWind::IDD, pOwner)
{
}
void CPageWind::InitializeControls(void)
{
// Get check box controls.
CButton *pAutosize = (CButton *) GetDlgItem(IDC_CHECK_AUTOHEIGHT);
CButton *pMaximize = (CButton *) GetDlgItem(IDC_CHECK_MAXIMIZE);
CButton *pOnTop = (CButton *) GetDlgItem(IDC_ON_TOP);
// Get edit controls.
CEdit *peditTitle = (CEdit *) GetDlgItem(IDC_EDIT_WINDOW_TITLE);
CEdit *peditComment = (CEdit *) GetDlgItem(IDC_EDIT_COMMENT);
// Initialize the edit controls.
if (m_pwsmag) {
peditTitle->SetWindowText(m_pwsmag->rgchCaption);
peditComment->SetWindowText(m_pwsmag->pcszComment ?
(LPCTSTR) (*m_pwsmag->pcszComment) : "");
}
else {
peditTitle->SetWindowText("");
peditComment->SetWindowText("");
}
peditTitle->EnableWindow((BOOL) m_pwsmag);
peditTitle->SetModify(FALSE);
peditTitle->LimitText(MAX_WINDOWCAPTION - 1);
peditComment->EnableWindow((BOOL) m_pwsmag);
peditComment->SetModify(FALSE);
// Set the check box states and disable mutually exclusive
// options (autosize and maximize).
if (m_pwsmag) {
BOOL fAutosize = m_pwsmag->grf & FWSMAG_AUTO_SIZE;
BOOL fMaximize = !fAutosize && (m_pwsmag->wMax & 1);
pAutosize->SetCheck(fAutosize);
pAutosize->EnableWindow(!fMaximize);
pMaximize->SetCheck(fMaximize);
pMaximize->EnableWindow(!fAutosize);
pOnTop->SetCheck(m_pwsmag->grf & FWSMAG_ON_TOP);
}
else {
// Disable and clear check boxes.
pAutosize->SetCheck(FALSE);
pAutosize->EnableWindow(FALSE);
pMaximize->SetCheck(FALSE);
pMaximize->EnableWindow(FALSE);
pOnTop->SetCheck(FALSE);
}
pOnTop->EnableWindow((BOOL) m_pwsmag);
// Enable or disable static controls.
GetDlgItem(IDC_BUTTON_REMOVE_WINDOW)->EnableWindow((BOOL) m_pwsmag);
GetDlgItem(IDC_STATIC_MEMBER)->EnableWindow((BOOL) m_pwsmag);
GetDlgItem(IDC_STATIC_TITLE)->EnableWindow((BOOL) m_pwsmag);
GetDlgItem(IDC_STATIC_COMMENT)->EnableWindow((BOOL) m_pwsmag);
GetDlgItem(IDC_GROUP)->EnableWindow((BOOL) m_pwsmag);
}
void CPageWind::SaveAndValidate(CDataExchange *pDX)
{
ASSERT(m_pwsmag);
// Get the caption; we know this won't be too long because
// OnInitDialog sent EM_LIMITTEXT to the edit control.
CEdit *pedit = (CEdit *) GetDlgItem(IDC_EDIT_WINDOW_TITLE);
if (pedit->GetModify()) {
pedit->GetWindowText(m_pwsmag->rgchCaption, sizeof(m_pwsmag->rgchCaption));
if (*m_pwsmag->rgchCaption)
m_pwsmag->grf |= FWSMAG_CAPTION;
else
m_pwsmag->grf &= ~FWSMAG_CAPTION;
}
// Get the comment.
pedit = (CEdit *) GetDlgItem(IDC_EDIT_COMMENT);
if (pedit->GetModify()) {
CString cstr;
pedit->GetWindowText(cstr);
if (!cstr.IsEmpty()) {
if (m_pwsmag->pcszComment)
*m_pwsmag->pcszComment = cstr;
else
m_pwsmag->pcszComment = new CString(cstr);
}
else if (m_pwsmag->pcszComment) {
delete m_pwsmag->pcszComment;
m_pwsmag->pcszComment = NULL;
}
}
// Get the on-top check box state.
if (((CButton*) GetDlgItem(IDC_ON_TOP))->GetCheck())
m_pwsmag->grf |= FWSMAG_ON_TOP;
else
m_pwsmag->grf &= ~FWSMAG_ON_TOP;
// Note: we don't need to get the other check states
// because we process them whenever they're clicked.
}
BEGIN_MESSAGE_MAP(CPageWind, CWindowsPage)
//{{AFX_MSG_MAP(CPageWind)
ON_BN_CLICKED(IDC_BUTTON_ADD_WINDOW, OnButtonAddWindow)
ON_BN_CLICKED(IDC_BUTTON_REMOVE_WINDOW, OnButtonRemoveWindow)
ON_BN_CLICKED(IDC_BUTTON_INCLUDE_WINDOW, OnButtonIncludeWindow)
ON_BN_CLICKED(IDC_CHECK_AUTOHEIGHT, OnCheckAutosize)
ON_BN_CLICKED(IDC_CHECK_MAXIMIZE, OnCheckMaximize)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPageWind message handlers
void CPageWind::OnButtonAddWindow()
{
AddWindow();
}
void CPageWind::OnButtonRemoveWindow()
{
DeleteWindow();
}
void CPageWind::OnButtonIncludeWindow()
{
// Create a copy of the document's table if necessary.
if (!m_pOwner->m_fIncludeChanged && m_pOwner->m_pDoc->ptblWindows) {
m_pOwner->m_ptblInclude = new CTable;
*m_pOwner->m_ptblInclude = *m_pOwner->m_pDoc->ptblWindows;
}
CWindowInclude wininc(&m_pOwner->m_ptblInclude,
m_pOwner->m_pDoc->GetPathName(), this);
// If the list changes, set a flag, otherwise restore initial state.
if (wininc.DoModal() && wininc.m_fChanged) {
m_pOwner->m_fIncludeChanged = TRUE;
}
else if (!m_pOwner->m_fIncludeChanged && m_pOwner->m_ptblInclude) {
delete m_pOwner->m_ptblInclude;
m_pOwner->m_ptblInclude = NULL;
}
}
void CPageWind::OnCheckAutosize()
{
// Control s/b disabled if no window selected.
ASSERT(m_pwsmag);
CButton *pMaximize = (CButton *) GetDlgItem(IDC_CHECK_MAXIMIZE);
if (((CButton *) GetDlgItem(IDC_CHECK_AUTOHEIGHT))->GetCheck()) {
m_pwsmag->grf |= FWSMAG_AUTO_SIZE;
pMaximize->EnableWindow(FALSE);
}
else {
m_pwsmag->grf &= ~FWSMAG_AUTO_SIZE;
pMaximize->EnableWindow(TRUE);
}
}
void CPageWind::OnCheckMaximize()
{
// Control s/b disabled if no window selected.
ASSERT(m_pwsmag);
CButton *pAutosize = (CButton *) GetDlgItem(IDC_CHECK_AUTOHEIGHT);
if (((CButton *) GetDlgItem(IDC_CHECK_MAXIMIZE))->GetCheck()) {
m_pwsmag->grf |= FWSMAG_MAXIMIZE;
m_pwsmag->wMax |= FWSMAG_WMAX_MAXIMIZE;
pAutosize->EnableWindow(FALSE);
}
else {
m_pwsmag->grf &= ~FWSMAG_MAXIMIZE;
m_pwsmag->wMax &= ~FWSMAG_WMAX_MAXIMIZE;
pAutosize->EnableWindow(TRUE);
}
}
static const DWORD aHelpIDs[] = {
IDC_COMBO_WINDOWS, IDH_COMBO_WINDOWS,
IDC_BUTTON_ADD_WINDOW, IDH_BUTTON_ADD_WINDOW,
IDC_BUTTON_REMOVE_WINDOW, IDH_BUTTON_REMOVE_WINDOW,
IDC_EDIT_WINDOW_TITLE, IDH_EDIT_WINDOW_TITLE,
IDC_EDIT_COMMENT, IDH_EDIT_WINDOW_COMMENT,
IDC_ON_TOP, IDH_STAY_ON_TOP,
IDC_CHECK_AUTOHEIGHT, IDH_RADIO_AUTOSIZE,
IDC_CHECK_MAXIMIZE, IDH_RADIO_MAXIMIZE,
IDC_BUTTON_INCLUDE_WINDOW, IDH_BUTTON_INCLUDE_WINDOW,
IDC_GROUP, (DWORD) -1L,
0, 0
};
const DWORD* CPageWind::GetHelpIDs()
{
return aHelpIDs;
}