我想在一个对话框上动态画图,重载了该对话框的OnPaint事件,在其中写的代码如下:
void CTestDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CWnd* pWnd = GetDlgItem(IDD_DIALOG1);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
// Do not call CDialog::OnPaint() for painting messages
}
程序运行到CDC* pDC = pWnd->GetDC();这一句,就弹出一个应用程序错误:
“xxxxxx”指令引用的“xxxxxx”内存,该内存不能为“read”
要终止程序,单击“确定”
要调试程序,单击“取消”这是一个新建的工程,别的地方没有手动添加代码
大虾帮忙指点!!!
void CTestDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CWnd* pWnd = GetDlgItem(IDD_DIALOG1);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
// Do not call CDialog::OnPaint() for painting messages
}
程序运行到CDC* pDC = pWnd->GetDC();这一句,就弹出一个应用程序错误:
“xxxxxx”指令引用的“xxxxxx”内存,该内存不能为“read”
要终止程序,单击“确定”
要调试程序,单击“取消”这是一个新建的工程,别的地方没有手动添加代码
大虾帮忙指点!!!
我是说显示出来。
因为这句CWnd* pWnd = GetDlgItem(IDD_DIALOG1);
如果你的DIALOG1对话框没有显示,他将得不到正确的指针。
所以出错。
察看有没有这个标识IDD_DIALOG1
如果没有这个根本不能顺利编译。
这句话好像有问题,GetDlgItem是获取对话框内部控件的函数,你传给他的是对话框自身的资源ID.
如果你想取得对话框的指针,this就是了。就算你取对了
pWnd->Invalidate();
pWnd->UpdateWindow();
这又是干什么?你想引起死循环吗?
to Carapee:程序我是从书上copy的,程序根本不能运行到pWnd->Invalidate();这一句
大家继续指教
就是CWnd* pWnd = GetDlgItem(IDD_DIALOG1)的问题!
然后将CDC* pDC = pWnd->GetDC();语句改为:
CDC* pDC = this->GetDC();或
CDC* pDC = GetDC();
应该就可以了,先试一试吧,书上不一定都是对的,呵呵另:pWnd->UpdateWindow();语句应该也可以去掉
TO楼主,你可以在INITDIALOG中先显示这个对话框。
CDC* pDC = pWnd->GetDC();"CDC似乎用不着GetDlgItem(IDD_DIALOG1)返回吧
CDC *hCDC = CWnd::GetDC();
如此不就行了.要不这样:
void Ccheck::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
HWND hWnd = CyourDialog::GetSafeHwnd();//CyourDialog为你的IDD_DIALOG1所属的类
CWnd* pWnd = CDialog::GetSafeOwner(CDialog::GetOwner(), &hWnd);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
// Do not call CDialog::OnPaint() for painting messages
}
CDC* pDC = pWnd->GetDC();"CDC似乎用不着GetDlgItem(IDD_DIALOG1)返回吧
CDC *hCDC = CWnd::GetDC();
如此不就行了.要不这样:
void CTestDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
HWND hWnd = CyourDialog::GetSafeHwnd();//CyourDialog为你的IDD_DIALOG1所属的类
CWnd* pWnd = CDialog::GetSafeOwner(CDialog::GetOwner(), &hWnd);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
// Do not call CDialog::OnPaint() for painting messages
}
不好意思,笔误.^_^