怎么获得任一窗口的指针?

在一个基于对话框的程序里,用资源IDD_Dialog1又创建了一个对话框,并且在IDD_Dialog1上面添加了一个编辑框控件。那么在主窗口怎么获得IDD_Dialog1
上面的编辑框的指针?
直接用GetDlgItem()好象不行,因为编辑框不在主窗口上。怎么能获得任一窗口的指针?

你创建的IDD_Dialog1对话框,调用的实例如果是dlg
就用dlg.GetDlgItem(控件ID)
如果实例是指针,就用dlg->GetDlgItem(控件ID)
还有一个更加万能的方法,就是从桌面开始一层一层的找你要找的窗口句柄,提供一段代码供参考:
hWnd = ::GetWindow( ::GetDesktopWindow(), GW_CHILD );
while ( hWnd != NULL)
{
memset( szTittleInfo , NULL , 255 );
::GetWindowText( hWnd, szTittleInfo , 255 );
szInfo.Format( "%s" , szTittleInfo ) ;
if( szInfo.GetLength() > 0 )
{
if( szInfo.CompareNoCase( "YabooPanoramic - [四分镜头]") == 0 )
{
TarghWnd = hWnd ;
break ;
}
}
hWnd =::GetWindow( hWnd , GW_HWNDNEXT );
}

if( TarghWnd == NULL && m_CameraNo < 5 && m_nRunMode == 1 )
{
AfxMessageBox( "没有找到应用程序!" );

OnOK();
//return FALSE ;

return TRUE ;
}

m_AppHWnd = TarghWnd ;

//MdiClient ;
hWnd = ::GetWindow( TarghWnd , GW_CHILD );
//子框架句柄
hWnd = ::GetWindow( hWnd , GW_CHILD );
//视图句柄
TarghWnd = ::GetWindow( hWnd , GW_CHILD );

int nValue ;
hWnd = ::GetWindow( TarghWnd , GW_CHILD );
while( hWnd != NULL )
{
szInfo.Format( "%d" , hWnd ) ;
nValue = atoi( szInfo );
if( nValueA == nValue )
{
m_wndCameraA = hWnd ;
break ;
}
hWnd = ::GetWindow( hWnd , GW_HWNDNEXT );
}

hWnd = ::GetWindow( TarghWnd , GW_CHILD );
while( hWnd != NULL )
{
szInfo.Format( "%d" , hWnd ) ;
nValue = atoi( szInfo );
if( nValueB == nValue )
{
m_wndCameraB = hWnd ;
break ;
}

hWnd = ::GetWindow( hWnd , GW_HWNDNEXT );
}

hWnd = ::GetWindow( TarghWnd , GW_CHILD );
while( hWnd != NULL )
{
szInfo.Format( "%d" , hWnd ) ;
nValue = atoi( szInfo );
if( nValueA2 == nValue )
{
m_wndCameraA2 = hWnd ;
break ;
}
hWnd = ::GetWindow( hWnd , GW_HWNDNEXT );
}

