【问题标题】:how to change the position of the child window inside the parent window and show the toolbar?如何更改子窗口在父窗口内的位置并显示工具栏?
【发布时间】:2013-03-15 14:24:05
【问题描述】:

我有以下代码将窗口处理程序从 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;
}

【问题讨论】:

  • 我改了,还是不行

标签: c++ winapi window toolbar


【解决方案1】:

可能您很久以前就找到了解决方案,但我想发布我的答案以防其他用户需要它。

您可以简单地将具有相同代码的 OpenCV 窗口添加到窗口中的子窗口(您预先设置它的位置)。例如,您可以将其添加到静态文本窗口(标签)...

【讨论】:

    【解决方案2】:

    如果您想移动 OpenCV 窗口,请使用所需坐标调用 SetWindowPos()

    SetWindowPos(hWnd2, 0, 0, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    

    【讨论】:

    • 谢谢回复,这个我也试过了,但是不管用,也不改变子窗口的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多