Leaked source code of windows server 2003
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

/******************************************************************************
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.
}