У меня есть следующий код, который передает обработчик окна из окна OpenCV в обработчик win32, поэтому я могу показать захваченные изображения с камеры на экран, и изображения будут отображаться как дочернее окно моего основного API.
но проблема в том, что когда я хочу добавить tooldbar в свою программу, обработчик окна изображения появляется в верхней части панели инструментов. как я могу разобраться в этом?
//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;
}
Возможно, вы нашли решение давно, но я хочу опубликовать свои ответы на случай, если это понадобится другим пользователям.
Вы можете просто добавить окно OpenCV с тем же кодом, который у вас есть, к дочернему окну в вашем окне (которое вы устанавливаете заранее). Например, вы можете добавить его в статическое текстовое окно (метку) …
Если вы хотите переместить окно OpenCV, позвоните SetWindowPos()
с желаемыми координатами.
SetWindowPos(hWnd2, 0, 0, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);