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.
175 lines
5.2 KiB
175 lines
5.2 KiB
/******************************************************************************
|
|
|
|
Source File: Profile Information Page.CPP
|
|
|
|
This implements the class used to display the profile information page in the
|
|
property page handler for the shell extension.
|
|
|
|
Copyright (c) 1996 by Microsoft Corporation
|
|
|
|
A Pretty Penny Enterprises Production
|
|
|
|
Change History:
|
|
11-01-96 [email protected] pieced this one together for the first time
|
|
|
|
******************************************************************************/
|
|
|
|
#include "ICMUI.H"
|
|
|
|
#include "Resource.H"
|
|
|
|
static const TCHAR sacDefaultCMM[] = _TEXT("icm32.dll");
|
|
|
|
// It looks like the way to make the icon draw is to subclass the Icon control
|
|
// in the window. So, here's a Window Procedure for the subclass
|
|
|
|
// CProfileInformationPage member functions
|
|
|
|
// Class Constructor
|
|
|
|
CProfileInformationPage::CProfileInformationPage(HINSTANCE hiWhere,
|
|
LPCTSTR lpstrTarget) {
|
|
m_pcpTarget = NULL;
|
|
m_csProfile = lpstrTarget;
|
|
m_psp.dwSize = sizeof m_psp;
|
|
m_psp.dwFlags |= PSP_USETITLE;
|
|
m_psp.hInstance = hiWhere;
|
|
m_psp.pszTemplate = MAKEINTRESOURCE(ProfilePropertyPage);
|
|
m_psp.pszTitle = MAKEINTRESOURCE(ProfilePropertyString);
|
|
}
|
|
|
|
// Class destructor
|
|
|
|
CProfileInformationPage::~CProfileInformationPage() {
|
|
if (m_pcpTarget) {
|
|
delete m_pcpTarget;
|
|
}
|
|
}
|
|
|
|
// Dialog box (property sheet) initialization
|
|
|
|
BOOL CProfileInformationPage::OnInit() {
|
|
|
|
m_pcpTarget = new CProfile(m_csProfile);
|
|
|
|
if (m_pcpTarget) {
|
|
|
|
// Retrieve the 'desc' key, and put it in the description field
|
|
LPCSTR szDesc = m_pcpTarget->TagContents('desc', 4);
|
|
if(szDesc)
|
|
SetDlgItemTextA(m_hwnd, ProfileDescription, szDesc);
|
|
|
|
// Get the copyright info from the 'cprt' tag
|
|
LPCSTR szCprt = m_pcpTarget->TagContents('cprt');
|
|
if(szCprt)
|
|
SetDlgItemTextA(m_hwnd, ProfileProducerInfo, szCprt);
|
|
|
|
// Get the profile info from the 'vued' tag, not 'K007' tag
|
|
LPCSTR lpAdditionalInfo = m_pcpTarget->TagContents('vued',4);
|
|
|
|
if (lpAdditionalInfo) {
|
|
SetDlgItemTextA(m_hwnd, AdditionalProfileInfo, lpAdditionalInfo);
|
|
} else {
|
|
CString csNoAdditionalInfo;
|
|
csNoAdditionalInfo.Load(NoAdditionalInfo);
|
|
SetDlgItemTextA(m_hwnd, AdditionalProfileInfo, (LPCSTR)csNoAdditionalInfo);
|
|
}
|
|
|
|
// Set the CMM description and bitmap- these are supposed
|
|
// to come from the CMM.
|
|
|
|
// Get the CMM Name- this must be in char form
|
|
|
|
union {
|
|
char acCMM[5];
|
|
DWORD dwCMM;
|
|
};
|
|
|
|
dwCMM = m_pcpTarget->GetCMM();
|
|
acCMM[4] = '\0';
|
|
|
|
// Use it to form a key into the ICM registry. If we find it, get
|
|
// the CMM name. If we don't, then use the default CMM name (icm32)
|
|
|
|
#ifdef UNICODE
|
|
CString csKey =
|
|
CString(_TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\ICM\\")) +
|
|
(LPCTSTR) CString(acCMM);
|
|
#else
|
|
CString csKey =
|
|
CString(_TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\ICM\\")) +
|
|
(LPCTSTR) CString(acCMM);
|
|
#endif
|
|
|
|
HKEY hkCMM;
|
|
|
|
if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, csKey, &hkCMM)) {
|
|
TCHAR acValue[MAX_PATH];
|
|
|
|
dwCMM = MAX_PATH;
|
|
|
|
if (ERROR_SUCCESS == RegEnumValue(hkCMM, 0, acValue, &dwCMM, NULL,
|
|
NULL, NULL, NULL))
|
|
csKey = acValue;
|
|
else
|
|
csKey = sacDefaultCMM;
|
|
|
|
RegCloseKey(hkCMM);
|
|
}
|
|
else
|
|
csKey = sacDefaultCMM;
|
|
|
|
// See if we can get an instance handle for the DLL...
|
|
|
|
HINSTANCE hi = LoadLibrary(csKey);
|
|
|
|
if (!hi)
|
|
return TRUE; // Nothing to do, here, let the defaults prevail.
|
|
|
|
// Get description and icon identifier from CMS dll
|
|
|
|
DWORD dwCMMIcon = 0, dwCMMDescription = 0;
|
|
|
|
typedef BOOL (*FPCMGETINFO)(DWORD);
|
|
|
|
FPCMGETINFO fpCMGetInfo;
|
|
|
|
fpCMGetInfo = (FPCMGETINFO) GetProcAddress(hi,"CMGetInfo");
|
|
|
|
if (fpCMGetInfo) {
|
|
|
|
dwCMMIcon = (*fpCMGetInfo)(CMM_LOGOICON);
|
|
dwCMMDescription = (*fpCMGetInfo)(CMM_DESCRIPTION);
|
|
|
|
if (dwCMMDescription) {
|
|
// Write the description, if there is one.
|
|
csKey.Load(dwCMMDescription, hi);
|
|
if ((LPCTSTR) csKey)
|
|
SetDlgItemText(m_hwnd, CMMDescription, csKey);
|
|
}
|
|
|
|
if (dwCMMIcon) {
|
|
// Change/Create the Icon, if there is one.
|
|
HICON hiCMM = LoadIcon(hi, MAKEINTRESOURCE(dwCMMIcon));
|
|
if (hiCMM)
|
|
SendDlgItemMessage(m_hwnd, CMMIcon, STM_SETICON, (WPARAM) hiCMM, 0);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
BOOL CProfileInformationPage::OnDestroy() {
|
|
|
|
if (m_pcpTarget) {
|
|
delete m_pcpTarget;
|
|
m_pcpTarget = (CProfile *) NULL;
|
|
}
|
|
|
|
return FALSE; // still need to handle this message by def. proc.
|
|
}
|
|
|
|
|