关于mfc中CeditVew主框中的类指针怎样弄到其它类中
问大家一下我在mfc里面,定义我的视图类,继承自Cdeitview,获取视图的文本
然而我再新建一个类
再这样
Editview的指针就不是this指针了
是空
请问一个怎么才能变成this指针呀
这个是前面定义的 !
后面我再新建一个类
继承关系
在 MFC 中,如果你需要在其他类中访问 `CEditView` 的指针,可以通过消息传递或获取视图的指针来实现。以下是一些常见的方法:
1. **通过文档类:**
- 如果你的应用程序采用了文档/视图结构,可以通过文档来访问视图。首先,在文档类中保存视图的指针。
- 在视图类中,通过 `GetDocument()` 函数从文档中获取视图指针。
2. **全局变量:**
- 不推荐使用,但如果项目较小,可以将视图指针保存在全局变量中。这样在其他地方也能直接访问。
3. **单例模式:**
- 设计一个单例类来存储和访问你的视图指针。这样确保全局只有一个访问入口。
4. **消息传递:**
- 使用 Windows 消息传递机制将指针发送到其他类。例如,可以通过 `PostMessage` 或 `SendMessage` 向窗口发送消息,并在消息处理中接收指针。
5. **通过 Application 类:**
- 在应用程序类中(通常是 `CWinApp` 的子类)添加一个成员变量来保存指向视图的指针,这样可以在其他类中通过应用程序对象来访问。
选择适合你应用结构的方法,确保设计合理且易于维护。例如,在文档/视图架构中,首选通过文档来获取视图指针,这样能保持代码的模块化和可维护性。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 这样写也不对呀,得到的只是窗口标题,后面我全部使用的CeditView
janeyjhon 发表于 2024-10-08 11:47
这样写也不对呀,得到的只是窗口标题,后面我全部使用 ...
看起来你遇到的问题可能是访问视图中的文本内容。`CEditView` 中封装了一个 `CEdit` 控件,你可以使用它来获取或设置文本。以下是如何获取 `CEditView` 文本的步骤:
1. **获取文本内容**:
CString text;
// 假设 pEditView 是指向 CEditView 的指针
CEdit& editCtrl = pEditView->GetEditCtrl();
editCtrl.GetWindowText(text);
2. **确保指针有效**:
- 确保 `pEditView` 指针在使用前已经正确初始化并指向正确的 `CEditView` 对象。
3. **视图之间的通信**:
- 使用文档类在不同视图之间通信,这样可以通过文档类获取指向视图的指针。
- 使用 `POSITION` 和 `GetFirstViewPosition` 等方法遍历视图。
以下是一个小示例,在文档类中获取视图的文本:
void CMyDoc::GetTextFromEditView()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CMyEditView* pView = DYNAMIC_DOWNCAST(CMyEditView, GetNextView(pos));
if (pView != NULL)
{
CString text;
CEdit& editCtrl = pView->GetEditCtrl();
editCtrl.GetWindowText(text);
AfxMessageBox(text); // 示例中只是显示获取的文本
}
}
}
确保正确获取和遍历视图,使用合适的类型转换和验证,使指针的使用能切实指向 `CEditView` 实例。如果问题仍然存在,可以仔细检查指针传递和类的初始化过程。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-10-8 11:48
看起来你遇到的问题可能是访问视图中的文本内容。`CEditView` 中封装了一个 `CEdit` 控件,你可以使用 ...
我现在的问题是这个类是主框架中的类
class CMFCApplication1View
后面用的都是EditView获取内容,无法在其它自己建的类中得到在class CMFCApplication1View类中EditView指针,也就是无法实例化 因为这个类是主框中的 不知道您明白我说的意思没 能写上代码怎么得到这个在class CMFCApplication1View类中EditView指针的指向吗 在其它类中,CEditView指向为空,但是在class CMFCApplication1View类中EditView指针他的指针有hwd janeyjhon 发表于 2024-10-08 16:09
我现在的问题是这个类是主框架中的类
class CMFCAp ...
如果你无法在其他类中直接获取 `CMFCApplication1View` 中的 `CEditView` 指针,可以尝试以下方法:
1. **通过单例模式共享指针**:
- 可以在 `CMFCApplication1View` 类中定义一个静态成员,用于存储指向 `CEditView` 的指针,然后通过静态方法访问这个指针。
// CMFCApplication1View.h
class CMFCApplication1View : public CEditView
{
public:
static CMFCApplication1View* GetInstance();
static void SetInstance(CMFCApplication1View* instance);
private:
static CMFCApplication1View* m_instance;
};
// CMFCApplication1View.cpp
CMFCApplication1View* CMFCApplication1View::m_instance = nullptr;
CMFCApplication1View* CMFCApplication1View::GetInstance()
{
return m_instance;
}
void CMFCApplication1View::SetInstance(CMFCApplication1View* instance)
{
m_instance = instance;
}
// 在视图类初始化时设置实例
BOOL CMFCApplication1View::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
SetInstance(this);
// 其他初始化代码
}
- 在其他类中可以通过 `CMFCApplication1View::GetInstance()` 获取到视图指针。
2. **使用文档类获取视图指针**:
- 在文档/视图结构中,可以通过文档类遍历视图来获取需要的指针。
// 假设在文档类中
CMFCApplication1View* GetEditView()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
if (pView->IsKindOf(RUNTIME_CLASS(CMFCApplication1View)))
{
return dynamic_cast<CMFCApplication1View*>(pView);
}
}
return nullptr;
}
3. **通知和事件**:
- 可以在视图内提供一些公共接口方法,以便其他类调用这些方法来操作视图。
无论采用哪种方法,关键在于确保指针在初始化过程中被正确存储,并提供一个访问入口以便其他类能够获取此信息。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-10-8 16:20
如果你无法在其他类中直接获取 `CMFCApplication1View` 中的 `CEditView` 指针,可以尝试以下方法:
...
你弄的这些都行不通 janeyjhon 发表于 2024-10-09 09:06
你弄的这些都行不通
要在其他类中获取 `CMFCApplication1View` 类中的 `CEditView` 指针,通常的做法是确保视图实例的可访问性。以下是一种通过消息处理和查看结构获取指针的方法:
1. **在视图类中提供访问接口**:
首先在你的视图类中提供一个公共的接口函数,用于返回 `CEditView` 的指针。
class CMFCApplication1View : public CEditView {
public:
CEdit* GetEditCtrl() {
return &GetEditCtrl();
}
};
2. **从框架窗口获取视图指针**:
你可以在程序的框架或应用程序类中获取当前活动视图的指针:
CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd();
CMFCApplication1View* pView = (CMFCApplication1View*)pFrame->GetActiveView();
// Now you can use pView to access the edit control:
if (pView != nullptr) {
CEdit* pEdit = pView->GetEditCtrl();
// Do something with pEdit
}
3. **在你的新类中使用这个方法**:
在其他类中调用上面代码段,通过框架窗口获取视图的指针后,使用它来操作 `CEditView`。
这种方法确保你通过当前活动的框架窗口获取到视图,这样可以避免指针为空。不过,你需要确保框架窗口确实已经创建,并且视图有效。
如果框架窗口或视图还没有初始化,此时调用可能仍会导致空指针,所以要确保代码在适当时机(如应用已初始化后)调用上述操作。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 谢谢已经解决了 janeyjhon 发表于 2024-10-09 09:21
谢谢已经解决了
不客气!很高兴听到你解决了问题。如果你还有其他问题或者需要进一步的帮助,随时可以问我。祝你继续顺利编程!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]