GetDlgItem() 有以下原型:CWnd::GetDlgItem CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;但是看不明白:窗口指针CWnd* 与 窗口句柄HWND* 有什么分别?
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;但是看不明白:窗口指针CWnd* 与 窗口句柄HWND* 有什么分别?
CWnd* pDlg=GetDlgItem(IDC_XX);
一般检查一下pDlg是否为空,尽量不要直接使用。
比如:GetDlgItem(IDC_XX)->SetWinWindowText("text")是不安全的。
CWnd *pTempWnd = CWnd::FromHandle(hWnd); // 如果 hWnd 存在对应的 CWnd* ,则返回其指针,否则,创建一个 MFC 临时窗体并返回其指针。
注意这个函数会返回临时窗体的指针,如果需要更安全,调用 CWnd::FromHandlePermanent ,他在不存在对应的 CWnd* 时返回 NULL。
Thank you In355Hz(好象一条狗),我还有另一个问题: 我在 自制的 ActiveX 里 想获得ActiveX控件容器的其它常规控件的指针;如编辑框(IDC_EDIT1),从而操纵这些控件的行为。用GetDlgItem(IDC_XX)时老出现错误……我是 在ActiveX控件类的内部调用GetDlgItem(IDC_XX),想得到控件外面的其它常规控件指针,这个想法有错吗?还是要先获得父窗口的指针,再去调用GetDlgItem(IDC_XX)呢?
To: webber84(***闭关修炼中***) 那怎样得到 控件的父窗口的指针 急切想知道样板!
我用过:GetParent,GetOwner,GetParentOwner,FindWindow
结果只有GetParentOwner可以通过编译,但只是得到了最顶层的窗口的指针,我想要的是上一级窗口的指针?!?!?!?!?!
{
AfxMessageBox("You are in Event - addtest ");
CWnd* pwnd=GetParentOwner();//这个是成功了,但不合要求,是顶层窗口指针
//CWnd* pwnd=GetOwner();//以下不知得到的是什么指针,编译器说不是一个window
//CWnd* pwnd=GetParent();
//CWnd* qwnd=pwnd->GetDlgItem(IDC_EDIT1);
//(pwnd->GetDlgItem(IDC_EDIT1))->EnableWindow(FALSE);
CString cs;
pwnd->GetWindowText(cs);
AfxMessageBox(cs);
//pwnd->EnableWindow(FALSE);
//pwnd->GetDlgItem(IDC_EDIT1);
//qwnd->EnableWindow(FALSE);
}
如果还不够清楚我还可以解释