| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3384 人关注过本帖
标题:MFC如何在窗口重绘中如何保持原有的视图不变
只看楼主 加入收藏
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
结帖率:89.66%
收藏
已结贴  问题点数:20 回复次数:6 
MFC如何在窗口重绘中如何保持原有的视图不变
问题如上。
本人要做一个有关文字处理的程序。
在视图类中响应了WM_CHAR消息,并输出,键盘按下的字符。
但是一旦改变窗口的大小,那原来输出的那些字符就都不见了。
请高手赐教。
难道要把响应的函数写在OnDraw函数里。
这样不现实啊。
搜索更多相关主题的帖子: 窗口 视图 MFC 
2010-09-08 19:15
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:0 
响应函数不能写在OnDraw,你可把显示部分写在OnDraw中

2010-09-08 20:44
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
在文档类里面响应WM_CHAR,修改文档内容,在视类里面响应ON_DRAW,重绘修改后的文档内容。


举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-08 22:07
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 3楼 东海一鱼
我试过了。
我在文档类中,响应WM_CHAR消息,但是就报错了。
提示是:OnChar这个函数不是文档类的一个成员函数。
我是鼠标右键在文档类添加一个windows消息响应的。这样操作应该不会有问题吧。
但是编译就报错了。

急。。。。
请高手赐教。
感激不尽。


[ 本帖最后由 南国利剑 于 2010-9-8 23:58 编辑 ]

南国利剑
2010-09-08 23:40
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
以下是引用南国利剑在2010-9-8 23:40:05的发言:

我试过了。
我在文档类中,响应WM_CHAR消息,但是就报错了。
提示是:OnChar这个函数不是文档类的一个成员函数。
我是鼠标右键在文档类添加一个windows消息响应的。这样操作应该不会有问题吧。
但是编译就报错了。

急。。。。
请高手赐教。
感激不尽。
   啊,不好意思。我的错。
   我记错了,文档类应该只能响应命令消息。
   如此即可:
程序代码:
public:
    CString m_Data;      //在文档类,添加一个字串数据成员保存输入数据

   void COnCharView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)  //在视类,响应WM_CHAR消息
{
    // TODO: Add your message handler code here and/or call default
    COnCharDoc* pDoc = GetDocument();                              //获得文档类对象
    pDoc->m_Data += nChar;                                         //修改数据内容
    pDoc->UpdateAllViews(NULL);                                    //刷新视图

    CView::OnChar(nChar, nRepCnt, nFlags);
}
void COnCharView::OnDraw(CDC* pDC)                            //处理OnDraw虚函数
{
    COnCharDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CRect Rect;
    GetClientRect(&Rect);
    pDC->DrawText(pDoc->m_Data,&Rect,DT_LEFT | DT_TOP);     //绘制文档成员数据    
}


举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-09 08:45
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 5楼 东海一鱼
COnCharDoc* pDoc = GetDocument();  
不好意思。这句话报错了。标识符未定义。
这个函数的返回值应该是CDocument*

我在msdn里查了没有这个关键字COnCharDoc

南国利剑
2010-09-09 10:09
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
程序代码:
class COnCharDoc : public CDocument
{
protected: // create from serialization only
    COnCharDoc();
    DECLARE_DYNCREATE(COnCharDoc)

// Attributes
public:

// Operations
public:

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(COnCharDoc)
    public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);
    //}}AFX_VIRTUAL

// Implementation
public:
    CString m_Data;
    virtual ~COnCharDoc();
#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
    //{{AFX_MSG(COnCharDoc)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};
COnCharDoc是我自己定义的类,继承自CDocument。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-09 16:37
快速回复:MFC如何在窗口重绘中如何保持原有的视图不变
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022059 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved