读书人

VC++的一个有关问题这里为什么会报错

发布时间: 2012-11-01 11:11:33 作者: rapoo

VC++的一个问题,这里为什么会报错
void CSettingDlg::OnPaint()
{
UpdateData();
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
CPen pen(m_style,m_nLine_Width,RGB(255,0,0));
dc.SelectObject(&pen);
CRect rect;

GetDlgItem(IDC_SMPLE)->GetClientRect(&rect);
GetDlgItem(IDD_DLG_SETTING)->GetWindowRect(&rect);
GetDlgItem(IDC_SMPLE)->GetWindowRect(&rect);
ScreenToClient(&rect);
dc.MoveTo(rect.left,rect.top+50);
dc.LineTo (rect.right,rect.top+50);


}

IDD_DLG_SETTING 是对话框CSettingDlg 的ID,
把GetDlgItem(IDD_DLG_SETTING)->GetWindowRect(&rect); 改成GetWindowRect(&rect);就不会有错了,难道我在里面“多此一举”的先取CSettingDlg的指针,再调用它的函数就不行吗?

[解决办法]
确实多此一举,此时CSettingDlg的指针不就是this指针吗? 在类的内部可以直接调用Method。
GetDlgItem :Retrieves a pointer to the specified control or child window in a dialog box or other window.

获取的是控件或者是对话框或者其他窗口中的子窗口。不能获取获取对话框自身的指针。
[解决办法]
翻译错了

获取的是对话框或者其他窗口中的 控件或子窗口。
[解决办法]
当然可以,如:
DWORD dwIP;
((CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);
==========
CEdit *edit=(CEdit*)GetDlgItem(IDC_EDIT1);
edit->Clear();
edit->SetWindowText("");

读书人网 >C++

热点推荐