關於DirectShow的FullScreen問題 |
尚未結案
|
terence_lee
初階會員 發表:62 回覆:82 積分:28 註冊:2004-07-15 發送簡訊給我 |
各位先進好:
在DirectShow 中,可以創建VideoWindwo的界面來使用,他主要是負責影像視窗相關,其中有一個功能便是能夠FullScreen ,但是影像全螢幕後,要如何才能對這個影像做控制呢? 其實,小弟想要達到兩個功能: 1.在全螢幕的影像上出現MOUSE的游標(想按右鍵出現選單說)
2.在影像上連點兩下即回復標準畫面.. 請問各位大大,有無方法可以達成呢?謝謝 小弟目前想到的方法是找個透明的東東蓋在他上面,不過這會產生兩個問題..
1.那種物件可以變透明?
2.全螢幕時,這個透明物件是否會產生效用,還是會給DIRECTSHOW的視窗覆蓋呢?
|
綾小路
一般會員 發表:2 回覆:12 積分:7 註冊:2004-09-06 發送簡訊給我 |
首先..設成 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 發送簡訊給我 |
綾小路大大感謝你的熱烈回應: 以下是小弟啟始的程式碼內容:
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" ,想請問大大是小弟那裡沒有設定好呢?再次感謝大大的回應.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |