【求助】GetDlgItem获取了空的指针

cyxcw1 2013-09-30 11:31:39
RT:
代码如下:

CWnd* pWnd = AfxGetMainWnd();
CWnd* pAbout = pWnd->GetDlgItem(IDD_ABOUTBOX);


就是想获取主窗体的指针,然后通过ID在主窗体找到AboutDialog,但是通过这种办法获取的pAbout 居然是空的,怎么解决这个问题啊?
谢谢大家了
...全文
547 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-11-27
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
理查德大叔 2013-10-18
  • 打赏
  • 举报
回复
举个例子说明你这个问题,比如多文档视图结构的程序,在主程序文件.cpp中有如下代码: void CMultiDocTestApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } 他是当你点击关于时候,建立了临时的局部CAboutDlg对象,然后你关闭,这个对象就消亡了。 如果你想获取到CAboutDlg对象的指针,你不能用GetDlgItem,因为它只能获得对话框中控件的指针,而现在你要获取的是一个dialog的指针。 你可以在主程序文件.cpp类中建立指针CAboutDlg× m_pAboutDlg; 然后用这样的语句m_pAboutDlg = new CAboutDlg();在堆上创建CAboutDlg对象,并将指针保存在主程序中。 最后在主程序文件中创建一个函数,例如:CAboutDlg* GetAboutDlgPt(),将这个指针返回给调用它的人就行,这样你可以随时在其他类中调用GetAboutDlgPt()这个函数获取CAboutDlg对象的指针了。
lindiquan 2013-10-18
  • 打赏
  • 举报
回复
cyxcw1 2013-10-03
  • 打赏
  • 举报
回复
引用 10 楼 hdt 的回复:
[quote=引用 9 楼 cyxcw1 的回复:] [quote=引用 8 楼 hdt 的回复:] 以上摘自msdn hdlg参数来自 HWND WINAPI GetDlgItem( _In_opt_ HWND hDlg, _In_ int nIDDlgItem );
您所说的这个方法我已经用过了,我先获取主窗口的句柄HWND,然后再根据ID调用这个函数,所获得的HWND是空的[/quote] 建议你把那段msdn好好读读 As long as the hDlg parameter specifies a parent window and the child window has a unique identifie [/quote] 那就是hDlg应该是父窗口的句柄吧?楼上说了AboutDialog不是子控件,那就是这种方式不行咯?
真相重于对错 2013-10-03
  • 打赏
  • 举报
回复
引用 9 楼 cyxcw1 的回复:
[quote=引用 8 楼 hdt 的回复:] 以上摘自msdn hdlg参数来自 HWND WINAPI GetDlgItem( _In_opt_ HWND hDlg, _In_ int nIDDlgItem );
您所说的这个方法我已经用过了,我先获取主窗口的句柄HWND,然后再根据ID调用这个函数,所获得的HWND是空的[/quote] 建议你把那段msdn好好读读 As long as the hDlg parameter specifies a parent window and the child window has a unique identifie
cyxcw1 2013-10-03
  • 打赏
  • 举报
回复
引用 8 楼 hdt 的回复:
以上摘自msdn hdlg参数来自 HWND WINAPI GetDlgItem( _In_opt_ HWND hDlg, _In_ int nIDDlgItem );
您所说的这个方法我已经用过了,我先获取主窗口的句柄HWND,然后再根据ID调用这个函数,所获得的HWND是空的
真相重于对错 2013-10-02
  • 打赏
  • 举报
回复
以上摘自msdn hdlg参数来自 HWND WINAPI GetDlgItem( _In_opt_ HWND hDlg, _In_ int nIDDlgItem );
真相重于对错 2013-10-02
  • 打赏
  • 举报
回复
You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes. As long as the hDlg parameter specifies a parent window and the child window has a unique identifie
昨夜无风 2013-10-02
  • 打赏
  • 举报
回复
调用主窗口的函数,在主窗口函数中再GetDlgItem(IDD_ABOUTBOX)
邓学彬 2013-09-30
  • 打赏
  • 举报
回复
GetDlgItem只能获取子控件,AboutDialog显然不是子控件. 建议:AboutDialog创建时,把句柄或窗口类的指针保存起来.
worldy 2013-09-30
  • 打赏
  • 举报
回复
IDD_ABOUTBOX 不是mainframe的控件,可以使用getchildwindow
cyxcw1 2013-09-30
  • 打赏
  • 举报
回复
听说有获取子窗口的方法,这个方法怎么整啊?
cyxcw1 2013-09-30
  • 打赏
  • 举报
回复
引用 1 楼 CometNet 的回复:
GetDlgItem只能获取子控件,AboutDialog显然不是子控件. 建议:AboutDialog创建时,把句柄或窗口类的指针保存起来.
这样?那我不是要一个全局变量把那些东西都保存起来?感觉全局变量还是不怎么想用啊,怕碰到多线程的问题。 只有这一种办法了吗?谢谢了 我项目里建立的是CBCGPDialogBar,这个控件是帖在主界面上的,没办法通过ID获取其指针了吗?
oyljerry 2013-09-30
  • 打赏
  • 举报
回复
需要保存About对话框的对象

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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