注册 登录
编程论坛 VC++/MFC

关于这个函数CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);的求解

guandekun53 发布于 2013-05-31 21:54, 1802 次点击
请教哪位高手,我在程序中用了这个函数CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);
来得到1个对话框的指针,编译都能通过,一运行就错,单步运行发现函数找不到IDD_DIALOG2这个控件,
以至于得到的指针CDialog*pShuru=0,检查很长时间不知道错在那里,恳请哪位高人指点一下,告诉我问题在哪里。先谢谢了。
6 回复
#2
yuccn2013-06-01 01:21
GetDlgItem是用来获取控件对应的那个对象指针的,不是获取窗口
你这样获取可能取出来就是一个NULL的指针啦,因为窗口都没有这个控件(id对应着一个控件)

你查下msdn吧


[ 本帖最后由 yuccn 于 2013-6-1 01:22 编辑 ]
#3
guandekun532013-06-01 08:46
谢谢版主!的确是个NULL指针,我也查了msdn,但总得不到要领,感觉说的不清楚,版主是否能再讲细点.我再试试看.谢谢!
#4
yuccn2013-06-01 09:52
你在什么地方想获取对话框对象的指针?
比如:
CXXXDlg::ABC()
{
CDialog*pShuru=(CDialog*)GetDlgItem(IDD_DIALOG2);
}

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

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

#5
guandekun532013-06-01 17:47
版主你好:我把相关代码压缩了放到附件里这样可以吗,
只有本站会员才能查看附件,请 登录

对这个代码我解释1下,其中输入shurDig.h和ShuruDig.cpp是含有1个编辑框的对话框,ZhiDig.h和ZhiDig.cpp是有18个按键的对话框,我现在要在ZhiDig对话框内接收到按键后把键值通过消息发送到ShuruDig对话框在这个对话框内的编辑框上显示出来,就是接着上次的问题,现在我知道怎样发消息了,但就是得不到ShuruDig对话框的指针,恳请版主看后给予帮助。谢谢!
#6
guandekun532013-06-01 17:58
版主你好:前面没讲清楚,IDD_DIALOG2是CShuruDig对话框的ID号。
#7
yuccn2013-06-01 20:20
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 只是用于获取窗口内的控件的。

1