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 a font dialog for font selection.
The source code is located at C:\Program Files (x86)\Softelvdm\SftBox OCX 5.0\Samples\VC++\FontDlg\FontDlgDlg.cpp or C:\Program Files\Softelvdm\SftBox OCX 5.0\Samples\VC++\FontDlg\FontDlgDlg.cpp (on 32-bit Windows versions).
BOOL CFontDlgDlg::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 // reset font for all combo boxes to use the form's // default font ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); vFontNames->PutFont(NULL); vFontNames->Headers->PutFont(NULL); vFontNames->Edit->PutFont(NULL); ISftBoxPtr vFontStyles = m_FontStyles.GetControlUnknown(); vFontStyles->PutFont(NULL); vFontStyles->Headers->PutFont(NULL); vFontStyles->Edit->PutFont(NULL); ISftBoxPtr vFontSizes = m_FontSizes.GetControlUnknown(); vFontSizes->PutFont(NULL); vFontSizes->Headers->PutFont(NULL); vFontSizes->Edit->PutFont(NULL); // set sort order // add all font information UpdateFontNames(); return TRUE; // return TRUE unless you set the focus to a control } void CFontDlgDlg::UpdateFontNames() { // add all font names ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); vFontNames->BulkUpdate = VARIANT_TRUE; vFontNames->Items->Clear(); vFontNames->Items->AddFontNames(-1, fontSftBoxAll, VARIANT_TRUE, 0); vFontNames->Items->Selection = 0; PerformSort(vFontNames, sortSftBoxAscending); vFontNames->BulkUpdate = VARIANT_FALSE; vFontNames->Columns->MakeOptimal(0); vFontNames->Items->RecalcHorizontalExtent(0); m_CondHeaders.SetCheck(1); } void CFontDlgDlg::UpdateFontStyles() { // add all styles for the current font name ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); ISftBoxPtr vFontStyles = m_FontStyles.GetControlUnknown(); if (vFontNames->Items->Selection >= 0) { CString OldText((LPCTSTR) vFontStyles->Edit->Text); vFontStyles->Items->AddFontStyles(vFontNames->Cell[vFontNames->Items->Selection][0]->Text, 0, "", ""); long index; vFontStyles->Items->raw_Find((_bstr_t)OldText, 0, 0, VARIANT_FALSE, VARIANT_TRUE, VARIANT_TRUE, &index); if (index < 0) index = 0; vFontStyles->Items->Selection = index; } else vFontStyles->Items->Clear(); PerformSort(vFontStyles, sortSftBoxAscending); vFontStyles->Columns->MakeOptimal(0); vFontStyles->Items->RecalcHorizontalExtent(0); } void CFontDlgDlg::UpdateFontSizes() { // add all sizes for the current font name ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); ISftBoxPtr vFontSizes = m_FontSizes.GetControlUnknown(); if (vFontNames->Items->Selection >= 0) { CString OldText((LPCTSTR) vFontSizes->Edit->Text); vFontSizes->Items->AddFontSizes(vFontNames->Cell[vFontNames->Items->Selection][0]->Text, 0); long index; vFontSizes->Items->raw_Find((_bstr_t)OldText, 0, 0, VARIANT_FALSE, VARIANT_TRUE, VARIANT_TRUE, &index); if (index < 0) index = 0; vFontSizes->Items->Selection = index; } else vFontSizes->Items->Clear(); PerformSortSize(vFontSizes, sortSftBoxAscending); vFontSizes->Columns->MakeOptimal(0); vFontSizes->Items->RecalcHorizontalExtent(0); UpdateSample(); } void CFontDlgDlg::UpdateSample() { ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); ISftBoxPtr vFontStyles = m_FontStyles.GetControlUnknown(); ISftBoxPtr vFontSizes = m_FontSizes.GetControlUnknown(); long SelItem = vFontStyles->Items->Selection; if (SelItem >= 0 && lstrcmp(vFontSizes->Edit->Text, "") != 0) { m_Sample.SetWindowText(_T("AaBbCcYyZz")); long val = (long) vFontStyles->Cell[SelItem][0]->Data; BOOL fItalic = (val & 0x80000000L) != 0; val &= 0x7fffffff; m_SampleFont.DeleteObject(); // convert point size to pixels CDC* pDC; pDC = GetDC(); int height = MulDiv(atoi(vFontSizes->Edit->Text), pDC->GetDeviceCaps(LOGPIXELSY), 72); ReleaseDC(pDC); m_SampleFont.CreateFont(-height, 0, 0, 0, val, fItalic, 0, 0, 0, 0, 0, 0, 0, vFontNames->Edit->Text); m_Sample.SetFont(&m_SampleFont); } else m_Sample.SetWindowText(_T("")); } void CFontDlgDlg::OnCondheaders() { ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); ISftBoxPtr vFontStyles = m_FontStyles.GetControlUnknown(); ISftBoxPtr vFontSizes = m_FontSizes.GetControlUnknown(); if (m_CondHeaders.GetCheck()) { vFontNames->Headers->Main = VARIANT_TRUE; vFontNames->Headers->DropDown = VARIANT_FALSE; vFontStyles->Headers->Main = VARIANT_TRUE; vFontStyles->Headers->DropDown = VARIANT_FALSE; vFontSizes->Headers->Main = VARIANT_TRUE; vFontSizes->Headers->DropDown = VARIANT_FALSE; } else { vFontNames->Headers->Main = VARIANT_FALSE; vFontNames->Headers->DropDown = VARIANT_TRUE; vFontStyles->Headers->Main = VARIANT_FALSE; vFontStyles->Headers->DropDown = VARIANT_TRUE; vFontSizes->Headers->Main = VARIANT_FALSE; vFontSizes->Headers->DropDown = VARIANT_TRUE; } } void CFontDlgDlg::PerformSort(ISftBoxPtr box, SftBoxSortConstants currDirection) { if (currDirection == sortSftBoxAscending) box->Header[0]->Image->Appearance = sftImageSortAsc; else box->Header[0]->Image->Appearance = sftImageSortDesc; // Font styles and font names are sorted by Cell.Text property box->Items->Sort(-1, 0, currDirection); } void CFontDlgDlg::PerformSortSize(ISftBoxPtr box, SftBoxSortConstants currDirection) { if (currDirection == sortSftBoxAscending) box->Header[0]->Image->Appearance = sftImageSortAsc; else box->Header[0]->Image->Appearance = sftImageSortDesc; // Font sizes are sorted according to numeric Cell.Data property // Outside of this function, only sortSftBoxAscending and sortSftBoxDescending // are used, so we need to translate these if (currDirection == sortSftBoxAscending) currDirection = sortSftBoxCellValueAscending; else currDirection = sortSftBoxCellValueDescending; box->Items->Sort(-1, 0, currDirection); } void CFontDlgDlg::ReverseSortOrder(ISftBoxPtr box, SftBoxSortConstants& currDirection) { if (currDirection == sortSftBoxAscending) currDirection = sortSftBoxDescending; else currDirection = sortSftBoxAscending; } void CFontDlgDlg::OnSelectionChangeFontnames() { UpdateFontStyles(); } void CFontDlgDlg::OnSelectionChangeFontstyles() { UpdateFontSizes(); } void CFontDlgDlg::OnSelectionChangeFontsizes() { UpdateSample(); } void CFontDlgDlg::OnItemClickFontnames(long Part, long AreaType, long ItemIndex, short ColNum, short Button, short Shift) { if (AreaType == areaSftBoxColumn) { ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); ReverseSortOrder(vFontNames, m_fontNamesDirection); PerformSort(vFontNames, m_fontNamesDirection); } } void CFontDlgDlg::OnItemDblClkFontnames(long Part, long AreaType, long ItemIndex, short ColNum, short Button, short Shift) { if (AreaType == areaSftBoxColumn) { ISftBoxPtr vFontNames = m_FontNames.GetControlUnknown(); ReverseSortOrder(vFontNames, m_fontNamesDirection); PerformSort(vFontNames, m_fontNamesDirection); } } void CFontDlgDlg::OnItemClickFontstyles(long Part, long AreaType, long ItemIndex, short ColNum, short Button, short Shift) { if (AreaType == areaSftBoxColumn) { ISftBoxPtr vFontStyles = m_FontStyles.GetControlUnknown(); ReverseSortOrder(vFontStyles, m_fontStylesDirection); PerformSort(vFontStyles, m_fontStylesDirection); } } void CFontDlgDlg::OnItemDblClkFontstyles(long Part, long AreaType, long ItemIndex, short ColNum, short Button, short Shift) { if (AreaType == areaSftBoxColumn) { ISftBoxPtr vFontStyles = m_FontStyles.GetControlUnknown(); ReverseSortOrder(vFontStyles, m_fontStylesDirection); PerformSort(vFontStyles, m_fontStylesDirection); } } void CFontDlgDlg::OnItemClickFontsizes(long Part, long AreaType, long ItemIndex, short ColNum, short Button, short Shift) { if (AreaType == areaSftBoxColumn) { ISftBoxPtr vFontSizes = m_FontSizes.GetControlUnknown(); ReverseSortOrder(vFontSizes, m_fontSizesDirection); PerformSortSize(vFontSizes, m_fontSizesDirection); } } void CFontDlgDlg::OnItemDblClkFontsizes(long Part, long AreaType, long ItemIndex, short ColNum, short Button, short Shift) { if (AreaType == areaSftBoxColumn) { ISftBoxPtr vFontSizes = m_FontSizes.GetControlUnknown(); ReverseSortOrder(vFontSizes, m_fontSizesDirection); PerformSortSize(vFontSizes, m_fontSizesDirection); } } BEGIN_EVENTSINK_MAP(CFontDlgDlg, CDialog) //{{AFX_EVENTSINK_MAP(CFontDlgDlg) ON_EVENT(CFontDlgDlg, IDC_FONTNAMES, 20 /* SelectionChange */, OnSelectionChangeFontnames, VTS_NONE) ON_EVENT(CFontDlgDlg, IDC_FONTSTYLES, 20 /* SelectionChange */, OnSelectionChangeFontstyles, VTS_NONE) ON_EVENT(CFontDlgDlg, IDC_FONTSIZES, 20 /* SelectionChange */, OnSelectionChangeFontsizes, VTS_NONE) ON_EVENT(CFontDlgDlg, IDC_FONTNAMES, 8 /* ItemClick */, OnItemClickFontnames, VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_I2 VTS_I2) ON_EVENT(CFontDlgDlg, IDC_FONTNAMES, 9 /* ItemDblClk */, OnItemDblClkFontnames, VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_I2 VTS_I2) ON_EVENT(CFontDlgDlg, IDC_FONTSTYLES, 8 /* ItemClick */, OnItemClickFontstyles, VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_I2 VTS_I2) ON_EVENT(CFontDlgDlg, IDC_FONTSTYLES, 9 /* ItemDblClk */, OnItemDblClkFontstyles, VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_I2 VTS_I2) ON_EVENT(CFontDlgDlg, IDC_FONTSIZES, 8 /* ItemClick */, OnItemClickFontsizes, VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_I2 VTS_I2) ON_EVENT(CFontDlgDlg, IDC_FONTSIZES, 9 /* ItemDblClk */, OnItemDblClkFontsizes, VTS_I4 VTS_I4 VTS_I4 VTS_I2 VTS_I2 VTS_I2) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP()