線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1435
推到 Plurk!
推到 Facebook!

關於DirectShow的FullScreen問題

尚未結案
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-22 17:58:36 IP:211.74.xxx.xxx 未訂閱
各位先進好: 在DirectShow 中,可以創建VideoWindwo的界面來使用,他主要是負責影像視窗相關,其中有一個功能便是能夠FullScreen ,但是影像全螢幕後,要如何才能對這個影像做控制呢? 其實,小弟想要達到兩個功能: 1.在全螢幕的影像上出現MOUSE的游標(想按右鍵出現選單說) 2.在影像上連點兩下即回復標準畫面.. 請問各位大大,有無方法可以達成呢?謝謝 小弟目前想到的方法是找個透明的東東蓋在他上面,不過這會產生兩個問題.. 1.那種物件可以變透明? 2.全螢幕時,這個透明物件是否會產生效用,還是會給DIRECTSHOW的視窗覆蓋呢?
綾小路
一般會員


發表:2
回覆:12
積分:7
註冊:2004-09-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-24 14:35:20 IP:61.219.xxx.xxx 未訂閱
首先..設成 FullScreen 時..Mouse應該是不會不見的 除非你故意讓它不見 或是你沒有把 VideoWindow 嵌入自己的視窗裡     啟始時把 VideoWindow 嵌入 TForm2  hwnd = TForm2->Handle;  lpVideoWindow->put_Owner((OAHWND)hwnd);  lpVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS);  lpVideoWindow->put_Visible(OATRUE);  lpVideoWindow->put_AutoShow(OATRUE);     你的問題根本跟 DirectShow 無關 你應該是想要問如何得知 Mouse 座標吧?
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 Application->OnMessage = MyMessage;
}
 
void __fastcall TForm1::MyMessage(tagMSG &Msg, bool &Handled)
{
 if(Msg.message == WM_RBUTTONDOWN)  // 右鍵
 {
  int X,Y;
  RECT Rect;      GetWindowRect(Msg.hwnd,&Rect);
  X = LOWORD(Msg.lParam)   Rect.left;
  Y = (HIWORD(Msg.lParam)   Rect.top) - FormMenu->Height;
  if(Y < 0) Y=0;
  FormMenu->Left = X;
  FormMenu->Top = Y;
  FormMenu->Show();   // Show 選單      Handled=true; return;
 }
}    
建議你不要使用 VideoWindow 的 FullScreen 功能, 改成嵌入Form2後,再把Form2放大到全螢幕 記得 Form2 要把 BorderStyle 設成 bsNone
terence_lee
初階會員


發表:62
回覆:82
積分:28
註冊:2004-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-27 09:45:57 IP:211.74.xxx.xxx 未訂閱
綾小路大大感謝你的熱烈回應: 以下是小弟啟始的程式碼內容: void __fastcall TfrmVideo::InitialPlay(void) { long width,height; if(!InitialGraph(frmMain->PlayFile.c_str())) return; Panel1->Visible=false; pVidWin->put_Owner((OAHWND)frmVideo->Handle); pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS); pVidWin->put_Visible(OATRUE); pVidWin->put_AutoShow(OATRUE); pVidWin->SetWindowPosition(0,0,frmVideo->Width,frmVideo->Height); } 和大大寫的相同,而小弟的全螢幕寫法如下: void __fastcall TfrmMain::btnFullClick(TObject *Sender) { pVidWin->put_FullScreenMode(OATRUE); } 但是使用後會立刻會變成全螢幕, 可是mouse指標真的不會出現丫,是不是小弟那邊沒有處理好呢?(只要不是全螢幕的播放,都會有mouse指標,此外小弟也有找到 hidecursor的功能,不過只適用於標準播放,全螢幕時,mouse還是會被吃掉) 然後謝謝大大的建議,於是小弟想把全螢幕功能改成放大原本的 form size ,於是採用大大的寫法,來攔截mouse右鍵的訊息... 程式碼如下: __fastcall TfrmVideo::TfrmVideo(TComponent* Owner) : TForm(Owner) { Application->OnMessage = MyMessage; } //---------------------------------------------------------------- void __fastcall TfrmVideo::MyMessage(tagMSG &Msg, bool &Handled) { if(Msg.message == WM_RBUTTONDOWN) // 右鍵 { ShowMessage("test"); //測試用 /* int X,Y; RECT Rect; GetWindowRect(Msg.hwnd,&Rect); X = LOWORD(Msg.lParam) Rect.left; Y = (HIWORD(Msg.lParam) Rect.top) - FormMenu->Height; if(Y < 0) Y=0; FormMenu->Left = X; FormMenu->Top = Y; FormMenu->Show(); // Show 選單 Handled=true; return; */ } } //程式執行的時侯發現,在尚未播放影片時,若按右鍵會出現 test ,但是當videowinow在播放時,小弟在他上面按右鍵,就完全不會出現 "test" ,想請問大大是小弟那裡沒有設定好呢?再次感謝大大的回應.
系統時間:2024-05-21 0:09:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!