CPaintDlg是派生自CDialog的一个类
在CPaintDlg有个控件,ID是ID_PAINT;
我在我的C***View中定义 CPaintDlg A;
我该怎么得到指向ID_PAINT的指针呢?
我是这么做的
CPaintView *OwnWnd;
OwnWnd=(CPaintView *)GetParentOwner();
CWnd* pWnd = OwnWnd->m_paintdlg.GetDlgItem(IDC_PAINT);
编译的时候没有错,但一运行就出错了~~~
谁能给我讲下啊~
在CPaintDlg有个控件,ID是ID_PAINT;
我在我的C***View中定义 CPaintDlg A;
我该怎么得到指向ID_PAINT的指针呢?
我是这么做的
CPaintView *OwnWnd;
OwnWnd=(CPaintView *)GetParentOwner();
CWnd* pWnd = OwnWnd->m_paintdlg.GetDlgItem(IDC_PAINT);
编译的时候没有错,但一运行就出错了~~~
谁能给我讲下啊~
CWnd* pWnd = OwnWnd->A.GetDlgItem(IDC_PAINT);
因为你虽然定义了CPaintDlg A;但是,明确一点,这个时候这个C++对象已经存在了,然而和他关联的Windows对象,即这个对话框,是不存在的,既然这个对话框不存在,你又如何能得到他中间的控件呢?因此你的程序肯定要出错。
你需要首先创建这个对话框。然后就看你需要模态还是非模态对话框了。一般说来,你这种情况需要使用非模态对话框,也就是通过调用A.Create(CPaintDlg::IDD)来达到创建对话框的目的。如果你使用DoModal()来创建模态对话框,那么等到这个函数返回的时候,对话框这个窗口就已经销毁了,那么你又得不到对话框中的控件了。
你可以在OnDraw里面直接调用A.Invalidate()达到重绘的目的。
我还想问下,当我的A对话匡被激活了后,我的主窗口就不能被操作的了,必须关了我的对话匡才行。要怎么做才能做到我可以在我的主窗口和对话匡间实现用鼠标交替激活的吗?也就是我鼠标一点主窗口,就能在主窗口操作,一点我的对话匡又能在对话匡上操作的呢?
1,在资源编辑器里面,把对话框的Visible属性设置为TRUE,也就是选中那个复选框;
2,在Create对话框之后,通过调用ShowWindow来显示,比如:
CPaintDlg dlg;
if (dlg.Create(dlg.IDD))
dlg.ShowWindow(SW_SHOW);