NT4/private/wangview/norway/wangcmn/ftyppge.cpp
2020-09-30 17:12:29 +02:00

251 lines
6.9 KiB
C++

//=============================================================================
// (c) Copyright Wang Laboratories, Inc. 1995 All rights reserved.
//-----------------------------------------------------------------------------
// Project: Norway - Page Options Dialog DLL
//
// Component: File Type Tab
//
// File Name: ftyppge.cpp
//
// Class: CFileTypePage
//
// Functions:
//-----------------------------------------------------------------------------
// Maintenance Log:
/*
$Header: S:\products\wangview\norway\wangcmn\ftyppge.cpv 1.8 15 Feb 1996 19:03:08 JCW $
$Log: S:\products\wangview\norway\wangcmn\ftyppge.cpv $
Rev 1.8 15 Feb 1996 19:03:08 JCW
Added "WITH_AWD"
Rev 1.7 01 Dec 1995 17:10:58 SDW
Added (2) calls to RegCloseKey to fix resource leak bug 5478
Rev 1.6 12 Oct 1995 12:05:08 MFH
Added context sensitive help support
Rev 1.5 12 Oct 1995 10:16:06 MFH
Changes for MFC 4.0
Rev 1.4 05 Sep 1995 17:44:06 MFH
Removed read-only file types from tab
Rev 1.3 03 Aug 1995 15:50:32 MFH
Oops. Didn't compile. Fixed - removed bad line
Rev 1.2 03 Aug 1995 15:47:02 MFH
Didn't need the 'm_bNoWindow' variable or oncreate or ondestroy
functions. Removed. Comments added.
Rev 1.1 31 Jul 1995 11:38:26 MFH
Uses file type descriptions from the registry
Rev 1.0 11 Jul 1995 14:20:04 MFH
Initial entry
Rev 1.1 23 May 1995 15:22:10 MFH
change from pagedll.h to pageopts.h
Rev 1.0 23 May 1995 13:45:48 MFH
Initial entry
*/
//=============================================================================
// ftyppge.cpp : implementation file
//
#include "stdafx.h"
#include "pageopts.h"
#include "ftyppge.h"
#include "ctlhids.h"
#define NUMWRITEFILETYPES 3
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
static const DWORD aMenuHelpIDs[] =
{
IDC_RADIO_TIFF, HIDC_RADIO_TIFF,
IDC_RADIO_AWD, HIDC_RADIO_AWD,
IDC_RADIO_BMP, HIDC_RADIO_BMP,
0, 0
};
/////////////////////////////////////////////////////////////////////////////
// CFileTypePage Property Page
CFileTypePage::CFileTypePage() : CPropertyPage(CFileTypePage::IDD)
{
//{{AFX_DATA_INIT(CFileTypePage)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_sFileType = 0;
m_pParent = NULL;
}
void CFileTypePage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileTypePage)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFileTypePage, CPropertyPage)
//{{AFX_MSG_MAP(CFileTypePage)
ON_BN_CLICKED(IDC_RADIO_AWD, OnRadioAwd)
ON_BN_CLICKED(IDC_RADIO_BMP, OnRadioBmp)
ON_BN_CLICKED(IDC_RADIO_TIFF, OnRadioTiff)
ON_WM_HELPINFO()
ON_WM_CONTEXTMENU()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileTypePage Operations
// Get/Set of file type info defined in class header
/////////////////////////////////////////////////////////////////////////////
// CFileTypePage message handlers
// Change file type when user clicks associated radio button
void CFileTypePage::OnRadioAwd()
{
m_sFileType = IMAGE_FILETYPE_AWD;
}
void CFileTypePage::OnRadioBmp()
{
m_sFileType = IMAGE_FILETYPE_BMP;
}
void CFileTypePage::OnRadioTiff()
{
m_sFileType = IMAGE_FILETYPE_TIFF;
}
// Arrays for getting file type description from Registry
// Array of recognized extensions:
static char aszExtensions[NUMWRITEFILETYPES][5] =
{
".tif",
".awd",
".bmp",
};
// Array of corresponding control ID
static int anCtrlId[NUMWRITEFILETYPES] =
{
IDC_RADIO_TIFF,
IDC_RADIO_AWD,
IDC_RADIO_BMP
};
//***************************************************************************
//
// OnInitDialog
// Get file type descriptions from registry based on common extension.
// Fill in descriptions in corresponding radio button control
// Select the radio button corresponding to default.
// Disable read-only file types
//
//***************************************************************************
BOOL CFileTypePage::OnInitDialog()
{
int TypeBtn;
HKEY hKey;
unsigned char acData[256];
DWORD dwType;
DWORD dwSize = 256;
// Get file type descriptions from registry
for (int i = 0; i < NUMWRITEFILETYPES; i++)
{
if (::RegOpenKeyEx(HKEY_CLASSES_ROOT,aszExtensions[i], 0,KEY_EXECUTE, &hKey)
!= ERROR_SUCCESS)
continue;
if (::RegQueryValueEx(hKey, "", NULL, &dwType, acData, &dwSize)
!= ERROR_SUCCESS)
continue;
// Added to resolve resource leak bug 5478
if (::RegCloseKey(hKey) != ERROR_SUCCESS)
continue;
if (::RegOpenKeyEx(HKEY_CLASSES_ROOT, (const char *)acData, 0,KEY_EXECUTE, &hKey)
!= ERROR_SUCCESS)
continue;
dwSize = 256;
if (::RegQueryValueEx(hKey, "", NULL, &dwType, acData, &dwSize)
!= ERROR_SUCCESS)
continue;
CString szWindowText;
GetDlgItem(anCtrlId[i])->GetWindowText(szWindowText);
szWindowText = (const char *)acData + CString(" (") + szWindowText + ")";
GetDlgItem(anCtrlId[i])->SetWindowText(szWindowText);
// Added to resolve resource leak bug 5478
if (::RegCloseKey(hKey) != ERROR_SUCCESS)
continue;
#ifndef WITH_AWD
i++;
#endif
}
// Select button corresponding to default file type
switch(m_sFileType)
{
default:
case IMAGE_FILETYPE_TIFF:
TypeBtn = IDC_RADIO_TIFF;
break;
case IMAGE_FILETYPE_AWD:
TypeBtn = IDC_RADIO_AWD;
break;
case IMAGE_FILETYPE_BMP:
TypeBtn = IDC_RADIO_BMP;
break;
case IMAGE_FILETYPE_PCX:
case IMAGE_FILETYPE_DCX:
case IMAGE_FILETYPE_JPEG:
TypeBtn = IDC_RADIO_TIFF;
break;
}
CheckRadioButton(IDC_RADIO_TIFF, IDC_RADIO_BMP, TypeBtn);
return FALSE;
}
BOOL CFileTypePage::OnHelpInfo(HELPINFO* pHelpInfo)
{
// All tabs have same ID so can't give tab specific help
if (pHelpInfo->iCtrlId == AFX_IDC_TAB_CONTROL)
return 0L;
if (pHelpInfo->iContextType == HELPINFO_WINDOW) // must be for a control
{
::WinHelp ((HWND)pHelpInfo->hItemHandle, "wangocx.hlp",
HELP_WM_HELP,
(DWORD)(LPVOID)aMenuHelpIDs);
}
return 1L;
}
void CFileTypePage::OnContextMenu(CWnd* pWnd, CPoint point)
{
// All tabs have same ID so can't give tab specific help
if (::GetDlgCtrlID(pWnd->GetSafeHwnd()) == AFX_IDC_TAB_CONTROL)
return;
::WinHelp (pWnd->GetSafeHwnd(),"wangocx.hlp", HELP_CONTEXTMENU,
(DWORD)(LPVOID)aMenuHelpIDs);
return;
}