请教 :在视频播放时,在播放窗口画一个虚线的矩形,以相中特定的区域,就象豪杰解霸一样,用鼠标在播放窗口上画一个虚矩形框,可将选中的区域放大??
 难点 .虚线矩形不能随播放刷新而消失

解决方案 »

  1.   

    如果你的播放是基于Overlay的,直接在窗口上画就行了.
    如果不是Overlay的,则需要在显示每一帧图像后马上将线画上去.所以推荐第一种方案.
      

  2.   

    有两种可能:
     1:自己直接编写播放的话 1,2都可以实现
     2:如果是调用别人的sdk的话 我看都不行
       我的想法是不是用一个透明的非模式对话框,动态的显示对话框的大小,两种情况都可以满足,
    不过现在只是想法,准备试一下
      

  3.   

    使用transform filter实时叠加到视频上吧,不过这样可能看起来就没立体感了
      

  4.   

    我做过这样的窗口. 我这个是两个像素宽的实线框, 是用来在QQ游戏里进行即时提示:static BOOL CALLBACK BoxProc(
      HWND hwndDlg,  // handle to dialog box
      UINT uMsg,     // message
      WPARAM wParam, // first message parameter
      LPARAM lParam  // second message parameter
    )
    {
    switch(uMsg)
    {
    case WM_PAINT:
    {
    PAINTSTRUCT   paint;
    HDC  hdc = ::BeginPaint(hwndDlg, &paint);
    RECT  rc;
    GetClientRect(hwndDlg, &rc);
    HBRUSH  bs;
    bs = CreateSolidBrush(RGB(255,0,0));
    FillRect(hdc, &rc, bs);
    ::EndPaint(hwndDlg, &paint);
    }
    return TRUE;
    }
    return FALSE;
    }static void CreateBoxWnd(void)
    {
    g_hBoxWndHorz = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_BOX), g_hMainWnd, BoxProc);
    if(g_hBoxWndHorz != NULL)
    {
    SetWindowPos(g_hBoxWndHorz, HWND_TOPMOST, 0, 0, TEST_UNIT_CX * 2+5, TEST_UNIT_CY+5, SWP_NOMOVE);
    HRGN  rgn = CreateRectRgn(0,0,0,0);
    HRGN  rgn1 = CreateRectRgn(0,0, TEST_UNIT_CX * 2+5, TEST_UNIT_CY+5);
    HRGN  rgn2 = CreateRectRgn(2,2, TEST_UNIT_CX * 2+3, TEST_UNIT_CY+3);
    CombineRgn(rgn, rgn1, rgn2, RGN_DIFF);
    SetWindowRgn(g_hBoxWndHorz, rgn, TRUE);
    DeleteObject((HGDIOBJ)rgn);
    DeleteObject((HGDIOBJ)rgn1);
    DeleteObject((HGDIOBJ)rgn2);
    } g_hBoxWndVert = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_BOX), g_hMainWnd, BoxProc);
    if(g_hBoxWndVert != NULL)
    {
    SetWindowPos(g_hBoxWndVert, HWND_TOPMOST, 0, 0, TEST_UNIT_CX+5, TEST_UNIT_CY * 2+5, SWP_NOMOVE);
    HRGN  rgn = CreateRectRgn(0,0,0,0);
    HRGN  rgn1 = CreateRectRgn(0,0, TEST_UNIT_CX+5, TEST_UNIT_CY * 2+5);
    HRGN  rgn2 = CreateRectRgn(2,2, TEST_UNIT_CX+3, TEST_UNIT_CY * 2+3);
    CombineRgn(rgn, rgn1, rgn2, RGN_DIFF);
    SetWindowRgn(g_hBoxWndVert, rgn, TRUE);
    DeleteObject((HGDIOBJ)rgn);
    DeleteObject((HGDIOBJ)rgn1);
    DeleteObject((HGDIOBJ)rgn2);
    }
    }
      

  5.   

    谢谢 krh2001(边城浪子) 
         我试一试