| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1802 人关注过本帖
标题:关于这个函数CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);的求解
只看楼主 加入收藏
guandekun53
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-1-26
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
关于这个函数CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);的求解
请教哪位高手,我在程序中用了这个函数CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);
来得到1个对话框的指针,编译都能通过,一运行就错,单步运行发现函数找不到IDD_DIALOG2这个控件,
以至于得到的指针CDialog*pShuru=0,检查很长时间不知道错在那里,恳请哪位高人指点一下,告诉我问题在哪里。先谢谢了。
搜索更多相关主题的帖子: 函数 对话框 
2013-05-31 21:54
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
GetDlgItem是用来获取控件对应的那个对象指针的,不是获取窗口
你这样获取可能取出来就是一个NULL的指针啦,因为窗口都没有这个控件(id对应着一个控件)

你查下msdn吧


[ 本帖最后由 yuccn 于 2013-6-1 01:22 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-06-01 01:21
guandekun53
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-1-26
收藏
得分:0 
谢谢版主!的确是个NULL指针,我也查了msdn,但总得不到要领,感觉说的不清楚,版主是否能再讲细点.我再试试看.谢谢!
2013-06-01 08:46
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
你在什么地方想获取对话框对象的指针?
比如:
CXXXDlg::ABC()
{
CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);
}

你是这样调用的吗、?如果是,估计那个地方的this就是你想获取的对象指针了。
GetDlgItem是获取控件对应的CWnd类对象的,不是对话框本身。你还不明白?

或者把你的代码发出来吧,我不清楚你的CXXXFLG 和IDD_DIALOG2 有什么关系,
GetDlgItem 获取的只是对话框和对话框内部的控件的关系


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-06-01 09:52
guandekun53
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-1-26
收藏
得分:0 
版主你好:我把相关代码压缩了放到附件里这样可以吗,
Mpet.rar (5.1 KB)

对这个代码我解释1下,其中输入shurDig.h和ShuruDig.cpp是含有1个编辑框的对话框,ZhiDig.h和ZhiDig.cpp是有18个按键的对话框,我现在要在ZhiDig对话框内接收到按键后把键值通过消息发送到ShuruDig对话框在这个对话框内的编辑框上显示出来,就是接着上次的问题,现在我知道怎样发消息了,但就是得不到ShuruDig对话框的指针,恳请版主看后给予帮助。谢谢!
2013-06-01 17:47
guandekun53
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2013-1-26
收藏
得分:0 
版主你好:前面没讲清楚,IDD_DIALOG2是CShuruDig对话框的ID号。
2013-06-01 17:58
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
void CZhiDig::OnNum(UINT uID)
{
    CBitmap        Bitmap;
    HBITMAP        hBitmap;

    if(uID<=IDC_BUTTON12)
    {   
…………
    }
    else
    {   
……
        CDialog        Dialog;
        HWND        hWnd;
        Dialog.hWnd=(HWND)Dialog.Detach();
        CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);
        pShuru->PostMessage(My_MSG,(WPARAM)uID,0);
     
    }
}

这样不行的,这个地方的GetDlgItem实质上等价于this->GetDlgItem,这样获取肯定是NULL的。

其实我还是不明白你想干什么呢,不过你这样使用,说明你对 vc开发理解还是很薄弱,你得先相理解 窗口和控件的关系,是窗口和窗口的关系,父子窗口(ParentWnd)关系和所属窗口(OwnerWnd)关系等。

GetDlgItem 只是用于获取窗口内的控件的。


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-06-01 20:20
快速回复:关于这个函数CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);的求 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036404 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved