LPTSTR PartitionInfo::GetSizeAsString(PFormat *pFormat) { const double sizeInMB = (double) m_PartitionLength / (1024 * 1024); String fmt(_T("%.2f ")); if (sizeInMB < 1024.0) { fmt += GetLangString(IDS_ISO_MB); pFormat->Format(fmt.c_str(), sizeInMB); } else { const double sizeInGB = sizeInMB / 1024; if (sizeInGB < 1024.0) { fmt += GetLangString(IDS_ISO_GB); pFormat->Format(fmt.c_str(), sizeInGB); } else { fmt += GetLangString(IDS_ISO_TB); pFormat->Format(fmt.c_str(), sizeInGB / 1024); } } return pFormat->buffer; }
void CAboutDlg::InitLang() { if (HaveLangStrings()) { this->SetWindowText(GetLangString(0x00901002)); this->GetDlgItem(IDOK)->SetWindowText(GetLangString(0x00901001)); this->GetDlgItem(IDC_STATIC_LICENSE)->SetWindowText(GetLangString(0x00901003)); } }
/** * @brief Copy the bytes. * @param [in] hDlg Handle to the dialog. * @return TRUE if bytes were copied, FALSE otherwise. */ BOOL CopyDlg::Apply(HWindow* pDlg) { const int bufSize = 64; TCHAR buf[bufSize + 1] = {0}; int iOffset; int iNumberOfBytes; if (pDlg->GetDlgItemText(IDC_COPY_STARTOFFSET, buf, bufSize) && !offset_parse(buf, iOffset)) { MessageBox(pDlg, GetLangString(IDS_OFFSET_START_ERROR), MB_ICONERROR); return FALSE; } if (pDlg->IsDlgButtonChecked(IDC_COPY_OFFSET)) { if (pDlg->GetDlgItemText(IDC_COPY_OFFSETEDIT, buf, bufSize) && !offset_parse(buf, iNumberOfBytes)) { MessageBox(pDlg, GetLangString(IDS_OFFSET_END_ERROR), MB_ICONERROR); return FALSE; } iNumberOfBytes = iNumberOfBytes - iOffset + 1; } else {// Get number of bytes. if (pDlg->GetDlgItemText(IDC_COPY_BYTECOUNT, buf, bufSize) && _stscanf(buf, _T("%d"), &iNumberOfBytes) == 0) { MessageBox(pDlg, GetLangString(IDS_BYTES_NOT_KNOWN), MB_ICONERROR); return FALSE; } } // Can requested number be cut? // DataArray.GetLength ()-iCutOffset = number of bytes from current pos. to end. if (m_dataArray.GetLength() - iOffset < iNumberOfBytes) { MessageBox(pDlg, GetLangString(IDS_COPY_TOO_MANY), MB_ICONERROR); return FALSE; } // Transfer to clipboard. int destlen = Text2BinTranslator::iBytes2BytecodeDestLen(&m_dataArray[iOffset], iNumberOfBytes); HGLOBAL hGlobal = GlobalAlloc(GHND, destlen); if (hGlobal == 0) { // Not enough memory for clipboard. MessageBox(pDlg, GetLangString(IDS_COPY_NO_MEM), MB_ICONERROR); return FALSE; } WaitCursor wc; char* pd = (char *)GlobalLock(hGlobal); Text2BinTranslator::iTranslateBytesToBC(pd, &m_dataArray[iOffset], iNumberOfBytes); GlobalUnlock(hGlobal); pwnd->OpenClipboard(); EmptyClipboard(); SetClipboardData(CF_TEXT, hGlobal); CloseClipboard(); return TRUE; }
int CDropTarget::PopupDropMenu(POINTL pt) { HMenu *pMenu = HMenu::CreatePopupMenu(); pMenu->InsertMenu(0, MF_BYPOSITION | MF_STRING, 1, GetLangString(IDS_DD_MENU_MOVE)); pMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, 2, GetLangString(IDS_DD_MENU_COPY)); pMenu->InsertMenu(2, MF_BYPOSITION | MF_SEPARATOR, 0, 0); pMenu->InsertMenu(3, MF_BYPOSITION | MF_STRING, 0, GetLangString(IDS_DD_MENU_CANCEL)); int choice = pMenu->TrackPopupMenuEx(TPM_NONOTIFY|TPM_RIGHTBUTTON|TPM_RETURNCMD, pt.x, pt.y, hexwnd.pwnd); pMenu->DestroyMenu(); return choice; }
//------------------------------------------------------------------- // SimpleString replacedata contains data to replace with. bool ReplaceDlg::replace_selected_data(HWindow *pDlg) { if (!bSelected) { MessageBox(pDlg, GetLangString(IDS_REPL_NO_DATA), MB_ICONERROR); return false; } int i = iGetStartOfSelection(); int n = iGetEndOfSelection() - i + 1; SimpleArray<BYTE> olddata(n, &m_dataArray[i]); if (strReplaceWithData.IsEmpty()) { // Selected data is to be deleted, since replace-with data is empty string. if (!m_dataArray.Replace(i, n, 0, 0)) { MessageBox(pDlg, GetLangString(IDS_REPL_CANT_DELETE), MB_ICONERROR); return FALSE; } push_undorecord(i, olddata, olddata.GetLength(), NULL, 0); bSelected = false; iCurByte = iStartOfSelection; } else if (bPasteAsText) { // Replace with non-zero-length data. if (!m_dataArray.Replace(i, n, (const BYTE *)(const char *)strReplaceWithData, strReplaceWithData.StrLen())) { MessageBox(pDlg, GetLangString(IDS_REPL_FAILED), MB_ICONERROR); return false; } push_undorecord(i, olddata, olddata.GetLength(), (const BYTE *)(const char *)strReplaceWithData, strReplaceWithData.StrLen()); iEndOfSelection = iStartOfSelection + strReplaceWithData.StrLen() - 1; } else { // Input string contains special-syntax-coded binary data. SimpleArray<BYTE> out; if (!transl_text_to_binary(out)) { MessageBox(pDlg, GetLangString(IDS_REPL_CANNOT_CONVERT), MB_ICONERROR); return false; } if (!m_dataArray.Replace(i, n, out, out.GetLength())) { MessageBox(pDlg, GetLangString(IDS_REPL_FAILED), MB_ICONERROR); return false; } push_undorecord(i, olddata, olddata.GetLength(), out, out.GetLength()); iEndOfSelection = iStartOfSelection + out.GetLength() - 1; } bFilestatusChanged = true; return true; }
void ReplaceDlg::replace_directed(HWindow *pDlg, int finddir, bool showCount) { bool case_sensitive = pDlg->IsDlgButtonChecked(IDC_MATCHCASE_CHECK) == BST_CHECKED; GetDlgItemText(pDlg, IDC_TO_REPLACE_EDIT, strToReplaceData); GetDlgItemText(pDlg, IDC_REPLACEWITH_EDIT, strReplaceWithData); bPasteAsText = pDlg->IsDlgButtonChecked(IDC_USETRANSLATION_CHECK) == BST_UNCHECKED; //------------------ // Don't do anything if to-replace and replace-with data are same. Text2BinTranslator tr_find(strToReplaceData), tr_replace(strReplaceWithData); if (tr_find.bCompareBin(tr_replace, iCharacterSet, iBinaryMode)) { MessageBox(pDlg, GetLangString(IDS_REPL_SAME_STRS), MB_ICONERROR); return; } WaitCursor wc; int occ_num = 0; HWindow *pwndFocus = HWindow::GetFocus(); if (EnableDlgItem(pDlg, IDC_REPLACE_BUTTON, FALSE) == FALSE) { // Don't lose focus. if (!pwndFocus->IsWindowEnabled()) pDlg->SetFocus(); occ_num++; replace_selected_data(pDlg); } if (finddir) { while (find_and_select_data(finddir, case_sensitive)) { occ_num++; replace_selected_data(pDlg); }; } if (occ_num) { set_wnd_title(); adjust_view_for_selection(); resize_window(); synch_sibling(); if (showCount) { TCHAR tbuf[100]; _stprintf(tbuf, GetLangString(IDS_REPL_COUNT), occ_num); MessageBox(pDlg, tbuf, MB_ICONINFORMATION); } } }
/** * @brief Go to offset user gave to the dialog. * @param [in] hDlg Handle of Goto-dialog. * @return TRUE if new offset was applied, FALSE for invalid offset. */ BOOL GoToDlg::Apply(HWindow *pDlg) { TCHAR buffer[EditLen + 1]; int offset, i = 0, r = 0; pDlg->GetDlgItemText(IDC_GOTO_OFFSET, buffer, RTL_NUMBER_OF(buffer)); // For a relative jump, read offset from 2nd character on. if (buffer[0] == '+' || buffer[0] == '-') r = 1; if (!offset_parse(buffer + r, offset)) { MessageBox(pDlg, GetLangString(IDS_OFFSET_ERROR), MB_ICONERROR); return FALSE; } if (r) { // Relative jump. if (buffer[0] == '-' ) offset = -offset; offset += iCurByte; } // Absolute jump. // Check limits and jump to begin/end if out of limits if (offset < 0) offset = 0; if (offset >= m_dataArray.GetLength()) offset = m_dataArray.GetLength() - 1; iCurByte = offset; snap_caret(); return TRUE; }
/** * @brief Apply the manipulation. * @param [in] hDlg Handle to the dialog. * @param [in] wParam Command user selected. * @return TRUE if bytes were copied, FALSE otherwise. */ BOOL BitManipDlg::Apply(HWindow *pDlg, WPARAM wParam) { BYTE cBitValue = 0; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT8)) cBitValue |= 128; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT7)) cBitValue |= 64; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT6)) cBitValue |= 32; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT5)) cBitValue |= 16; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT4)) cBitValue |= 8; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT3)) cBitValue |= 4; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT2)) cBitValue |= 2; if (pDlg->IsDlgButtonChecked(IDC_MANIPBITS_BIT1)) cBitValue |= 1; if (wParam == IDOK) { BYTE ch = m_dataArray[iCurByte]; m_dataArray[iCurByte] = cBitValue; push_undorecord(iCurByte, &ch, 1, &m_dataArray[iCurByte], 1); bFilestatusChanged = true; repaint(); return TRUE; } TCHAR buf[64]; _sntprintf(buf, RTL_NUMBER_OF(buf), GetLangString(IDS_BITMANIP_VALUE), (BYTE)cBitValue, (signed char)cBitValue, (BYTE)cBitValue); pDlg->SetDlgItemText(IDC_MANIPBITS_VALUE, buf); return FALSE; }
/** * @brief Initialize the dialog. * @param [in] hDlg Handle to the dialog. */ BOOL BitManipDlg::OnInitDialog(HWindow *pDlg) { TCHAR buf[64]; _sntprintf(buf, RTL_NUMBER_OF(buf), GetLangString(IDS_BITMANIP_AT_OFFSET), iCurByte, iCurByte); pDlg->SetDlgItemText(IDC_MANIPBITS, buf); BYTE cBitValue = m_dataArray[iCurByte]; if (cBitValue & 1) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT1, BST_CHECKED); if (cBitValue & 2) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT2, BST_CHECKED); if (cBitValue & 4) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT3, BST_CHECKED); if (cBitValue & 8) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT4, BST_CHECKED); if (cBitValue & 16) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT5, BST_CHECKED); if (cBitValue & 32) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT6, BST_CHECKED); if (cBitValue & 64) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT7, BST_CHECKED); if (cBitValue & 128) pDlg->CheckDlgButton(IDC_MANIPBITS_BIT8, BST_CHECKED); Apply(pDlg, 0); return TRUE; }
// Добавляет линейку кнопок. void AddButtons(int ButtonCount, const int* MessageIDs, int defaultButtonIndex = 0, int cancelButtonIndex = -1) { int LineY = m_NextY++; T *PrevButton = nullptr; for (int i = 0; i < ButtonCount; i++) { T *NewButton = AddDialogItem(DI_BUTTON, GetLangString(MessageIDs[i])); NewButton->Flags = DIF_CENTERGROUP; NewButton->Y1 = NewButton->Y2 = LineY; if (PrevButton) { NewButton->X1 = PrevButton->X2 + 1; } else { NewButton->X1 = 2 + m_Indent; m_FirstButtonID = m_DialogItemsCount - 1; } NewButton->X2 = NewButton->X1 + ItemWidth(*NewButton); if (defaultButtonIndex == i) { NewButton->Flags |= DIF_DEFAULTBUTTON; } if (cancelButtonIndex == i) m_CancelButtonID = m_DialogItemsCount - 1; PrevButton = NewButton; } }
void CAboutDlg::SetBuildInfo() { CString szBuildInfo = _T(""); szBuildInfo.Format(_T("%s %s,"), HaveLangStrings() ? GetLangString(0x00901004) : _T("Version"), ENCWAVTOAC3_VERSION); #if defined(_WIN32) & !defined(_WIN64) szBuildInfo += _T(" x86, Win32"); #else szBuildInfo += _T(" AMD64, Win64"); #endif // _WIN32 #if defined(_UNICODE) szBuildInfo += _T(" Unicode"); #else szBuildInfo += _T(" Ansi"); #endif // _UNICODE #if defined(_DEBUG) szBuildInfo += _T(" DEBUG"); #endif // _DEBUG szBuildInfo += _T(", "); szBuildInfo += __DATE__; szBuildInfo += _T(" "); szBuildInfo += __TIME__; szBuildInfo += theApp.m_bIsPortable ? _T(" (Portable)") : _T(" (Roaming)"); this->m_StcBuildInfo.SetWindowText(szBuildInfo); }
// Добавляет сепаратор. void AddSeparator(int MessageId=-1) { T *Separator = AddDialogItem(DI_TEXT, MessageId == -1 ? L"" : GetLangString(MessageId)); Separator->Flags = DIF_SEPARATOR; Separator->X1 = 3; Separator->Y1 = Separator->Y2 = NextY++; }
LanguageList & CLanguage::GetLangList (void) { if (m_LanguageList.size() > 0) { return m_LanguageList; } CPath LanguageFiles(g_Settings->LoadStringVal(Setting_LanguageDir),"*.pj.Lang"); if (LanguageFiles.FindFirst()) { do { LanguageFile File; //We temporally store the values in here to added to the list File.Filename = (std::string &)LanguageFiles; File.LanguageName = GetLangString(LanguageFiles,LANGUAGE_NAME); if (File.LanguageName.length() == 0) { continue; } //get the name of the language from inside the file m_LanguageList.push_back(File); } while (LanguageFiles.FindNext()); } return m_LanguageList; }
// Добавляет сепаратор, кнопки OK и Cancel. void AddOKCancel(int OKMessageId, int CancelMessageId, bool Separator=true) { if (Separator) AddSeparator(); T *OKButton = AddDialogItem(DI_BUTTON, GetLangString(OKMessageId)); OKButton->Flags = DIF_CENTERGROUP|DIF_DEFAULTBUTTON; OKButton->Y1 = OKButton->Y2 = NextY++; OKButtonID = DialogItemsCount-1; if(CancelMessageId != -1) { T *CancelButton = AddDialogItem(DI_BUTTON, GetLangString(CancelMessageId)); CancelButton->Flags = DIF_CENTERGROUP; CancelButton->Y1 = CancelButton->Y2 = OKButton->Y1; } }
// Начинает располагать поля диалога внутри single box void StartSingleBox(int MessageId=-1, bool LeftAlign=false) { T *SingleBox = AddDialogItem(DI_SINGLEBOX, MessageId == -1 ? L"" : GetLangString(MessageId)); SingleBox->Flags = LeftAlign ? DIF_LEFTTEXT : DIF_NONE; SingleBox->X1 = 5; SingleBox->Y1 = m_NextY++; m_Indent = 2; m_SingleBoxIndex = m_DialogItemsCount - 1; }
/** * @brief Handle dialog commands. * @param [in] hDlg Hanle to the dialog. * @param [in] wParam The command to handle. * @param [in] lParam Optional parameter for the command. * @return TRUE if the command was handled, FALSE otherwise. */ BOOL SelectBlockDlg::OnCommand(HWindow *pDlg, WPARAM wParam, LPARAM lParam) { TCHAR buf[128]; int iStartOfSelSetting = 0; int iEndOfSelSetting = 0; int maxb; switch (wParam) { case IDOK: if (pDlg->GetDlgItemText(IDC_BLOCKSEL_OFFSET, buf, 128) && !offset_parse(buf, iStartOfSelSetting)) { MessageBox(pDlg, GetLangString(IDS_OFFSET_START_ERROR), MB_ICONERROR); return TRUE; } if (pDlg->GetDlgItemText(IDC_BLOCKSEL_OFFSETEND, buf, 128) && !offset_parse(buf, iEndOfSelSetting)) { MessageBox(pDlg, GetLangString(IDS_OFFSET_END_ERROR), MB_ICONERROR); return TRUE; } //make the selection valid if it is not maxb = m_dataArray.GetUpperBound(); if (iStartOfSelSetting < 0) iStartOfSelSetting = 0; if (iStartOfSelSetting > maxb) iStartOfSelSetting = maxb; if (iEndOfSelSetting < 0) iEndOfSelSetting = 0; if (iEndOfSelSetting > maxb) iEndOfSelSetting = maxb; iStartOfSelection = iStartOfSelSetting; iEndOfSelection = iEndOfSelSetting; bSelected = true; adjust_view_for_selection(); repaint(); // fall through case IDCANCEL: pDlg->EndDialog(wParam); return TRUE; } return FALSE; }
DialogItemEx *DialogBuilder::AddCheckbox(lng TextMessageId, Bool3Option& Value) { const auto Item = AddDialogItem(DI_CHECKBOX, GetLangString(TextMessageId)); Item->Flags |= DIF_3STATE; SetNextY(Item); Item->X2 = Item->X1 + ItemWidth(*Item); Item->Selected = Value; SetLastItemBinding(CreateCheckBoxBinding(Value)); return Item; }
// Добавляет кнопку справа от элемента RelativeTo. T *AddButtonAfter(T *RelativeTo, int LabelId) { T *Item = AddDialogItem(DI_BUTTON, GetLangString(LabelId)); Item->Y1 = Item->Y2 = RelativeTo->Y1; Item->X1 = RelativeTo->X1 + ItemWidth(*RelativeTo) - 1 + 2; DialogItemBinding<T> *Binding = FindBinding(RelativeTo); if (Binding) Binding->AfterLabelID = GetItemID(Item); return Item; }
DialogItemEx *DialogBuilder::AddCheckbox(lng TextMessageId, IntOption& Value, int Mask, bool ThreeState) { const auto Item = AddDialogItem(DI_CHECKBOX, GetLangString(TextMessageId)); if (ThreeState && !Mask) Item->Flags |= DIF_3STATE; SetNextY(Item); Item->X2 = Item->X1 + ItemWidth(*Item); if (!Mask) Item->Selected = Value; else Item->Selected = (Value & Mask) != 0; SetLastItemBinding(CreateCheckBoxBinding(Value, Mask)); return Item; }
// Добавляет чекбокс. T *AddCheckbox(int TextMessageId, int *Value, int Mask=0, bool ThreeState=false) { T *Item = AddDialogItem(DI_CHECKBOX, GetLangString(TextMessageId)); if (ThreeState && !Mask) Item->Flags |= DIF_3STATE; SetNextY(Item); Item->X2 = Item->X1 + ItemWidth(*Item); if (!Mask) Item->Selected = *Value; else Item->Selected = (*Value & Mask) != 0; SetLastItemBinding(CreateCheckBoxBinding(Value, Mask)); return Item; }
/** * @brief Initialize the dialog. * @param [in] hDlg Handle to the dialog. * @return TRUE. */ BOOL OpenPartiallyDlg::OnInitDialog(HWindow* pDlg) { INT64 iPLFileLen = _filelengthi64(filehandle); TCHAR buf[128] = {0}; pDlg->SetDlgItemText(IDC_OPENPARTIAL_OFFSET, _T("x0")); _sntprintf(buf, RTL_NUMBER_OF(buf) - 1, GetLangString(IDS_PARTIAL_LOAD_BYTES), iPLFileLen); pDlg->SetDlgItemText(IDC_OPENPARTIAL_BYTECOUNT, buf); _sntprintf(buf, RTL_NUMBER_OF(buf) - 1, _T("%lld"), iPLFileLen); pDlg->SetDlgItemText(IDC_OPENPARTIAL_BYTES, buf); pDlg->CheckDlgButton(IDC_OPENPARTIAL_BEGINOFF, BST_CHECKED); const UINT state = bShowFileStatsPL ? BST_CHECKED : BST_UNCHECKED; pDlg->CheckDlgButton(IDC_OPENPARTIAL_RELOFFSET, state); return TRUE; }
void ReplaceDlg::find_directed(HWindow *pDlg, int finddir) { GetDlgItemText(pDlg, IDC_TO_REPLACE_EDIT, strToReplaceData); bool case_sensitive = pDlg->IsDlgButtonChecked(IDC_MATCHCASE_CHECK) == BST_CHECKED; if (find_and_select_data(finddir, case_sensitive)) { adjust_view_for_selection(); repaint(); synch_sibling(); EnableDlgItem(pDlg, IDC_REPLACE_BUTTON, TRUE); } else { MessageBox(pDlg, GetLangString(IDS_FIND_CANNOT_FIND), MB_ICONWARNING); } }
// Добавляет указанную текстовую строку слева от элемента RelativeTo. T *AddTextBefore(T *RelativeTo, int LabelId) { T *Item = AddDialogItem(DI_TEXT, GetLangString(LabelId)); Item->Y1 = Item->Y2 = RelativeTo->Y1; Item->X1 = 5 + m_Indent; Item->X2 = Item->X1 + ItemWidth(*Item) - 1; intptr_t RelativeToWidth = RelativeTo->X2 - RelativeTo->X1; RelativeTo->X1 = Item->X2 + 2; RelativeTo->X2 = RelativeTo->X1 + RelativeToWidth; DialogItemBinding<T> *Binding = FindBinding(RelativeTo); if (Binding) Binding->BeforeLabelID = GetItemID(Item); return Item; }
FarDialogItem *AddListControl(FARDIALOGITEMTYPES Type, int *SelectedItem, wchar_t *Text, int Width, int Height, const int MessageIDs [], size_t ItemCount, FARDIALOGITEMFLAGS ItemFlags) { const wchar_t** ItemsText = nullptr; if (MessageIDs) { ItemsText = new const wchar_t*[ItemCount]; for (size_t i = 0; i < ItemCount; i++) { ItemsText[i] = GetLangString(MessageIDs[i]); } } FarDialogItem* result = AddListControl(Type, SelectedItem, Text, Width, Height, ItemsText, ItemCount, ItemFlags); delete [] ItemsText; return result; }
// Добавляет группу радиокнопок. void AddRadioButtons(int *Value, int OptionCount, const int MessageIDs[], bool FocusOnSelected=false) { for(int i=0; i<OptionCount; i++) { T *Item = AddDialogItem(DI_RADIOBUTTON, GetLangString(MessageIDs[i])); SetNextY(Item); Item->X2 = Item->X1 + ItemWidth(*Item); if (!i) Item->Flags |= DIF_GROUP; if (*Value == i) { Item->Selected = TRUE; if (FocusOnSelected) Item->Flags |= DIF_FOCUS; } SetLastItemBinding(CreateRadioButtonBinding(Value)); } }
/** * @brief Show HTML help. * This function shows HTML help, with given command and path. * @param [in] uCommand How/what to open in help (TOC etc). * @param [in] path Additional relative path inside help file to open. * @param [in] hParentWindow Window opening this help. */ void ShowHtmlHelp(UINT uCommand, LPCTSTR path, HWindow *pParentWindow) { TCHAR fullHelpPath[MAX_PATH]; GetModuleFileName(NULL, fullHelpPath, MAX_PATH); PathRemoveFileSpec(fullHelpPath); PathAppend(fullHelpPath, HtmlHelpFile); if (!PathFileExists(fullHelpPath)) { TCHAR msg[500]; _sntprintf(msg, RTL_NUMBER_OF(msg), GetLangString(IDS_ERR_HELP_NOT_FOUND), fullHelpPath); MessageBox(pParentWindow, msg, MB_ICONERROR); return; } if (uCommand == HELP_CONTEXT) { if (path != NULL) { TCHAR fullpath[MAX_PATH] = {0}; _sntprintf(fullpath, MAX_PATH, _T("%s::/%s"), fullHelpPath, path); HtmlHelp(NULL, fullpath, HH_DISPLAY_TOPIC, NULL); } else { HtmlHelp(NULL, fullHelpPath, HH_DISPLAY_TOPIC, NULL); } } else if (uCommand == HELP_FINDER) { HtmlHelp(NULL, fullHelpPath, HH_DISPLAY_SEARCH, NULL); } else if (uCommand == HELP_CONTENTS) { HtmlHelp(NULL, fullHelpPath, HH_DISPLAY_TOC, NULL); } }
PluginDialogBuilder(const PluginStartupInfo &aInfo, const GUID &aPluginId, const GUID &aId, int TitleMessageID, const wchar_t *aHelpTopic, FARWINDOWPROC aDlgProc=nullptr, void* aUserParam=nullptr, FARDIALOGFLAGS aFlags = FDLG_NONE) : Info(aInfo), DialogHandle(nullptr), HelpTopic(aHelpTopic), PluginId(aPluginId), Id(aId), DlgProc(aDlgProc), UserParam(aUserParam), Flags(aFlags) { AddBorder(GetLangString(TitleMessageID)); }
// Добавляет сепаратор. void AddSeparator(int MessageId=-1) { return AddSeparator(MessageId == -1 ? L"" : GetLangString(MessageId)); }
// Добавляет статический текст, расположенный на отдельной строке в диалоге. T *AddText(int LabelId) { T *Item = AddDialogItem(DI_TEXT, LabelId == -1 ? L"" : GetLangString(LabelId)); SetNextY(Item); return Item; }
T *AddTextAfter(T *RelativeTo, int LabelId, int skip=1) { return AddTextAfter(RelativeTo, GetLangString(LabelId), skip); }