Miniwin-DVB模块 EPG数据搜索模块介绍

 

以下为搜索结果的界面示意图.搜索的按钮文字没贴出来,大家自己慢慢看,这里只是搜索结果显示部分.数据管理以及搜索流程请到本人资源中去下载

搜索界面

#include < stdio.h >
#include
< string .h >
#include 
" dvbutils.h "
#include 
" dvbepg.h "
#define  IDT_MANUALSEARCH_TIMER 100
#define  IDC_MANUALSEARCH_TITLE 101
#define  IDC_MANUALSEARCH_SEARCHSTART 102
#define  IDC_MANUALSEARCH_STARTFREQ 103
#define  IDC_MANUALSEARCH_ENDFREQ 104
#define  IDC_MANUALSEARCH_SYMBLE  105
#define  IDC_MANUALSEARCH_MODULATION 106
#define  IDC_MANUALSEARCH_STRENGTH 107
#define  IDC_MANUALSEARCH_SN 108
#define  IDC_SEARCHRESULT    110
PRTunerParams tuner
= {411000} ;
static   int  GetSearchResult(HWND hTreeView,TSDATA * ts)
{
    TV_INSERTSTRUCT tviis;
    TV_ITEM tvi;
    HTREEITEM htsItem,hitem;
    HIMAGELIST himgList;
    CHAR text[
256];
    SECTIONDATA
*sd=ts->pmt->sections;
    tviis.hInsertAfter 
= TVI_LAST;
    ZeroMemory(
&(tviis.u.itemex), sizeof(TVITEMEX));
    tviis.u.itemex.mask  
= TVIF_TEXT | TVIF_IMAGE  |
        TVIF_SELECTEDIMAGE 
| TVIF_PARAM |TVIF_INTEGRAL;
    tviis.hParent 
= TVI_ROOT;
    tviis.u.itemex.iImage 
= 0;
    tviis.u.itemex.iSelectedImage 
=0;
    tviis.u.itemex.lParam 
= 1;
    sprintf(text,
"TS: %d.%d Freq %d",ts->netId,ts->tsId,ts->tunerParams.frequency);
    tviis.u.itemex.pszText 
= text;
    tviis.u.itemex.iIntegral
=1;
    htsItem 
= TreeView_InsertItem(hTreeView, &tviis);
    
while(sd){
        INT i
=0,eCount;
        HTREEITEM hsvc;
        SERVICELOCATOR svc;
        svc.netId
=ts->netId;
        svc.tsId
=ts->tsId;
        svc.serviceId
=GetPmtServiceID(sd->Data);
        tviis.hParent 
= htsItem ;
        tviis.u.itemex.iIntegral
=1;
        tviis.u.itemex.iImage 
= (i+2)%10;
        tviis.u.item.iSelectedImage 
= (i+3)%10;
        tviis.u.item.lParam 
= 3;
        GetServiceName(
&svc,NULL,text,NULL);
        tviis.u.item.pszText 
=text;
        hsvc
=TreeView_InsertItem(hTreeView, &tviis);
        eCount
=GetPmtElementCount(sd->Data);
        
for(i=0;i<eCount;i++){
            
struct MpegProgElement e;
            GetPmtElement(sd
->Data,&e,i);
            tviis.hParent 
= hsvc ;
            tviis.u.itemex.iIntegral
=1;
            tviis.u.itemex.iImage 
= (i+2)%5;
            tviis.u.item.iSelectedImage 
= (i+3)%5;
            tviis.u.item.lParam 
= 3;
            sprintf(text,
"PID %d type %d",e.elementary_PID,e.stream_type);
            tviis.u.item.pszText 
=text;
            TreeView_InsertItem(hTreeView, 
&tviis);
            
        }

        sd
=sd->next;
    }

    
return hTreeView;
}

