⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvbteletextsubtitlespropertiespage1.cpp

📁 Teletext module usually used in the DVB area.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    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 + -