SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample illustrates using a SftTree/OCX control.
The source code is located at C:\Program Files (x86)\Softelvdm\SftPrintPreview OCX 1.0\Samples\VC++\PreviewSftTree\PreviewSftTreeDlg.cpp or C:\Program Files\Softelvdm\SftPrintPreview OCX 1.0\Samples\VC++\PreviewSftTree\PreviewSftTreeDlg.cpp (on 32-bit Windows versions).
CSftPrintPreviewDlg::CSftPrintPreviewDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSftPrintPreviewDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSftPrintPreviewDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_Logo.LoadBitmap(IDB_LOGO);
m_SmallBitmap.LoadBitmap(IDB_SMILE);
m_hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
m_hIconSmall = (HICON) LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
m_ImgList.Create(IDB_TOOLBAR, 16, 0, RGB(255,0,0));
m_fSortDirection = FALSE;
}
CSftPrintPreviewDlg::~CSftPrintPreviewDlg()
{
if (m_hIconSmall)
DestroyIcon(m_hIconSmall);
}
void CSftPrintPreviewDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSftPrintPreviewDlg)
DDX_Control(pDX, IDC_SFTTREE1, m_Tree);
DDX_Control(pDX, IDC_SFTPRINTPREVIEW1, m_Preview1);
//}}AFX_DATA_MAP
}
struct tagColorEntry {
LPCTSTR lpszName;
COLORREF color;
} aPropListColors[] = {
{ TEXT("Black"), RGB( 0, 0, 0), },
{ TEXT("Blue"), RGB( 0, 0,255), },
{ TEXT("Cyan"), RGB( 0,255,255), },
{ TEXT("Green"), RGB( 0,255, 0), },
{ TEXT("Magenta"), RGB(255, 0,255), },
{ TEXT("Red"), RGB(255, 0, 0), },
{ TEXT("White"), RGB(255,255,255), },
{ TEXT("Yellow"), RGB(255,255, 0), },
{ TEXT("Dk Blue"), RGB( 0, 0,128), },
{ TEXT("Dk Cyan"), RGB( 0,128,128), },
{ TEXT("Dk Green"), RGB( 0,128, 0), },
{ TEXT("Dk Magenta"), RGB(128, 0,128), },
{ TEXT("Dk Red"), RGB(128, 0, 0), },
{ TEXT("Dk Yellow"), RGB(128,128, 0), },
{ TEXT("Dk Gray"), RGB(128,128,128), },
{ TEXT("Lt Gray"), RGB(192,192,192), },
{ TEXT("3DDKSHADOW - Dark shadow for 3D elements"), 0x80000000L | COLOR_3DDKSHADOW, },
{ TEXT("3DFACE - Face color for 3D elements"), 0x80000000L | COLOR_3DFACE, },
{ TEXT("3DHILIGHT - Edges facing the light source"), 0x80000000L | COLOR_3DHILIGHT, },
{ TEXT("3DLIGHT - Edges facing the light source"), 0x80000000L | COLOR_3DLIGHT, },
{ TEXT("3DSHADOW - Edges facing away from the light source"), 0x80000000L | COLOR_3DSHADOW, },
{ TEXT("INFOBK - Background color for tooltip controls"), 0x80000000L | COLOR_INFOBK, },
{ TEXT("INFOTEXT - Text color for tooltip controls"), 0x80000000L | COLOR_INFOTEXT, },
{ TEXT("MENUTEXT - Text in menus"), 0x80000000L | COLOR_MENUTEXT, },
{ TEXT("ACTIVEBORDER - Active window border"), 0x80000000L | COLOR_ACTIVEBORDER, },
{ TEXT("ACTIVECAPTION - Active window caption"), 0x80000000L | COLOR_ACTIVECAPTION, },
{ TEXT("APPWORKSPACE - Background color MDI applications"), 0x80000000L | COLOR_APPWORKSPACE, },
{ TEXT("BACKGROUND - Desktop"), 0x80000000L | COLOR_BACKGROUND, },
{ TEXT("BTNFACE - Face shading on push buttons"), 0x80000000L | COLOR_BTNFACE, },
{ TEXT("BTNHILIGHT - Highlight color for buttons"), 0x80000000L | COLOR_BTNHIGHLIGHT, },
{ TEXT("BTNSHADOW - Edge shading on push buttons"), 0x80000000L | COLOR_BTNSHADOW, },
{ TEXT("BTNTEXT - Text on push buttons"), 0x80000000L | COLOR_BTNTEXT, },
{ TEXT("CAPTIONTEXT - Text in caption"), 0x80000000L | COLOR_CAPTIONTEXT, },
{ TEXT("GRAYTEXT - Grayed (disabled) text"), 0x80000000L | COLOR_GRAYTEXT, },
{ TEXT("HIGHLIGHT - Selected Item(s)"), 0x80000000L | COLOR_HIGHLIGHT, },
{ TEXT("HIGHLIGHTTEXT - Text of selected item(s)"), 0x80000000L | COLOR_HIGHLIGHTTEXT, },
{ TEXT("INACTIVEBORDER - Inactive window border"), 0x80000000L | COLOR_INACTIVEBORDER, },
{ TEXT("INACTIVECAPTION - Inactive window caption"), 0x80000000L | COLOR_INACTIVECAPTION, },
{ TEXT("INACTIVECAPTIONTEXT - Inactive caption text color"), 0x80000000L | COLOR_INACTIVECAPTIONTEXT, },
{ TEXT("MENU - Menu background"), 0x80000000L | COLOR_MENU, },
{ TEXT("SCROLLBAR - Scroll bar gray area"), 0x80000000L | COLOR_SCROLLBAR, },
{ TEXT("WINDOW - Window background"), 0x80000000L | COLOR_WINDOW, },
{ TEXT("WINDOWFRAME - Window frame"), 0x80000000L | COLOR_WINDOWFRAME, },
{ TEXT("WINDOWTEXT - Text in windows"), 0x80000000L | COLOR_WINDOWTEXT, },
{ NULL, 0 },
};
BEGIN_MESSAGE_MAP(CSftPrintPreviewDlg, CDialog)
//{{AFX_MSG_MAP(CSftPrintPreviewDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSftPrintPreviewDlg message handlers
BOOL CSftPrintPreviewDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CRect rect;
GetClientRect(&rect);
m_Preview1.MoveWindow(0, 0, rect.Width(), rect.Height());
m_vPrintPreview1 = m_Preview1.GetControlUnknown();
ASSERT(m_vPrintPreview1 != NULL);
m_vTree = m_Tree.GetControlUnknown();
ASSERT(m_vTree != NULL);
m_vTree->BulkUpdate = VARIANT_TRUE;
for (int counter = 0 ; counter < 10 ; ++counter) {
long ItemIndex = m_vTree->Items->Add("Supported Picture Types");
m_vTree->Cell[ItemIndex][1]->Text = _T("SftTree/OCX supports numerous image types, such as bitmaps, icons, ImageLists and also offers numerous built-in images.");
// add bitmap samples
ItemIndex = m_vTree->Items->Add(_T("Bitmaps"));
m_vTree->Item[ItemIndex]->Level = 1;
m_vTree->Cell[ItemIndex][1]->Text = _T("Bitmaps can be of varying sizes and also support Bitmap Transparency, which allows the background to show through the image (in areas selected by the bitmap designer).");
long i = m_vTree->Items->Add(_T("Large Bitmap"));
m_vTree->Item[i]->Level = 2;
UpdateBitmap(i, m_Logo, halignSftTreeRight);
i = m_vTree->Items->Add(_T("Various bitmap sizes"));
m_vTree->Item[i]->Level = 2;
UpdateBitmap(i, m_SmallBitmap, halignSftTreeRight);
// add icon samples
ItemIndex = m_vTree->Items->Add(_T("Icons"));
m_vTree->Item[ItemIndex]->Level = 1;
m_vTree->Cell[ItemIndex][1]->Text = _T("The supported icons can be stardard size icons (32x32) or any other size supported by the operating system.");
i = m_vTree->Items->Add(_T("Standard Icon (32x32)"));
m_vTree->Item[i]->Level = 2;
UpdateIcon(i, m_hIcon, halignSftTreeRight);
i = m_vTree->Items->Add(_T("Any other size"));
m_vTree->Item[i]->Level = 2;
UpdateIcon(i, m_hIconSmall, halignSftTreeRight);
// add imagelist samples
ItemIndex = m_vTree->Items->Add(_T("ImageLists"));
m_vTree->Item[ItemIndex]->Level = 1;
m_vTree->Cell[ItemIndex][1]->Text = _T("Complete ImageList support simplifies bitmap handling and can avoid the limited resource availability on earlier Windows versions.");
{
int c, count = m_ImgList.GetImageCount();
for (c = 0 ; c < count ; ++c) {
TCHAR szBuffer[80];
int i;
wsprintf(szBuffer, _T("Image %d"), c);
i = m_vTree->Items->Add(szBuffer);
m_vTree->Item[i]->Level = 2;
UpdateImageList(i, (HIMAGELIST) m_ImgList, (short) c, halignSftTreeRight);
}
}
// add color samples
ItemIndex = m_vTree->Items->Add(_T("Color Samples"));
m_vTree->Item[ItemIndex]->Level = 1;
m_vTree->Cell[ItemIndex][1]->Text = _T("Using the built-in color sample image, simple color selection can easily be implemented. Color samples can display all colors available.");
{
struct tagColorEntry* pc = aPropListColors;
for ( ; pc->lpszName ; ++pc) {
i = m_vTree->Items->Add(pc->lpszName);
m_vTree->Item[i]->Level = 2;
UpdateColorSample(i, pc->color, halignSftTreeRight);
}
}
// add predefined image samples
ItemIndex = m_vTree->Items->Add(_T("Predefined (Built-in) Pictures"));
m_vTree->Cell[ItemIndex][1]->Text = _T("Predefined images are available for commonly used items, such as check boxes, radio buttons, sort direction indicators and more...");
ItemIndex = m_vTree->Items->Add(_T("Check Boxes - Honors Windows Themes"));
m_vTree->Item[ItemIndex]->Level = 1;
AddBuiltinImage(_T("Enabled, Selected Check Box"), sftImageCheckboxYes, 14, 14);
AddBuiltinImage(_T("Disabled, Selected Check Box"), sftImageCheckboxYesDisabled, 14, 14);
AddBuiltinImage(_T("Enabled Check Box"), sftImageCheckboxNo, 14, 14);
AddBuiltinImage(_T("Disabled Check Box"), sftImageCheckboxNoDisabled, 14, 14);
AddBuiltinImage(_T("Enabled, Unknown Check Box"), sftImageCheckboxUnknown, 14, 14);
AddBuiltinImage(_T("Disabled, Unknown Check Box"), sftImageCheckboxUnknownDisabled, 14, 14);
ItemIndex = m_vTree->Items->Add(_T("Radio Buttons - Honors Windows Themes"));
m_vTree->Item[ItemIndex]->Level = 1;
AddBuiltinImage(_T("Enabled, Selected Radio Button"), sftImageRadioButtonYes, 14, 14);
AddBuiltinImage(_T("Disabled, Selected Radio Button"), sftImageRadioButtonYesDisabled, 14, 14);
AddBuiltinImage(_T("Enabled Radio Button"), sftImageRadioButtonNo, 14, 14);
AddBuiltinImage(_T("Disabled Radio Button"), sftImageRadioButtonNoDisabled, 14, 14);
ItemIndex = m_vTree->Items->Add(_T("Up/Down Buttons - Honors Windows Themes"));
m_vTree->Item[ItemIndex]->Level = 1;
AddBuiltinImage(_T("Enabled Up Button"), sftImageUp, 14, 14);
AddBuiltinImage(_T("Disabled Up Button"), sftImageUpDisabled, 14, 14);
AddBuiltinImage(_T("Enabled Down Button"), sftImageDown, 14, 14);
AddBuiltinImage(_T("Disabled Down Button"), sftImageDownDisabled, 14, 14);
ItemIndex = m_vTree->Items->Add(_T("Sort Direction Indicator"));
m_vTree->Item[ItemIndex]->Level = 1;
AddBuiltinImage(_T("Enabled Ascending Indicator"), sftImageSortAsc, 8, 8);
AddBuiltinImage(_T("Disabled Ascending Indicator"), sftImageSortAscDisabled, 8, 8);
AddBuiltinImage(_T("Enabled Descending Indicator"), sftImageSortDesc, 8, 8);
AddBuiltinImage(_T("Disabled Descending Indicator"), sftImageSortDescDisabled, 8, 8);
}
m_vTree->BulkUpdate = VARIANT_FALSE;
m_vTree->RowHeaders->MakeOptimal(); // make the row headers optimal
m_vTree->Column[0]->MakeOptimal(); // make the first column optimal
m_vTree->Items->RecalcHorizontalExtent(); // update horizontal scroll bar
m_vTree->Item[0]->Selected = VARIANT_TRUE;
m_vTree->Items->Current = 0;
CopyImageFromCurrentItem();
// Connect the tree control to the print preview control
m_vPrintPreview1->ContentProvider = m_vTree->hWnd;
ShowWindow(SW_MAXIMIZE);
return TRUE; // return TRUE unless you set the focus to a control
}
void CSftPrintPreviewDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (m_Preview1.m_hWnd)
m_Preview1.MoveWindow(0, 0, cx, cy);
}
void CSftPrintPreviewDlg::PropagateImage(long ItemIndex, ISftPictureObjectPtr Img)
{
// don't use images that are too large in the other areas
if (Img->ActualHeight <= 20 && Img->ActualWidth < 20) {
m_vTree->Item[ItemIndex]->Image = Img;
m_vTree->Item[ItemIndex]->LabelImage = Img;
m_vTree->Item[ItemIndex]->RowHeader->Image = Img;
}
}
void CSftPrintPreviewDlg::UpdateBitmap(long ItemIndex, const CBitmap& bmp, SftTreeHAlignConstants Align)
{
ISftTreeCellPtr C = m_vTree->Cell[ItemIndex][0];
C->Image->PutBitmapHandle((OLE_HANDLE)(HBITMAP) bmp);
C->ImageHAlign = Align;
PropagateImage(ItemIndex, C->Image);
}
void CSftPrintPreviewDlg::UpdateIcon(long ItemIndex, HICON hIcon, SftTreeHAlignConstants Align)
{
ISftTreeCellPtr C = m_vTree->Cell[ItemIndex][0];
C->Image->PutIconHandle((OLE_HANDLE)hIcon);
C->ImageHAlign = Align;
PropagateImage(ItemIndex, C->Image);
}
void CSftPrintPreviewDlg::UpdateImageList(long ItemIndex, HIMAGELIST hImgList, short iImage, SftTreeHAlignConstants Align)
{
ISftTreeCellPtr C = m_vTree->Cell[ItemIndex][0];
C->Image->SetImageListH((OLE_HANDLE)hImgList, iImage);
C->ImageHAlign = Align;
PropagateImage(ItemIndex, C->Image);
}
void CSftPrintPreviewDlg::UpdateColorSample(long ItemIndex, COLORREF Clr, SftTreeHAlignConstants Align)
{
ISftTreeCellPtr C = m_vTree->Cell[ItemIndex][0];
C->Image->SetColorSample(Clr, 0x80000000L|COLOR_WINDOWTEXT);
C->Image->Width = 12;
C->Image->Height = 12;
C->ImageHAlign = Align;
PropagateImage(ItemIndex, C->Image);
}
void CSftPrintPreviewDlg::AddBuiltinImage(LPCTSTR lpszName, SftPictureImageConstants Appearance, long Width, long Height)
{
long ItemIndex = m_vTree->Items->Add(lpszName);
m_vTree->Item[ItemIndex]->Level = 2;
ISftTreeCellPtr C = m_vTree->Cell[ItemIndex][0];
C->Image->Appearance = Appearance;
C->Image->Width = Width;
C->Image->Height = Height;
C->ImageHAlign = halignSftTreeRight;
PropagateImage(ItemIndex, C->Image);
}
void CSftPrintPreviewDlg::CopyImageFromCurrentItem()
{
long ItemIndex = m_vTree->Items->Current;
if (ItemIndex < 0) return;
// don't use images that are too large in the other areas
ISftPictureObjectPtr pImg = m_vTree->Cell[ItemIndex][0]->Image;
if (pImg->ActualHeight <= 20 && pImg->ActualWidth <= 20) {
m_vTree->RowColumnHeader->Image = pImg;
m_vTree->Header[1]->Image = pImg;
} else {
m_vTree->RowColumnHeader->Image->Clear();
m_vTree->Header[1]->Image->Clear();
}
}
void CSftPrintPreviewDlg::OnItemClickSftTree1(long ItemIndex, short ColIndex, short AreaType, short Button, short Shift)
{
if (AreaType == constSftTreeExpandAll)
m_vTree->Item[ItemIndex]->Expand(VARIANT_TRUE, VARIANT_TRUE);
else if (AreaType == constSftTreeColumn && ColIndex == 0)
SetSortDirection(!m_fSortDirection);
else if (AreaType == constSftTreeCellGraphic)
ToggleImage(m_vTree->Cell[ItemIndex][ColIndex]->Image);
else if (AreaType == constSftTreeItem)
ToggleImage(m_vTree->Item[ItemIndex]->Image);
else if (AreaType == constSftTreeLabel)
ToggleImage(m_vTree->Item[ItemIndex]->LabelImage);
}
void CSftPrintPreviewDlg::OnItemDblClickSftTree1(long ItemIndex, short ColIndex, short AreaType, short Button, short Shift)
{
if (AreaType == constSftTreeColumnRes) {
m_vTree->Column[ColIndex]->MakeOptimal(); // Make column width optimal
m_vTree->Items->RecalcHorizontalExtent(); // Update horizontal scroll bar
} else if (AreaType == constSftTreeColumn && ColIndex == 0)
SetSortDirection(!m_fSortDirection);
else if (AreaType == constSftTreeCellGraphic)
ToggleImage(m_vTree->Cell[ItemIndex][ColIndex]->Image);
}
void CSftPrintPreviewDlg::OnSelectionChangeSftTree1()
{
CopyImageFromCurrentItem();
}
void CSftPrintPreviewDlg::ShowSortDirection(BOOL fAscending)
{
if (fAscending)
m_vTree->Header[0]->Image->Appearance = sftImageSortAsc;
else
m_vTree->Header[0]->Image->Appearance = sftImageSortDesc;
m_fSortDirection = fAscending;
}
void CSftPrintPreviewDlg::SetSortDirection(BOOL fNewDirection)
{
ShowSortDirection(fNewDirection);
if (fNewDirection)
m_vTree->Items->SortDependents(-1, 0, sortSftTreeAscending);
else
m_vTree->Items->SortDependents(-1, 0, sortSftTreeDescending);
}
void CSftPrintPreviewDlg::ToggleImage(ISftPictureObjectPtr pImg)
{
SftPictureImageConstants Appearance = pImg->Appearance;
switch (Appearance) {
case sftImageCheckboxNo:
pImg->Appearance = sftImageCheckboxYes;
break;
case sftImageCheckboxYes:
pImg->Appearance = sftImageCheckboxNo;
break;
case sftImageCheckboxUnknown:
pImg->Appearance = sftImageCheckboxNo;
break;
case sftImageCheckboxNoDisabled:
pImg->Appearance = sftImageCheckboxYesDisabled;
break;
case sftImageCheckboxYesDisabled:
pImg->Appearance = sftImageCheckboxNoDisabled;
break;
case sftImageCheckboxUnknownDisabled:
pImg->Appearance = sftImageCheckboxNoDisabled;
break;
case sftImageRadioButtonNo:
pImg->Appearance = sftImageRadioButtonYes;
break;
case sftImageRadioButtonYes:
pImg->Appearance = sftImageRadioButtonNo;
break;
case sftImageRadioButtonNoDisabled:
pImg->Appearance = sftImageRadioButtonYesDisabled;
break;
case sftImageRadioButtonYesDisabled:
pImg->Appearance = sftImageRadioButtonNoDisabled;
break;
case sftImageUp:
pImg->Appearance = sftImageDown;
break;
case sftImageUpDisabled:
pImg->Appearance = sftImageDownDisabled;
break;
case sftImageDown:
pImg->Appearance = sftImageUp;
break;
case sftImageDownDisabled:
pImg->Appearance = sftImageUpDisabled;
break;
case sftImageSortAsc:
pImg->Appearance = sftImageSortDesc;
break;
case sftImageSortAscDisabled:
pImg->Appearance = sftImageSortDescDisabled;
break;
case sftImageSortDesc:
pImg->Appearance = sftImageSortAsc;
break;
case sftImageSortDescDisabled:
pImg->Appearance = sftImageSortAscDisabled;
break;
default:
break;
}
}
void CSftPrintPreviewDlg::OnPageSetupWantedSftPrintPreview1()
{
m_vPrintPreview1->PageSetup((long) m_hWnd);
}
void CSftPrintPreviewDlg::OnCloseWantedSftPrintPreview1()
{
OnOK();
}
void CSftPrintPreviewDlg::OnHelpWantedSftPrintPreview1(LPCTSTR HelpName)
{
MessageBox(_T("Sorry, this sample doesn't offer a help file"));
}
BEGIN_EVENTSINK_MAP(CSftPrintPreviewDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CSftPrintPreviewDlg)
ON_EVENT(CSftPrintPreviewDlg, IDC_SFTTREE1, 4 /* ItemClick */, OnItemClickSftTree1, VTS_I4 VTS_I2 VTS_I2 VTS_I2 VTS_I2)
ON_EVENT(CSftPrintPreviewDlg, IDC_SFTTREE1, 5 /* ItemDblClick */, OnItemDblClickSftTree1, VTS_I4 VTS_I2 VTS_I2 VTS_I2 VTS_I2)
ON_EVENT(CSftPrintPreviewDlg, IDC_SFTTREE1, 34 /* SelectionChange */, OnSelectionChangeSftTree1, VTS_NONE)
ON_EVENT(CSftPrintPreviewDlg, IDC_SFTPRINTPREVIEW1, 8 /* CloseWanted */, OnCloseWantedSftPrintPreview1, VTS_NONE)
ON_EVENT(CSftPrintPreviewDlg, IDC_SFTPRINTPREVIEW1, 6 /* HelpWanted */, OnHelpWantedSftPrintPreview1, VTS_BSTR)
ON_EVENT(CSftPrintPreviewDlg, IDC_SFTPRINTPREVIEW1, 7 /* PageSetupWanted */, OnPageSetupWantedSftPrintPreview1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