static  LRESULT ManualSearchProc(HWND hwnd,UINT msgID,UINT wParam,UINT lParam)
{
    
switch(msgID)
    
{
        
case WM_TIMER:
            
{
                SendMessage(GetDlgItem(hwnd,IDC_MANUALSEARCH_STRENGTH),PBM_SETPOS,rand()
%100,0);
                SendMessage(GetDlgItem(hwnd,IDC_MANUALSEARCH_SN),PBM_SETPOS,rand()
%100,0);
            }

            
break;
        
case DTVM_NETSEARCH:
            
{
                GetSearchResult(GetDlgItem(hwnd,IDC_SEARCHRESULT),(TSDATA
*)wParam);
            }
break;
        
case WM_COMMAND:
            
{    
                
switch(HIWORD(wParam))
                
{
                    
case EN_SETFOCUS:
                        SendMessage((HWND)lParam,EM_SETSEL,(WPARAM)
0,(LPARAM)-1);
                        
break;
                    
case EN_KILLFOCUS:
                        SendMessage((HWND)lParam,EM_SETSEL,(WPARAM)
-1,(LPARAM)0);
                        
break;
                    
case BN_CLICKED:
                        SearchNetwork(
&tuner,0);
                        
break;
                }

            }

            
break;
        
case WM_DRAWITEM:
            
{
                DRAWITEMSTRUCT 
*ds=(DRAWITEMSTRUCT*)lParam;
                HDC hdc
=(HDC)ds->hDC;
                RECT rc
=ds->rcItem;
                HBITMAP hobmp,hbmp;
                BITMAP bmp;
                HBRUSH hbBorder;
                
char text[128];
                HDC hmdc
=CreateCompatibleDC((HDC)hdc);

                
if((ds->CtlType==ODT_BUTTON)&&(ds->CtlID==IDC_MANUALSEARCH_SEARCHSTART))
                
{    
                    
if(ds->itemState&(ODS_SELECTED|ODS_FOCUS))
                    
{
                        hbmp
=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_BTNFOCUS));
                        hobmp
=(HBITMAP)SelectObject(hmdc,(HGDIOBJ)hbmp);
                        BitBlt((HDC)hdc,rc.left,rc.top,rc.right
-rc.left,rc.bottom-rc.top,hmdc,0,0,SRCCOPY);
                    }
else{
                        hbmp
=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_BTNNORMAL));
                        hobmp
=(HBITMAP)SelectObject(hmdc,(HGDIOBJ)hbmp);
                        BitBlt((HDC)hdc,rc.left,rc.top,rc.right
-rc.left,rc.bottom-rc.top,hmdc,0,0,SRCCOPY);
                    }

                    hbmp
=(HBITMAP)SelectObject(hmdc,(HGDIOBJ)hobmp);
                    SendMessage(ds
->hwndItem,WM_GETTEXT,ds->itemID,(LPARAM)text);
                    SetTextColor(hdc,RGB(
0,0,0));
                    SetBkMode(hdc,TRANSPARENT);
                    DrawText(hdc,text,
sizeof(text),&(ds->rcItem),DT_CENTER|DT_VCENTER|DT_SINGLELINE);
                }

                DeleteDC(hmdc);

                
return 0;
            }

            
case WM_ERASEBKGND:
                
{
                    HBITMAP hobmp;
                    BITMAP bmp;
                    RECT rw;
                    HBRUSH hbBorder;
                    HDC hmdc
=CreateCompatibleDC((HDC)wParam);
 
                    
//画背景
                    hbBorder=CreateSolidBrush(RGB(61,185,197));
                    FillRect((HDC)wParam,NULL,hbBorder);
                    DeleteObject((HGDIOBJ)hbBorder);
                    
                    
{   
                        RECT rc;
                        HBITMAP hobmp,hbmpTitle;
                        HBRUSH hbrush;
                        BITMAP bmp;
                        hbmpTitle
=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_WINTITLE));
                        hbrush
=CreatePatternBrush(hbmpTitle);
                        GetObject((HGDIOBJ)hbmpTitle,
sizeof(BITMAP),&bmp);
                        GetClientRect(hwnd,
&rc);rc.bottom=rc.top+bmp.bmHeight;
                        FillRect((HDC)wParam,
&rc,hbrush);
                        DeleteObject((HGDIOBJ)hbrush); 
                        DeleteObject((HGDIOBJ)hbmpTitle);
                        
                        
                        hbmpTitle
=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_WINHELP));
                        hbrush
=CreatePatternBrush(hbmpTitle);
                        GetObject((HGDIOBJ)hbmpTitle,
sizeof(BITMAP),&bmp);
                        GetClientRect(hwnd,
&rc);rc.top=rc.bottom-bmp.bmHeight;
                        FillRect((HDC)wParam,
&rc,hbrush);
                        DeleteObject((HGDIOBJ)hbrush); 
                        DeleteObject((HGDIOBJ)hbmpTitle);
                    }

                    DeleteDC(hmdc);
                }

                
return 1;
        
default:
            
return DefWindowProc(hwnd,msgID,wParam,lParam);
    }

    
return 0;
}

