HWND bb = NULL;
bb=aa->GetDlgItem( IDC_BUTTON1 )->m_hWnd;但是拿到了activex无法使用[/size]
10 个解决方案
#1
自己顶 求大神帮忙
#2
或者告诉我怎么获得OCX 默认的窗口句柄,我现在要做的是拿到一个句柄,将视频流显示出来
#3
你要明白,Dialog和Button都是Window
所以如果有Dialog的WindowHandle,查找其所有子Window的WindowHandle可以
使用API FindWindow和FindWindowEx
参考下面:
所以如果有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;
}
#4
推荐使用Spy4Win软件。
#5
不推荐LS的方法,active控件也可能是wndless的。不过控件总是由你的容器创建的,按理说有窗口的你直接就能获得activex控件的句柄,除非你是在activex内部在new了一个dlg出来,那如果这样的话你得抛出接口来供宿主程序操作了。
#6
控件增加一个属性或接口用来传递句柄,由Dlg传递到控件
#7
dialog只有被创建才会有句柄,所以创建时把它的指针记录下来,要取button时用,dialog->getdlgitem
#8
请问怎么抛出接口让主程序调用,我建的是MFC active,后来参照这篇文章http://blog.sina.com.cn/s/blog_7065a9de0100vmb1.html,然后想得到dialog中控件的句柄
#9
结贴,实现方法在dialog里 然后给activex接口
#10
#1
自己顶 求大神帮忙
#2
或者告诉我怎么获得OCX 默认的窗口句柄,我现在要做的是拿到一个句柄,将视频流显示出来
#3
你要明白,Dialog和Button都是Window
所以如果有Dialog的WindowHandle,查找其所有子Window的WindowHandle可以
使用API FindWindow和FindWindowEx
参考下面:
所以如果有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;
}
#4
推荐使用Spy4Win软件。
#5
不推荐LS的方法,active控件也可能是wndless的。不过控件总是由你的容器创建的,按理说有窗口的你直接就能获得activex控件的句柄,除非你是在activex内部在new了一个dlg出来,那如果这样的话你得抛出接口来供宿主程序操作了。
#6
控件增加一个属性或接口用来传递句柄,由Dlg传递到控件
#7
dialog只有被创建才会有句柄,所以创建时把它的指针记录下来,要取button时用,dialog->getdlgitem
#8
请问怎么抛出接口让主程序调用,我建的是MFC active,后来参照这篇文章http://blog.sina.com.cn/s/blog_7065a9de0100vmb1.html,然后想得到dialog中控件的句柄
#9
结贴,实现方法在dialog里 然后给activex接口