1

OpenCVウィンドウからwin32ハンドラーにウィンドウハンドラーを渡す次のコードがあるため、カメラから取得した画像を画面に表示でき、画像はメインAPIの子ウィンドウとして表示されます。しかし、問題は、プログラムにツールバーを追加したいときに、イメージ ウィンドウ ハンドラがツールバーの上部に表示されることです。どうすればこれを整理できますか?

//create a window and set the handler from openCV to win32 
cv::namedWindow("test",cv::WINDOW_AUTOSIZE);                        
hWnd2 = (HWND) cvGetWindowHandle("test"); 
hParent = ::GetParent(hWnd2);       
::SetParent(hWnd2, hWnd);                       
::ShowWindow(hParent, SW_HIDE); 
_liveCapturing=true;
lastPicNr = 0;  
SetWindowTextW(hStatus, L"Live Capturing ... ");
if(FullScreen()){
    ::ShowWindow(hWnd, SW_MAXIMIZE);
}

ツールバーのコード:

HWND CreateToolbar(HWND hwnd){
    HWND hTbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | CCS_TOP  , 0, 0, 0, 0, hwnd, (HMENU)12, GetModuleHandle(NULL), NULL);
    SendMessage(hTbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

    TBBUTTON tbb[3];
    TBADDBITMAP tbab;

    tbab.hInst = HINST_COMMCTRL;
    tbab.nID = IDB_STD_SMALL_COLOR; 
    SendMessage(hTbar, TB_ADDBITMAP, 0, (LPARAM)&tbab);
    return hTbar;
}

ツールバーに重なっているウィンドウのスクリーンショット

4

2 に答える 2

2

おそらくあなたはずっと前に解決策を見つけたでしょうが、他のユーザーがそれを必要とする場合に備えて私の答えを投稿したいと思います.

ウィンドウ内の子ウィンドウに同じコードを使用して OpenCV ウィンドウを追加するだけです (事前に位置を設定します)。たとえば、静的テキスト ウィンドウ (ラベル) に追加できます...

于 2015-03-04T22:48:50.137 に答える
1

OpenCVウィンドウを移動する場合はSetWindowPos()、目的の座標で呼び出します。

SetWindowPos(hWnd2, 0, 0, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
于 2013-03-15T16:08:50.790 に答える