HWND CreateNetSearchWnd(
void )
{
    HWND ctl,wnd,hTreeView;
    HIMAGELIST himgList;
    wnd
=CreateMainWindow(NULL,WS_TABSTOP|WS_OVERLAPPED,40,30,650,516,(WNDPROC)ManualSearchProc);

    CreateWindow(
"Static","手 动 搜 索",WS_VISIBLE|WS_CHILD,40,10,120,24,wnd,(HMENU)IDC_MANUALSEARCH_TITLE,NULL,NULL);

    CreateWindow(
"Static","搜索频率",WS_VISIBLE|WS_CHILD,100,60,247,28,wnd,(HMENU)1,NULL,NULL);
    CreateWindow(
"Static","符号率(KS/s)",WS_VISIBLE|WS_CHILD,100,100,247,28,wnd,(HMENU)3,NULL,NULL);
    CreateWindow(
"Static","调制方式",WS_VISIBLE|WS_CHILD,100,140,247,28,wnd,(HMENU)4,NULL,NULL);

    CreateWindow(
"EditBox","115",WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_CENTER,360,60,180,28,wnd,(HMENU)IDC_MANUALSEARCH_STARTFREQ,NULL,NULL);//start frequency 
    SendMessage(GetDlgItem(wnd,IDC_MANUALSEARCH_STARTFREQ),EM_LIMITTEXT,3,0);   
    SendMessage(GetDlgItem(wnd,IDC_MANUALSEARCH_STARTFREQ),EM_LINESCROLL,
3,1);
    CreateWindow(
"EditBox","6875",WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_CENTER,360,100,180,28,wnd,(HMENU)IDC_MANUALSEARCH_SYMBLE,NULL,NULL); //symbol rate
    SendMessage(GetDlgItem(wnd,IDC_MANUALSEARCH_SYMBLE),EM_LIMITTEXT,4,0); 
    CreateWindow(
"Select",NULL,WS_TABSTOP|WS_VISIBLE|WS_CHILD|OPS_NOLABEL|OPS_SHOWARROWALWAYS,360,140,180,28,wnd,(HMENU)IDC_MANUALSEARCH_MODULATION,NULL,NULL);//modulation
    CreateWindow("Button","开始搜索",WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_OWNERDRAW,360,180,195,28,wnd,(HMENU)IDC_MANUALSEARCH_SEARCHSTART,NULL,NULL);
    hTreeView 
=CreateWindowEx( 0 ,"treeview""",
        WS_CHILD 
| WS_VISIBLE  | TVS_HASLINES | TVS_LINESATROOT|TVS_NONEVENHEIGHT
        
| TVS_HASBUTTONS | TVS_SHOWSELALWAYS|WS_VSCROLL|TVS_TRACKSELECT
        ,
50,260,580,200, wnd,(HMENU)IDC_SEARCHRESULT, NULL, NULL);
    himgList
=ImageList_Create(24,24,ILC_COLOR24 , 44);
    ImageList_Add(himgList,LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_COLORKEYS)),NULL);
    TreeView_SetImageList(hTreeView, himgList, TVSIL_NORMAL);

    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_ADDSTRING,
0,(LPARAM)"8 QAM");
    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_ADDSTRING,
0,(LPARAM)"16 QAM");
    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_ADDSTRING,
0,(LPARAM)"32 QAM");
    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_ADDSTRING,
0,(LPARAM)"64 QAM");
    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_ADDSTRING,
0,(LPARAM)"128 QAM");
    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_ADDSTRING,
0,(LPARAM)"256 QAM");
    SendDlgItemMessage(wnd,IDC_MANUALSEARCH_MODULATION,OPT_SETCURSEL,
3,0);
    CreateWindow(
"Static","信号等级",WS_VISIBLE|WS_CHILD|SS_OWNERDRAW,55,220,80,20,wnd,(HMENU)5,NULL,NULL);        
    CreateWindow(
"Static","信号质量",WS_VISIBLE|WS_CHILD|SS_OWNERDRAW,360,220,80,20,wnd,(HMENU)6,NULL,NULL);    
    
    ctl
=CreateWindow("Progress",NULL,WS_VISIBLE|WS_CHILD,
                     
135,220,180,20,wnd,(HMENU)IDC_MANUALSEARCH_STRENGTH,NULL,NULL);
    SendMessage(ctl,PBM_SETRANGE,
0,MAKELONG(0,100));
    ctl
=CreateWindow("Progress",NULL,WS_VISIBLE|WS_CHILD,
                     
440,220,180,20,wnd,(HMENU)IDC_MANUALSEARCH_SN,NULL,NULL);
    SendMessage(ctl,PBM_SETRANGE,
0,MAKELONG(0,100));

    
{
        TBBUTTON toolbarBtns[] 
= {
            
{000, BTNS_SEP, {00}00},
            
{0123, TBSTATE_ENABLED,BTNS_BUTTON, {00}0"选择"},
            
{1122, TBSTATE_ENABLED, BTNS_BUTTON, {00}0,"进入下级菜单"},
            
{2133, TBSTATE_ENABLED, BTNS_BUTTON, {00}0"退出"},
            
{3144, TBSTATE_ENABLED, BTNS_BUTTON, {00}00},
        }
;

        HWND htoolbar
=CreateToolbarEx(wnd, WS_CHILD|WS_VISIBLE|
            TBSTYLE_LIST
|TBSTYLE_TRANSPARENT|TBSTYLE_FLAT|CCS_BOTTOM,
            
12342, hInstDVBRes, IDB_ARROWKEYS, toolbarBtns,
            
sizeof(toolbarBtns)/sizeof(TBBUTTON),32163216sizeof(TBBUTTON));
        SendMessage(htoolbar,TB_SETEXTENDEDSTYLE,
0, TBSTYLE_EX_DRAWDDARROWS);
    }


    SetTimer(wnd,IDT_MANUALSEARCH_TIMER,
300,NULL);
    RegisterEPGNotify(wnd);
    ShowWindow(wnd,SW_SHOW);

    
return wnd;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值