Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Работа с окнами


Автор: MakeItHappen 1.7.2009, 05:18
Здраствуйте. Нужно сделать следующее:  есть главное окно, на нем второе окно, которое является так скажем бэкграундом, на нем воспроизводится видео, а поверх него находятся остальные окна. Проблема следующая: Создаю я главном окне MCIWndCreate, видео воспроизводится все окей, даллее пытаюсь создать хоть одно окно поверх этого, ничего невыходит, что я токо не делал все равно окно с воспроизведением оказывается поверх всех... Подскажите пожалуйста в чем проблема  возможно я чтото упустил... 

g_hWnd это главное окно родитель.
hWndWS с окно видео

Код

HWND CreateWS (HWND hWndParent, RECT rclPos, WORD wID,HINSTANCE hInst)
{

  HWND hWndWSV;
  hWndWSV  = CreateWindowEx(NULL,WC_STATIC,"",WS_CHILD | WS_VISIBLE, rclPos.left, rclPos.right, rclPos.bottom, rclPos.top,hWndParent,(HMENU)wID,hInst,NULL);

  if (hWndWSV == NULL)
      MessageBox(g_hWnd,"Lulz Cant Create!","Debug",MB_OK);

  return (hWndWSV);
}

HWND CreateMenu (HWND hWndParent, RECT rclPos, WORD wID,HINSTANCE hInst)


  HWND hWndM;
  hWndM  = CreateWindowEx(WS_EX_TOPMOST,WC_STATIC,"",WS_CHILD | WS_VISIBLE, rclPos.left, rclPos.right, rclPos.bottom, rclPos.top,hWndParent,(HMENU)wID,hInst,NULL);

  if (hWndM == NULL)
      MessageBox(g_hWnd,"Lulz Cant Create!","Debug",MB_OK);

//  SetBkColor(GetDC(hWndM),RGB(0,255,0));

  return (hWndM);
}


RECT rcl;
rcl.left = 0; 
rcl.right = 100;
rcl.bottom = GetSystemMetrics(SM_CXSCREEN);    
rcl.top = (GetSystemMetrics(SM_CYSCREEN)-50);
hWndWS = CreateWS(g_hWnd,rcl,2,g_hInst);
VSBkgVideo(g_hInst,hWndWS,"vid\\background.avi");
ShowWindow(hWndWS,SW_SHOW);
UpdateWindow(hWndWS);


rcl.left = 10;  
rcl.right = 50;  
rcl.bottom = 100;    
rcl.top = 100;    
hWndMenu= CreateMenu(hWndWS,rcl,NULL,g_hInst);

ShowWindow(hWndMenu,SW_SHOW);
UpdateWindow(hWndMenu);

Автор: GremlinProg 2.7.2009, 12:05
MCI-окна скорее всего для такого просто не предназначены,
видео выводится с минимальным сопротивлением - поверх всех оконных буферов, чтобы избежать массы медленных операций с клипированием,
смотри в сторону DDraw, чтоли,

но я на вскидку сейчас не припомню,
чтобы в рабочей области плееров вообще что-либо городили дополнительно,
старенький BSPlayer мог на десктопе рисовать, разве что, но это не одно и то же,

видео вообще ни чем не перекрывают, в принципе,
может стоит пересмотреть организацию плеера?

Автор: BorisVorontsov 2.7.2009, 13:38
Автор, настоятельно советую забыть о MCI, и начать изучать DirectShow. Вывод какой-то информации или окон поверх видео вполне  решается спрайтами

Автор: MakeItHappen 2.7.2009, 14:05
Я то как раз сделал через сначала Direct Draw, но таже фень, то что я воспроизвожу перекрывает все остальные окна, мне посоветовали MCI, ну я попробовал, таже фень что и с Direct Draw. Хз че делать.....

Автор: BorisVorontsov 3.7.2009, 10:31
Еще раз, забудь про окна
Цитата(BorisVorontsov @  2.7.2009,  13:38 Найти цитируемый пост)
Вывод какой-то информации или окон поверх видео вполне  решается спрайтами


Автор: MakeItHappen 3.7.2009, 15:01
Тогда если несложно можешь дать ссылочку на книгу или где про это почитать можно... заранее спасибо

Автор: MakeItHappen 8.7.2009, 01:34
<Блин помогите кто нибудь че делать, я пробовал и через DirectDraw и DirectShow и VRM9+DirectShow всегда видео поверх всех окон и никакими флагами это изменить нельзя что делать то... я про спрайты вообще невкурсе я даже хз толком че это... Киньте хоть примерчик про спрайты какойнибудь...  smile Плз позарез нада!!  smile  smile 

Автор: BorisVorontsov 8.7.2009, 13:41
ID3DXSprite, обычное растровое изображение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)