📄 dvbteletextsubtitlespropertiespage1.cpp
字号:
hr = enum_map->Next(1, &pid_map, &received);
while (SUCCEEDED(hr) && (received != 0))
{
TCHAR strPID[100];
_stprintf(strPID, _T("%d (0x%x)"), pid_map.ulPID, pid_map.ulPID);
int list_index = combo.AddString(strPID);
if (list_index != CB_ERR)
{
combo.SetItemData(list_index, pid_map.ulPID);
if (teletext_pid == pid_map.ulPID)
{
combo.SetCurSel(list_index);
}
}
hr = enum_map->Next(1, &pid_map, &received);
}
}
if (combo.GetCurSel() == CB_ERR)
{
TCHAR buffer[40];
combo.SetWindowText(_itot(teletext_pid, buffer, 10));
}
long subtitles_decimal_page;
hr = m_pIDVBTeletextSubtitles->get_SubtitlesDecimalPage(&subtitles_decimal_page);
if (!SUCCEEDED(hr))
{
return hr;
}
long subtitles_subpage;
hr = m_pIDVBTeletextSubtitles->get_SubtitlesDecimalSubPage(&subtitles_subpage);
if (!SUCCEEDED(hr))
{
return hr;
}
DWORD subtitle_delay_time;
hr = m_pIDVBTeletextSubtitles->get_SubtitleDelayTime(&subtitle_delay_time);
if (!SUCCEEDED(hr))
{
return hr;
}
DWORD subtitle_delay_range;
hr = m_pIDVBTeletextSubtitles->get_SubtitleDelayRange(&subtitle_delay_range);
if (!SUCCEEDED(hr))
{
return hr;
}
CComPtr<IEnumTeletextPages> enum_pages;
hr = m_pIDVBTeletextSubtitles->get_Pages(&enum_pages);
if (SUCCEEDED(hr))
{
CComboBox combo = GetDlgItem(m_hwnd, IDC_SUBTITLES_PAGE);
combo.ResetContent();
hr = enum_pages->Reset();
if (SUCCEEDED(hr))
{
int page;
ULONG received = 0;
hr = enum_pages->Next(1, &page, &received);
while (SUCCEEDED(hr) && (received != 0))
{
TCHAR strPage[100];
_stprintf(strPage, _T("%x"), page);
int list_index = combo.AddString(strPage);
if (list_index != CB_ERR)
{
combo.SetItemData(list_index, page);
int subtitles_hex_page = (subtitles_decimal_page % 10) | ( ( ( (subtitles_decimal_page - (100 * (subtitles_decimal_page / 100) ) ) % 100) / 10) << 4) | ( (subtitles_decimal_page / 100) << 8);
if (subtitles_hex_page == page)
{
combo.SetCurSel(list_index);
}
}
hr = enum_pages->Next(1, &page, &received);
}
}
}
if (subtitles_decimal_page != 0)
{
OnSelChangeSubtitlesPage();
}
if
(
SetDlgItemInt(m_hwnd, IDC_SUBTITLES_PAGE, subtitles_decimal_page, TRUE)
)
{
SetDlgItemInt(m_hwnd, IDC_SUBTITLES_SUBPAGE, subtitles_subpage, TRUE);
SetClean();
}
HWND hwnd_subtitle_delay_time = GetDlgItem(m_hwnd, IDC_SUBTITLE_DELAY_TIME);
::SendMessage(hwnd_subtitle_delay_time, TBM_SETRANGEMIN, 0, 0);
::SendMessage(hwnd_subtitle_delay_time, TBM_SETRANGEMAX, 0, 20000);
::SendMessage(hwnd_subtitle_delay_time, TBM_SETPOS, 0, subtitle_delay_time);
HWND hwnd_subtitle_delay_range = GetDlgItem(m_hwnd, IDC_SUBTITLE_DELAY_RANGE);
::SendMessage(hwnd_subtitle_delay_range, TBM_SETRANGEMIN, 0, 0);
::SendMessage(hwnd_subtitle_delay_range, TBM_SETRANGEMAX, 0, 20000);
::SendMessage(hwnd_subtitle_delay_range, TBM_SETPOS, 0, subtitle_delay_range);
CComBSTR file;
m_pIDVBTeletextSubtitles->get_File(&file);
SetDlgItemTextW(m_hwnd, IDC_FILE_PATH, file);
long last_line;
hr = m_pIDVBTeletextSubtitles->get_LastLine(&last_line);
if (!SUCCEEDED(hr))
{
return hr;
}
SetDlgItemInt(m_hwnd, IDC_LAST_LINE, last_line, TRUE);
long transparency_percent;
hr = m_pIDVBTeletextSubtitles->get_TransparencyPercent(&transparency_percent);
if (!SUCCEEDED(hr))
{
return hr;
}
HWND spin = GetDlgItem(m_hwnd, IDC_TRANSPARENCYSPIN);
SendMessage(spin, UDM_SETBUDDY, (WPARAM)GetDlgItem(m_hwnd, IDC_TRANSPARENCY), 0L);
SendMessage(spin, UDM_SETRANGE32, 0, 100);
SetDlgItemInt(m_hwnd, IDC_TRANSPARENCY, transparency_percent, TRUE);
BOOL opaque = TRUE;
m_pIDVBTeletextSubtitles->get_TextMode(&opaque);
SendMessage(GetDlgItem(m_hwnd, IDC_TRANSPARENT), BM_SETCHECK, opaque ? BST_UNCHECKED : BST_CHECKED, 0);
SendMessage(GetDlgItem(m_hwnd, IDC_OPAQUE), BM_SETCHECK, opaque ? BST_CHECKED : BST_UNCHECKED, 0);
BOOL display_heading_line = TRUE;
m_pIDVBTeletextSubtitles->get_DisplayHeadingLine(&display_heading_line);
SendMessage(GetDlgItem(m_hwnd, IDC_HEADING_LINE), BM_SETCHECK, display_heading_line ? BST_CHECKED : BST_UNCHECKED, 0);
return NOERROR;
} // Activate
void CDVBTeletextSubtitlesPropertiesPage1::OnSelChangeSubtitlesPage(void)
{
CComboBox pages_combo = GetDlgItem(m_hwnd, IDC_SUBTITLES_PAGE);
int selected = pages_combo.GetCurSel();
if (selected != CB_ERR)
{
int subtitles_hex_page = pages_combo.GetItemData(selected);
if (subtitles_hex_page == 0)
{
TCHAR buffer[40];
if (pages_combo.GetWindowText(buffer, sizeof(buffer)) != 0)
{
int subtitles_decimal_page = _ttoi(buffer);
subtitles_hex_page = (subtitles_decimal_page % 10) | ( ( ( (subtitles_decimal_page - (100 * (subtitles_decimal_page / 100) ) ) % 100) / 10) << 4) | ( (subtitles_decimal_page / 100) << 8);
}
}
int subtitles_decimal_page = (((subtitles_hex_page & 0xF00) >> 8) * 100) + (((subtitles_hex_page & 0xF0) >> 4) * 10) + (subtitles_hex_page & 0xF);
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalPage(subtitles_decimal_page);
CComPtr<IEnumTeletextSubPages> enum_subpages;
HRESULT hr = m_pIDVBTeletextSubtitles->get_SubPages(subtitles_hex_page, &enum_subpages);
if (SUCCEEDED(hr))
{
long subtitles_subpage = 0;
hr = m_pIDVBTeletextSubtitles->get_SubtitlesDecimalSubPage(&subtitles_subpage);
CComboBox combo = GetDlgItem(m_hwnd, IDC_SUBTITLES_SUBPAGE);
combo.ResetContent();
hr = enum_subpages->Reset();
if (SUCCEEDED(hr))
{
int subpage;
int occurances;
ULONG received = 0;
hr = enum_subpages->Next(1, &subpage, &occurances, &received);
while (SUCCEEDED(hr) && (received != 0))
{
TCHAR strSubPage[100];
_stprintf(strSubPage, _T("%d[%d]"), subpage, occurances);
int list_index = combo.AddString(strSubPage);
if (list_index != CB_ERR)
{
combo.SetItemData(list_index, subpage);
if (subtitles_subpage == subpage)
{
combo.SetCurSel(list_index);
}
}
hr = enum_subpages->Next(1, &subpage, &occurances, &received);
}
}
}
}
CComboBox subpages_combo = GetDlgItem(m_hwnd, IDC_SUBTITLES_SUBPAGE);
selected = subpages_combo.GetCurSel();
if (selected != CB_ERR)
{
int subtitles_subpage = subpages_combo.GetItemData(selected);
if (subtitles_subpage == 0)
{
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(GetDlgItemInt(m_hwnd, IDC_SUBTITLES_SUBPAGE, NULL, TRUE));
}
else
{
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(subtitles_subpage);
}
}
else
{
if (subpages_combo.GetCount() != 0)
{
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(subpages_combo.GetItemData(0));
subpages_combo.SetCurSel(0);
}
}
m_pIDVBTeletextSubtitles->RefreshDisplay();
}
void CDVBTeletextSubtitlesPropertiesPage1::OnSelChangeSubtitlesSubPage(void)
{
CComboBox subpages_combo = GetDlgItem(m_hwnd, IDC_SUBTITLES_SUBPAGE);
int selected = subpages_combo.GetCurSel();
if (selected != CB_ERR)
{
int subtitles_subpage = subpages_combo.GetItemData(selected);
if (subtitles_subpage == 0)
{
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(GetDlgItemInt(m_hwnd, IDC_SUBTITLES_SUBPAGE, NULL, TRUE));
}
else
{
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(subtitles_subpage);
}
}
else
{
if (subpages_combo.GetCount() != 0)
{
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(subpages_combo.GetItemData(0));
subpages_combo.SetCurSel(0);
}
}
m_pIDVBTeletextSubtitles->RefreshDisplay();
}
//
// OnApplyChanges
//
// Changes made should be kept.
//
HRESULT CDVBTeletextSubtitlesPropertiesPage1::OnApplyChanges()
{
ASSERT(m_pIDVBTeletextSubtitles != NULL);
SetClean();
WCHAR file[_MAX_PATH + _MAX_FNAME + _MAX_EXT];
GetDlgItemTextW(m_hwnd, IDC_FILE_PATH, file, sizeof(file));
m_pIDVBTeletextSubtitles->set_File(file);
m_pIDVBTeletextSubtitles->set_DisplayHeadingLine(SendMessage(GetDlgItem(m_hwnd, IDC_HEADING_LINE), BM_GETCHECK, 0, 0) == BST_CHECKED);
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalPage(GetDlgItemInt(m_hwnd, IDC_SUBTITLES_PAGE, NULL, TRUE));
m_pIDVBTeletextSubtitles->set_SubtitlesDecimalSubPage(GetDlgItemInt(m_hwnd, IDC_SUBTITLES_SUBPAGE, NULL, TRUE));
HWND hwnd_subtitle_delay_time = GetDlgItem(m_hwnd, IDC_SUBTITLE_DELAY_TIME);
m_pIDVBTeletextSubtitles->set_SubtitleDelayTime(::SendMessage(hwnd_subtitle_delay_time, TBM_GETPOS, 0, 0));
HWND hwnd_subtitle_delay_range = GetDlgItem(m_hwnd, IDC_SUBTITLE_DELAY_RANGE);
m_pIDVBTeletextSubtitles->set_SubtitleDelayRange(::SendMessage(hwnd_subtitle_delay_range, TBM_GETPOS, 0, 0));
long teletext_pid = -1;
m_pIDVBTeletextSubtitles->get_TeletextPid(&teletext_pid);
CComboBox combo = GetDlgItem(m_hwnd, IDC_TELETEXT_PID);
int list_index = combo.GetCurSel();
int desired_pid;
if (list_index != CB_ERR)
{
desired_pid = combo.GetItemData(list_index);
}
else
{
TCHAR buffer[40];
if (combo.GetWindowText(buffer, sizeof(buffer)) != 0)
{
if (_tcscmp(buffer, _T("any")) == 0)
{
desired_pid = -1;
}
else
{
desired_pid = _ttoi(buffer);
}
}
}
m_pIDVBTeletextSubtitles->set_LastLine(GetDlgItemInt(m_hwnd, IDC_LAST_LINE, NULL, TRUE));
m_pIDVBTeletextSubtitles->set_TransparencyPercent(GetDlgItemInt(m_hwnd, IDC_TRANSPARENCY, NULL, TRUE));
m_pIDVBTeletextSubtitles->set_TeletextPid(desired_pid); // force reload of input pid
if (desired_pid != teletext_pid)
{
m_pIDVBTeletextSubtitles->ClearDisplay();
}
else
{
m_pIDVBTeletextSubtitles->RefreshDisplay();
}
OnActivate();
return NOERROR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -