MFC activex控件获得dialog子窗口句柄

么特里亚 2014-03-25 02:18:51
我新建了一个MFC activex 工程用来制作ocx;在里面我增加了一个dialog对话框,然后在对话框里增加一个button按钮,现在我的activex怎样才能拿到这个button的句柄,直接在dialog中拿到是可以的
HWND bb = NULL;
bb=aa->GetDlgItem( IDC_BUTTON1 )->m_hWnd;但是拿到了activex无法使用
[/size]
...全文
382 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
么特里亚 2014-04-17
  • 打赏
  • 举报
回复
结贴,实现方法在dialog里 然后给activex接口
真相重于对错 2014-03-28
  • 打赏
  • 举报
回复
dialog只有被创建才会有句柄,所以创建时把它的指针记录下来,要取button时用,dialog->getdlgitem
么特里亚 2014-03-28
  • 打赏
  • 举报
回复
引用 5 楼 xuddk727 的回复:
不推荐LS的方法,active控件也可能是wndless的。不过控件总是由你的容器创建的,按理说有窗口的你直接就能获得activex控件的句柄,除非你是在activex内部在new了一个dlg出来,那如果这样的话你得抛出接口来供宿主程序操作了。
请问怎么抛出接口让主程序调用,我建的是MFC active,后来参照这篇文章http://blog.sina.com.cn/s/blog_7065a9de0100vmb1.html,然后想得到dialog中控件的句柄
zgl7903 2014-03-27
  • 打赏
  • 举报
回复
控件增加一个属性或接口用来传递句柄,由Dlg传递到控件
赵4老师 2014-03-27
  • 打赏
  • 举报
回复
推荐使用Spy4Win软件。
赵4老师 2014-03-27
  • 打赏
  • 举报
回复
你要明白,Dialog和Button都是Window 所以如果有Dialog的WindowHandle,查找其所有子Window的WindowHandle可以 使用API FindWindow和FindWindowEx 参考下面:
HWND MyFindListViewWindow()
{
    const int MyMaxParentWinCount = 4;
    // 父窗口类名数组
    char *A_szClassName[MyMaxParentWinCount] = {
        "ThunderRT6FormDC",
        "ThunderRT6Frame",
        "ThunderRT6Frame",
        "ListView20WndClass"
    };
    // 父窗口标题数组
    char *A_szWinName[MyMaxParentWinCount] = {
        Title,
        "",
        "",
        ""
    };
    // 首先求得顶级父窗口
    HWND hMainWin = FindWindow(A_szClassName[0], A_szWinName[0]);
    if (NULL==hMainWin) {
        return NULL;
    }
    // 逐次用FindWindowEx函数求出各级子窗口
    HWND hNextChildWin=NULL;

    HWND hLastWin=NULL;
    for (int i=1; i<MyMaxParentWinCount; i++) {
        if (1==i) {
            hMainWin = FindWindowEx(hMainWin,NULL         ,A_szClassName[i],A_szWinName[i]);
        } else if (2==i) {
            hNextChildWin = FindWindowEx(hMainWin,hNextChildWin,A_szClassName[i],A_szWinName[i]);
            if (NULL==hNextChildWin) break;//
            hNextChildWin = FindWindowEx(hMainWin,hNextChildWin,A_szClassName[i],A_szWinName[i]);
            hLastWin=hNextChildWin;
        } else {
            hLastWin = FindWindowEx(hLastWin,NULL         ,A_szClassName[i],A_szWinName[i]);
        }
    }
    return hLastWin;
}
么特里亚 2014-03-27
  • 打赏
  • 举报
回复
或者告诉我怎么获得OCX 默认的窗口句柄,我现在要做的是拿到一个句柄,将视频流显示出来
许文君 2014-03-27
  • 打赏
  • 举报
回复
不推荐LS的方法,active控件也可能是wndless的。不过控件总是由你的容器创建的,按理说有窗口的你直接就能获得activex控件的句柄,除非你是在activex内部在new了一个dlg出来,那如果这样的话你得抛出接口来供宿主程序操作了。
么特里亚 2014-03-26
  • 打赏
  • 举报
回复
自己顶 求大神帮忙

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