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]
...全文
317 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
么特里亚 2014-04-17
结贴,实现方法在dialog里 然后给activex接口
回复
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
自己顶 求大神帮忙
回复
相关推荐
发帖
ATL
创建于2007-09-28

3216

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
帖子事件
创建了帖子
2014-03-25 02:18
社区公告
暂无公告