hWnd = ::GetWindow( TarghWnd , GW_CHILD );
while( hWnd != NULL )
{
szInfo.Format( "%d" , hWnd ) ;
nValue = atoi( szInfo );
if( nValueB2 == nValue )
{
m_wndCameraB2 = hWnd ;
break ;
}

hWnd = ::GetWindow( hWnd , GW_HWNDNEXT );
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-12
先获得 IDD_Dialog1 这个对话框的句柄, 因为这个对话框是主窗口创建的,主窗口当然知道了, 然后再调用GetDlgItem,就能获得编辑框控件,如下:
HWND hwndEdit = ::GetDlgItem(IDD_Dialog1的窗口句柄,编辑框控件的ID号);
然后你可以对编辑框作任务操作,如 ::ShowWindow(hwndEdit, SW_HIDE); //隐藏编辑框。
如果你要对其他程序的窗口或控件进行操作的话,就要用EnumWindows, EnumChildWindows这类的API.

如何通过一个窗口的句柄得到指向窗口对象的指针
用窗体的句柄和空间的ID获得该控件指针。

QT中怎么在一个窗口中获得另一个窗口的指针?
Dialog,是不是Widget的子窗口,要看你构造函数是否指定了如this这样的父窗口,或者setParent().如果是的话,parentWidget ()可以获得QWidget的指针,但是你自己的对象(Widget)需要做一个做个类型的强制转化.不知道你说的parentWidget ()没有成功是什么意思,是获得的指针为空吗?

GetMainWnd示例
通常情况下,获取主窗体的指针会使用 CWnd * pMainWnd =AfxGetMainWnd(); 的方法。这里,AfxGetMainWnd() 函数用于获取应用程序的主窗口指针。其具体实现细节不作过多解释,但其核心在于查找当前应用的主窗口。对于 CWinThread::GetMainWnd(),这是CWinThread类的一个成员函数,用于获取主窗口的句柄。其默认处...

VC++中怎样获取到一个窗体的句柄?
FindWindow接收两个参数,第一个是窗口的类名,第二个就是窗口的标题。类名和标题都可以通过VS自带的工具Spy++获取到。他返回的就是一个窗口的句柄,HWND类型。MFC中封装了此方法,可以直接调用。

VC++中怎样获取到一个窗体的句柄?
回答:FindWindow接收两个参数,第一个是窗口的类名,第二个就是窗口的标题。 类名和标题都可以通过VS自带的工具Spy++获取到。 他返回的就是一个窗口的句柄,HWND类型。 MFC中封装了此方法,可以直接调用。

怎么在电脑上移动窗口?
在电脑上移动窗口,主要通过鼠标点击和拖动的方式来实现。当我们想要移动电脑上的一个窗口时,首先需要将鼠标指针移动到该窗口的标题栏上。标题栏通常位于窗口的顶部,显示着窗口的名称。将鼠标指针放置在此处,按下鼠标的左键不放,此时会感觉到窗口已经处于可移动状态。接着,在按住鼠标左键的同时,移动...

...屏幕下就可以看到各个其中的内容,请问这个怎么弄呀?
1.Windows Vista\\操作系统有一项很实用的“窗口预览”功能,通过预览这个小窗口我们可以方便地查找到每个窗口中的大致内容,从而方便我们“有的放矢”地直接切换到该窗口获取我们所需的信息。2.win7任务栏缩略图 计算机 右键 属性 在左边选择高级系统设置,在弹出的对话框中 选择 高级 选择性能 呵呵 ...

如何用键盘移动窗口?
如果是最大化得 用↑↓选择 还原 按回车 在按Alt + 空格 弹出菜单 唬移动 回车 用↑↓? 调整到想要的位置 按回车 问题七:如何用键盘选定窗口 1.按下Alt+打开窗口的控制菜单。2.移动光标键选定“移动”命令后按回车键,则鼠标指针变成4个箭头的形状。3.用光标移动键移动窗口。4.认为窗口的...

vc++如何获得鼠标指针在窗口中的位置
用ScreenToClient函数,他是把屏幕坐标转换为窗口坐标。CPoint point;GetCursorPos(&point);ScreenToClient(&point ); 本回答由电脑网络分类达人 董辉推荐 举报| 答案纠错 | 评论 1 0 梁高 | 程序员 擅长: IT 其他回答 CWnd *pwnd; \/\/需要赋值,指向目标窗口 CPoint pt; ::GetCursorPos(&pt); \/\/获取鼠标在...

在MFC单文档的View类中,如何获得指向状态栏的指针
在CView类内,人们最直接的想法是使用GetParent()函数直接获得父窗口CMainFrame类的指针。CMainFrame *pFrame=(CMainFrame*)GetParent();CStatusBar *pStatus=&pFrame-m_wndStatusBar;其中,GetParent()返回的是CWnd类的指针。CWnd* GetParent( ) const;需要将其强制转换为指向CMainFrame类的指针。(3...

相似回答